- tocdepth
2
Советы по оптимизации процесса обучения
Запуск задачи обучения на кастомном образе возможен только в том случае, если образ, на базе которого она запускается, собран на основе базового образа (подробнее в документации).
Кастомные образы поддерживаются для:
Примечание
В базовые образы предустановлены основные библиотеки для машинного обучения (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 МБ.
Например, если нужно хранить короткие текстовые строки или картинки в низком разрешении, можно воспользоваться одним из форматов для хранения готовых датасетов:
для tensorflow — TFRecord для TFDS.
Возможно также использовать любые бинарные форматы (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.
для Dev & Test