Советы по оптимизации процесса обучения

Запуск задачи обучения на кастомном образе возможен только в том случае, если образ, на базе которого она запускается, собран на основе базового образа (подробнее в документации).

Кастомные образы поддерживаются для:

Примечание

В базовые образы предустановлены основные библиотеки для машинного обучения (TensorFlow, PyTorch и т.д.). Мы не рекомендуем менять версии предустановленных базовых библиотек.

Работа на разных регионах размещения ресурсов

Christofari.V100 и Christofari.A100 имеют разные хранилища, поэтому содержимое каталога /home/jovyan не синхронизируется между хранилищами разных регионов размещения ресурсов. Работая в Функция client_lib, важно обращать внимание на значение параметра region — иначе задачи уйдут в некорректный регион. То же самое касается логов. Подробнее см. в Работа с разными регионами.

Важно выбирать подходящие версии образов для каждого региона. Образы для разных регионов не являются взаимозаменяемыми. Например, для Christofari.A100 нужно использовать образы, имеющие в названии окончание -a100 (например, jupyter-cuda11.0-tf2.4.0-pt1.7.1-gpu-a100).

Появление ошибки с кодом:

RuntimeError: CUDA error: device kernel image is invalid

означает, что вы пытаетесь запустить образы с версией cu10.* на Christofari.A100. Для запуска на Christofari.V100 и Christofari.A100 необходимы разные версии образов (в названиях образов для Christofari.A100 есть a100), например:

  • cr.ai.cloud.ru/aicloud-jupyter/jupyter-cuda11.2-tf2.6.0-gpu:0.0.80 (для Christofari.V100)

  • cr.ai.cloud.ru/aicloud-jupyter/jupyter-cuda11.2-tf2.6.0-gpu-a100:0.0.80 (для Christofari.A100)

Подробнее см. Образы, используемые на платформе.

Кастомные образы

Когда необходимо обновить содержимое кастомного образа, нужно загрузить его в Docker registry с новым тегом. Если загрузить новое содержимое образа со старым тегом, то обновленный образ может не запуститься.

Подробнее про кастомные образы в документации:

Примечание

Название образа должно начинаться с маленькой буквы.

Когда первый раз запускается задача на образе (например image:0.0.1) — он попадает в кеш воркер-ноды. Следовательно, даже если в Docker registry повторно загрузить новое содержимое с тем же тегом (image:0.0.1), на воркер-ноде будет использоваться версия, загруженная ранее. Поэтому нужно использовать либо разные теги 0.0.2, либо разные названия образов image1.

Режимы запуска задач обучения

В задачах обучения несколько режимов запуска:

  • Horovod,

  • PyTorch (он же PyTorch Distributed Data Parallel),

  • дополнительный режим binary, в котором чуть больше контроля за командой запуска.

Если вы хотите самостоятельно запускать процессы на воркер-ноде, установите у задачи обучения параметр processes_per_worker=1.

Подробнее в разделе Справочник API.

Работа с данными

Особенность работы хранилища NFS (горячего файлового хранилища) в том, что оно наиболее эффективно при чтении файлов среднего и крупного размера, то есть более 1 МБ.

Внимание

Внутри одного каталога желательно хранить не более 10000 файлов размером более 1 МБ.

Например, если нужно хранить короткие текстовые строки или картинки в низком разрешении, можно воспользоваться одним из форматов для хранения готовых датасетов:

Возможно также использовать любые бинарные форматы (parquet, hdf5).

Для PyTorch DataLoader на скорость работы с батчем могут влиять параметры num_workers, pin_memory. Рекомендуется проверить несколько значений, чтобы сделать работу на выделенном количестве ресурсов оптимальной.

Ошибка CUDA out of memory

Если возникает ошибка CUDA out of memory, попробуйте уменьшить batch_size (подробнее про параметр).

Нужно учитывать, что у некоторых архитектур нейронных сетей (например, трансформеров) размер используемой памяти может зависеть от длины последовательности. Следовательно, если сэмплы имеют разную длину, то память может закончиться не сразу, а когда в батч попадут большие примеры. Таким образом, ошибка может возникнуть не в первом батче, поэтому лучше иметь запас по памяти.

В случае, если задача успешно запускается на небольшом количестве ресурсов (например, несколько карт), но останавливается с ошибкой CUDA out of memory на большом количестве карт, то можно попробовать уменьшить batch_size. Работы с активациями от большего количества карт занимают много памяти.

Если уменьшение batch_size не дает результата, можно прибегнуть к использованию библиотеки deepspeed (или аналогичной), которая позволяет обучать модели на нескольких GPU (подробнее по ссылке).

Диагностика ошибок

Для диагностики проблем с задачами рекомендуется установить параметр CUDA_LAUNCH_BLOCKING=1 через env_variables, подробнее в документации.

По логам можно определить, на каком воркере произошла ошибка, например:

Connection to lm-mpi-job-73933f62-c1d7-407c-8807-cfaa94f5d71c-mpiworker-2.lm-mpi-job-73933f62-c1d7-407c-8807-cfaa94f5d71c closed by remote host.
Запустили Evolution free tier
для Dev & Test
Получить