Вопросы и ответы про Environments

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

Как оценить стоимость обучения модели?

Это сильно зависит от конкретной модели и данных, а также от количества задействованных DGX, заранее предсказать невозможно, можно сделать тестовый замер следующим образом: запустить модель на обучение на небольшой промежуток времени (например, на 3 минуты) и посмотреть по логам, за сколько посчитается одна эпоха. Потом умножить на количество эпох, это будет примерная стоимость.

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

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

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

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

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

Не могу создать Jupyter Server с GPU. В чем может быть причина?

Такая ситуация может возникать в следующих случаях:

  • Закончился баланс.

  • Не выставлен лимит на Департамент.

При нулевом балансе пользователь не сможет создать Jupyter Server с выделенными GPU, запустить обучение путем отправки задач на кластер, собирать образы с моделями для последующего их развертывания на сервисе Deployments и выполнить некоторые другие действия. Актуальный баланс можно посмотреть в профиле пользователя. См. Профиль.

Лимиты на департамент можно задавать в личном кабинете пользователя. Подробнее см. в Документации.

Как запустить ячейку Jupyter Server во время сборки образа и завершить ее после сборки?

Если возникает потребность выполнения ячейки после сборки образа, добавьте код:

def wait_image_build_job(job):
    response = job.submit()
    if "created" not in response:
        return response
    job.logs()
    return "Done"


job = ImageBuildJob(...........)
wait_for_image_build_job(job)

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

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

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

Можно узнать статус выполнения задачи или вывести ее логи, используя стандартные средства библиотеки 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 не более 8 и увеличить общее количество 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 не может быть больше 16, иначе задача никогда не запустится. 1 воркер можно развернуть только на 1 DGX.

Почему у меня не разворачивается Jupyter Server c GPU?

Проблема может возникать, если под Jupyter Server нет свободных ресурсов на одном DGX (выделение ресурсов на нескольких DGX невозможно). Рекомендуется создавать Jupyter Server с количеством выделенных GPU не более 8. Обучение, которое требует большее количество ресурсов, лучше запускать как задачу на кластере методом client_lib.Job().

Есть ли способ обойти проблему конфликта версий библиотек Jupyter Server?

На практике бывают случаи, когда для тестирования разных подходов к решению одной задачи нужны разные версии библиотек, которые конфликтуют между собой. Эту проблему можно обойти. При использовании команды pip install дополнительные питоновские модули по умолчанию устанавливаются в директорию /home/jovyan/.local. Если стоит задача использовать разные окружения в разные моменты времени, можно выполнить следующую последовательность действий:

  1. Запустите Jupyter Notebook и сформируйте первое требуемое окружение через pip install, затем переименуйте .local в .local1.

  2. Запустите Jupyter Notebook и сформируйте второе требуемое окружение через pip install, затем переименуйте .local в .local2.

  3. Переименуйте в .local папку, соответствующую требуемому в данный момент окружению.

Что делать, чтобы столбец ipynb_checkpoints не появлялся в метриках?

Использовать файлы MLFlow средствами MLFlow и файлов Jupyter Lab/Notebook средствами Jupyter Lab/Notebook. Это позволит избежать непредвиденных артефактов в виде .ipynb_checkpoints столбца в разделе Metrics.

Папка mlflow — машиночитаемая (предусмотрено читать через api mlflow), при необходимости открывать файлы можно по ssh через cyberduck/терминал.

ipynb_checkpoints папки появляются не везде, а только в той директории, где находится запущенный ноутбук. Поэтому наиболее простым решением проблемы с MLFlow было бы отделить одно от другого и явно определять директорию, в которой будет находиться вся информация, имеющая отношение к MLFlow-эксперименту.

Делается это следующим образом: mlflow.set_tracking_uri('file:/home/jovyan/mlruns')

Подробнее об этой команде можно прочитать здесь

Проверить текущую директорию можно командой mlflow.get_tracking_uri().

Подробнее можно прочитать здесь.

Как запустить задачу на Christofari NEO?

Для запуска задачи на Christofari NEO нужно:

  • Использовать для обучения образ с версией Cuda не ниже 11.

  • Обратить внимание на то, что у каждого региона свое независимое хранилище.

  • При запуске задач обучения через client_lib в параметре region нужно указывать конкретный регион. Код модели возможно потребует изменений.

Быстрый старт для запуска задач на Christofari NEO приведен на GitHub ML Space.

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

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

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

Для этого откройте терминал в 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.

Какие конфигурации будут доступны для работы со Spark?

Список доступных конфигураций можно посмотреть при создании окружения с типом «Spark» в выпадающих списках «Ресурсы Driver» и «Ресурсы Executor».

Как запустить обработку данных на Spark?

В меню выбрать Environments → Окружения → Jupyter Server → Создать Jupyter Server и указать Тип Jupyter Server = «Spark(CPU)»

Как устроено масштабирование для узлов со Spark?

В текущей реализации сразу разворачивается столько воркеров, сколько указано при создании Jupyter Server. Это максимальное количество Executor, при динамическом масштабировании.

Как устроена тарификация Spark?

Jupyter со Spark с CPU (окружение)
Вычислительные ресурсы
Jupyter со Spark с CPU (окружение) состоит из двух частей
  • Ресурсы Driver (cpu-ai-small (4 vCPU, 16 GB));

  • ресурсы Executor (cpu-ai-middle (8 vCPU, 32 GB)), количество Executor — 2.

Время выполнения операций

11 минут 25 секунд (округляется до целого числа минут в большую сторону)

Расчет стоимости (в рублях с учетом НДС):

\((0,14+0,29 \times 2) \times 12=8,64\)

Где:

  • 0,14 — стоимость CPU-минуты с учетом НДС (по тарифу AI-MLSPENVCPUENLSN-TS1MS0).

  • 0,24 — стоимость CPU-минуты с учетом НДС (по тарифу AI-MLSPENVCPUENLMN-TS1MS0).

  • 2 — количество Executor.

  • 12 — количество минут, которые проработала задача.

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

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