Задачи обучения

Какие хранилища используются для обучения моделей?

Для обучения моделей необходимо:

  1. Разместить пользовательские данные на S3 — объектное хранилище в рамках модуля Data Catalog.

  2. Перенести данные из S3 в «горячее» хранилище NFS (см. Работа с данными).

Подробнее об использовании данных для обучения моделей см. Работа с данными.

Как отследить падение задачи?

При разработке скрипта распределенного обучения с использованием низкоуровневых библиотек (mpi, torch.distributed и т.д.) стоит обратить внимание на то, что процессы работают независимо друг от друга. Не забудьте поставить флаги коммуникации между процессами (barrier, all_reduce и пр.), чтобы распределенный процесс обучения шел корректно.

Tensorflow/Pytorch не видит GPU, медленно идет обучение

Возможные причины:

  • Запуск на ресурсах, в которых не используются GPU (например, бесплатных).

  • Переустановили базовые версии библиотек.

Примечание

Не рекомендуется менять версию базовых пакетов — Horovod, TensorFlow, Apex, MXNet, TensorBoard, KServe, PyTorch.

Решение:

  1. Удалить папку /home/jovyan/.local, выполнив команду rm –rv ~/.local.

  2. Выбрать наш базовый образ с подходящей версией для требуемого региона размещения ресурсов.

  3. Пересоздать Jupyter Server с конфигурацией, которая требуется для выбранного региона размещения ресурсов.

Нет root-доступа. Как установить требуемые зависимости?

В Jupyter Server нет root-доступа, apt-get, sudo отключены.

Примечание

Не рекомендуется менять версию базовых пакетов — Horovod, TensorFlow, Apex, MXNet, TensorBoard, KServe, PyTorch.

Рекомендуем выбрать подходящий образ из имеющихся на платформе ML Space или собрать кастомный образ по инструкции.

Как отследить ход выполнения задачи обучения в регионе?

Можно узнать статус выполнения задачи или вывести ее логи, используя стандартные средства функции client_lib. Так, команды client_lib.Job.status() и client_lib.status(job_name) возвращают статус задачи, отправленной в регион. А команды client_lib.Job.logs() и client_lib.logs(job_name) возвращают логи по задаче обучения, отправленной в регион.

Вы можете сами выставить уровень детализации логов с помощью опционального параметра verbose. По умолчанию значение данного параметра True, то есть пользователю предоставляется полный лог. Если изменить значение на False, из лога исключается информация о статусе выполнения некоторых служебных процессов, например, пула образа или старта рабочих узлов региона.

Более подробно о client_lib — в соответствующем разделе.

Можно ли обучать на большом количестве GPU?

ML Space позволяет обучать модели распределенно на базе суперкомпьютеров Christofari.V100 и Christofari.A100. Количество GPU и количество рабочих узлов региона задаются с помощью параметров n_ gpus и n_ workers соответственно. Обратите внимание: чем больше GPU требуется для обучения модели, тем выше вероятность того, что вычислительных ресурсов может не хватить.

Особенности запуска таких задач см. в разделе Обучение моделей на большом количестве GPU.

Можно ли обучать на CPU?

Можно.

Для запуска задачи обучения только на CPU используйте регион Cloud.Region.HP1.

Подробнее в разделе задачи обучения (Job).

Что делать, если моя задача долго находится в очереди?

Скорее всего, для выполнения задачи сейчас нет ресурсов.

Можно ли настраивать количество ядер, выделяемых на одну видеокарту?

Изменить количество ядер нельзя, они выделяются пропорционально количеству GPU. В регионе Christofari.V100 выделяется три ядра на один GPU, в регионе Christofari.A100 выделяется 16 ядер на один GPU.

Как я могу сохранять промежуточные результаты в процессе обучения моделей?

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

Как я могу узнать количество виртуальной памяти в экземпляре на видеокарте?

Для этого откройте терминал в Jupyter Notebook (New → Terminal) и выполните команду:

free -h

Есть ли возможность добавлять Git-репозитории в различные регионы?

Да, такая возможность есть. Для этого откройте терминал в Jupyter Notebook (New → Terminal) и выполните команду:

git clone <your_repo_url>

Репозиторий будет склонирован в рабочий каталог /home/jovyan на NFS. После этого можно импортировать из репозитория библиотеки, необходимые для работы.

Примечание

Некоторые библиотеки требуют компиляции. Например, чтобы собрать библиотеку torch-blocksparse из репозитория, необходимо выполнить команду

sudo apt-get install llvm-9-dev

Исполнение этой команды требует прав администратора на NFS. На данный момент для использования sudo и работы c такими библиотеками необходимо написать письмо в support@cloud.ru.

Есть ли возможность подключиться к контейнерам по SSH для отладки?

В стандартных и пользовательских окружениях есть возможность подключения к контейнерам по SSH (см. Подключиться по SSH к Jupyter Server).

Есть ли доступ к интернету из контейнера при запуске задачи обучения с использованием client_lib.Job?

Для отправки запросов из Jupyter Server в интернет используйте следующие номера TCP-портов: 80, 443, 8000–8999.

Использование Jupyter Server из интернета невозможно без UI ML Space или SSH-соединения с Jupyter Server.

Как проверить стабильность GPU для выполнения задачи обучения?

Preflight check — проверка стабильности работы аппаратной части GPU. Такая проверка доступна в регионах Christofari (Christofari.V100) и Christofari Neo (Christofari.A100) для кастомных и базовых образов.

Передайте параметр preflight_check=true, обязательно указав регион параметром region=“V100” (Christofari.V100), для включения проверки в client_lib.Job.

При использовании preflight_check тарификация начнется с момента выполнения кода.

Примечание

На текущий момент нет возможности просмотреть результаты проверки.

  • Если проверка выполнена успешно — задача начнет выполняться.

  • Если проверка завершилась с ошибкой — задача перейдет в статус Ошибка. Ответ методов для проверки логов (Job) будет пустым.

Приблизительное время проверки — до пяти минут.

Что делать, если при запуске распределенного обучения возникает ошибка?

Для того чтобы проверить корректность работы скрипта и исправить ошибки в нем, запустите скрипт распределенно из Jupyter Server с несколькими GPU командой:

python -m torch.distributed.launch --nproc_per_node $GPUS_PER_NODE --nnodes 1 <myscript.py>

Что делать, если в логах задачи обучения возникает ошибка NCCL WARN?

Задача обучения отправляется в регион методом Job.submit(). В начале работы задачи строится топология коннектов NCCL. В логах можно просмотреть информацию о выполнении операции NCCL INFO. В этот момент NCCL проверяет, каким образом каждой из двух пар карт обмениваться данными между собой наиболее эффективно.

Если в ходе проверки возвращается строчка misc/ibvwrap.cc:252 NCCL WARN Call to ibv_reg_mr failed, это может означать, что синхронизация завершилась с ошибкой (неуспешно). Попробуйте перезапустить задачу обучения.

При запуске распределенной задачи обучения рекомендуем:

  1. Дождаться, пока синхронизация обработает несколько батчей.

  2. Обратить внимание на NCCL WARN в логах задачи. Задачу обучения на исполнение рекомендуется ставить после того, как закончится построения топологии коннектов NCCL.

По возможности используйте prefligh check, чтобы проверить стабильность аппаратной части GPU перед запуском задачи.

Если перезапуск не помог, обратитесь в техническую поддержку.

Что делать, если возникает ошибка «CUDA error: an illegal memory access was encountered»?

Возможные решения:

  • Запустить скрипт обучения с параметром CUDA_LAUNCH_BLOCKING=1 для получения трассировки ошибки.

  • Уменьшить batch size и убедиться, что никакие другие процессы (например, Jupyter) не занимают видеопамять.

  • Использовать образ с более новыми версиями CUDA и PyTorch (см. Образы для Jupyter Server).

  • Применить contiguous() к тензорам, из-за которых возникает ошибка.

Подробнее см. на GitHub.

Масштабная конференция
GoCloud 2024:
облачные грани будущего