Поделиться через


Загрузка данных на бессерверные вычислительные ресурсы GPU

В этом разделе рассматриваются сведения о загрузке данных на бессерверные графические вычислительные ресурсы GPU специально для приложений машинного и глубокого обучения. Ознакомьтесь с руководством , чтобы узнать больше о том, как загружать и преобразовывать данные с помощью API Python Spark.

Загрузка табличных данных

Используйте Spark Connect для загрузки табличных данных машинного обучения из таблиц Delta.

Для обучения с одним узлом можно преобразовать Apache Spark DataFrames в pandas DataFrames с помощью метода PySpark, а затем при необходимости преобразовать в формат NumPy с помощью метода toPandas()to_numpy().

Замечание

Spark Connect откладывает анализ и разрешение имен во время выполнения, что может изменить поведение кода. См . статью "Сравнение Spark Connect с классической версией Spark".

Spark Connect поддерживает большинство API PySpark, включая Spark SQL, Pandas API в Spark, Structured Streaming и MLlib (на базе DataFrame). См. справочную документацию по API PySpark для последних поддерживаемых API.

Сведения о других ограничениях см. в разделе об ограничениях бессерверных вычислений.

Загрузка данных внутри @distributed декоратора

При использовании безсерверного API GPU для распределенного обучения переместите код загрузки данных в декоратор @distributed. Размер набора данных может превышать максимальный размер, разрешенный пикл, поэтому рекомендуется генерировать набор данных внутри декоратора, как показано ниже:

from serverless_gpu import distributed

# this may cause pickle error
dataset = get_dataset(file_path)
@distributed(gpus=8, remote=True)
def run_train():
  # good practice
  dataset = get_dataset(file_path)
  ....

Производительность загрузки данных

/Workspace и /Volumes размещаются в удаленном хранилище каталога Unity. Если набор данных хранится в каталоге Unity, скорость загрузки данных ограничена доступной пропускной способностью сети. Если вы обучаете несколько эпох, рекомендуется сначала скопировать данные локально, в частности в каталог /tmp, размещенный на очень быстром хранилище с использованием NVMe SSD-дисков.

Если набор данных большой, рекомендуется также использовать следующие методы для параллелизации обучения и загрузки данных:

  • При обучении нескольких эпох обновите набор данных для кэширования файлов локально в каталоге /tmp перед чтением каждого файла. В последующих эпохах используйте кэшированную версию.
  • Параллелизуйте получение данных, включая воркеры в API Torch DataLoader. Установите num_workers значение не менее 2. По умолчанию каждый рабочий поток предварительно загружает два задания. Чтобы повысить производительность, увеличьте num_workers (что увеличит параллельные операции чтения) или prefetch_factor (что приведет к увеличению числа элементов каждой рабочей предварительной выборки).