Советы по оптимизации процесса обучения
Запуск задачи обучения на кастомном образе возможен только в том случае, если образ, на базе которого она запускается, собран на основе базового образа (подробнее в документации).
Кастомные образы поддерживаются для:
Важно
В базовые образы предустановлены основные библиотеки для машинного обучения (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.msk.sbercloud.ru/aicloud-jupyter/jupyter-cuda11.2-tf2.6.0-gpu:0.0.80
(для Christofari.V100)cr.msk.sbercloud.ru/aicloud-jupyter/jupyter-cuda11.2-tf2.6.0-gpu-a100:0.0.80
(для Christofari.A100)
Подробнее см. Образы, используемые на платформе.
Кастомные образы
В случае обновления содержимого кастомного образа нужно загрузить его в Docker registry с новым тегом. Если загрузить новое содержимое образа со старым тегом, то обновленный образ может не запуститься.
Подробнее про кастомные образы в документации:
Примечание
Имя образа должно начинаться с маленькой буквы.
Когда первый раз запускается задача на образе (например image:0.0.1
) — он попадает в кэш worker-node.
Следовательно, даже если в Docker registry повторно загрузить новое содержимое с тем же тегом (image:0.0.1) - на worker-node будет использоваться версия, загруженная ранее.
Поэтому нужно использовать разные теги 0.0.2
, либо названия образов image1
.
Режимы запуска задач обучения
В задачах обучения несколько режимов запуска:
horovod
pytorch (он же pytorch distributed dataparallel)
дополнительный режим binary в котором чуть больше контроля за командой запуска.
Если вы хотите самостоятельно запускать процессы на worker-node, установите у задачи обучения параметр processes_per_worker=1
.
Подробнее в разделе Методы для работы с задачами обучения.
Работа с данными
Особенность работы хранилища 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.