Вопросы и ответы про задачи обучения

Вопросы в этом разделе

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

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

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

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

Важно

Не рекомендуется менять версию базовых пакетов — horovod, tensorflow, apex, mxnet, tensorboard, kfserving, pytorch.

Решение:

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

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

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

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

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

Важно

Не рекомендуется менять версию базовых пакетов — horovod, tensorflow, apex, mxnet, tensorboard, kfserving, 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 позволяет распределенно обучать модели на 1000+ GPU на базе суперкомпьютера Christofari. Количество GPU и количество рабочих узлов кластера задаются с помощью специальных параметров n_ gpus и n_ workers, соответственно. Следует помнить о том, что чем больше GPU требуется для обучения модели, тем выше вероятность возникновения нехватки вычислительных ресурсов. Особенности запуска таких задач см. в разделе Обучение моделей на большом количестве GPU.

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

Можно, в рамках DGX также доступны CPU. Для обучения на CPU необходимо запустить обучение на GPU, 1 GPU позволяет использовать 3 CPU (менее трех аллоцировать нельзя).

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

Скорее всего, для выполнения задачи сейчас нет ресурсов на кластере. Рекомендуется указывать n_gpus не более восьми и увеличить общее количество GPU за счет параметра n_workers. Количество GPU, выделенных под задачу, равно n_workers * n_gpus.

Например, задачу на 64 GPU можно разбить следующим образом:

  • n_workers = 4, n_gpus = 16

  • n_workers = 8, n_gpus = 8

  • n_workers = 16, n_gpus = 4

  • n_workers = 32, n_gpus = 2

  • n_workers = 64, n_gpus = 1

n_gpus может принимать значения от 1 до 16. При использовании значений выходящих за пределы диапазона задача не запустится. Один воркер можно развернуть только на одном DGX.

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

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

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

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

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

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

free -h

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

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

git clone <your_repo_url>

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

Важно

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

sudo apt-get install llvm-9-dev

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

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

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

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

Из запущенного Docker-контейнера нет доступа в интернет. Все данные, требуемые для обучения, нужно загружать на этапе сборки образа.

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

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

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

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

Примечание

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

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

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

Ожидаемое время проверки — менее пяти минут.

Что делать, если в логах задачи обучения возникает ошибка 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 перед запуском задачи.

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