Советы по оптимизации процесса обучения
Запуск задачи обучения на кастомном образе возможен только в том случае, если образ, на базе которого она запускается, собран на основе базового образа (подробнее в документации).
Кастомные образы поддерживаются для:
В базовые образы предустановлены основные библиотеки для машинного обучения (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 - 73933 f62 - c1d7 - 407 c - 8807 - cfaa94f5d71c - mpiworker - 2. lm - mpi - job - 73933 f62 - c1d7 - 407 c - 8807 - cfaa94f5d71c closed by remote host .
- Работа на разных регионах размещения ресурсов
- Кастомные образы
- Режимы запуска задач обучения
- Работа с данными
- Ошибка CUDA out of memory
- Диагностика ошибок