- Начало работы с ML Space
- Инструкции
- Обучение моделей
- Примеры препроцессинга данных
- Установить библиотеки из Git-репозитория
- Запустить процесс обучения
- Обучить модель с использованием PyTorch Elastic Learning
- Обучить модель с использованием библиотеки Horovod
- Сохранить промежуточные результаты обучения (чекпоинты)
- Собрать и использовать кастомный Docker-образ для задачи обучения на основе базового образа платформы
- Собрать и использовать кастомный Docker-образ для задачи обучения на основе внешнего образа
- Использовать GitLab CI при работе с Environments
- Тарификация
- Термины и сокращения
- Обратиться в поддержку
Собрать и использовать кастомный Docker-образ для задачи обучения на основе внешнего образа
В инструкции описано, как на базе любого публичного образа создать Docker-образ, который можно запустить на платформе ML Space.
Сборка выполняется вне платформы самостоятельно пользователем. Суть сборки — модификация Docker-файла, который содержит команды сборки образа.
Для использования подготовленного образа на платформе ML Space необходимо добавить образу префикс имени контейнера «job-», например «job-mytrain:py310-torch25-fa2».
Перед началом работы
Убедитесь, что у вас установлен Docker Desktop.
Ознакомьтесь с форматом Dockerfile.
Dockerfile имеет следующий вид:
FROM < image >USER root....USER user....SHELL ...В каждой из его секций описаны определенные действия:
Секция FROM <image> — наследование базового образа. Например, может быть введена переменная, которая позволит на этапе сборки динамически управлять образом.
Секция USER root— глобальные действия для контейнера от имени суперпользователя root. Например, установка пакетов через пакетный менеджер, добавление пользователей, смена прав доступа.
Секция USER user — действия от имени обычного пользователя платформы ML Space. Здесь размещают действия по установке дополнительных пакетов через conda- или pip-установщики, а также сборку различных библиотек в wheel-формате Python.
Секция SHELL ... — активация shell для работы.
В этой инструкции рассмотрена настройка параметров из первых трех секций для модификации образа.
ПримечаниеПри установке переменных окружения через действие ENV область видимости будет ограничиваться секцией, где эти переменные установлены. Поэтому если выставить переменные в секции USER root, то они не будут видны пользователю. Рекомендуется выставлять переменные через файл загрузки профиля в /etc/profile.d/you_env_vars.sh и дублировать для обоих пользователей root и user.
Шаг 1. Соберите кастомный Docker-образ
Чтобы ускорить процесс сборки и добавления новых пакетов, перед началом работ скачайте нужный образ в папку на локальном устройстве, где будете собирать обоаз.
Если у вас уже есть подготовленный Dockerfile с набором устанавливаемых или собираемых пакетов, рекомендуется пересмотреть его, чтобы не возник конфликт прав доступа. Возможно, он был собран от имени суперпользователя root, в то время как работа в ML Space осуществляется только от имени обычного пользователя user.
Сборка образа условно разделяется на несколько этапов.
Секция FROM <image>
Укажите путь с нужным тегом до образа, который будет наследоваться для модификации.
FROM < путь до образа >
Например, если за основу берется образ Ubuntu 22.04, указываем:
ARG UBUNTU_VER 22.04FROM ubuntu:${UBUNTU_VER}
Секция USER root
В этой секции выполняются команды, которые требуют прав привилегированного пользователя (root).
USER root
Создайте пользователя user с заранее определенными атрибутами:
UID: 1000
GID: 1000
HOME: /home/user
USERNAME: user
NFS DIR: /home/jovyan
Установите права пользователя на общую файловую систему, которая размещается в /home/jovyan. Домашняя директория пользователя user /home/user располагается не в общем хранилище, а внутри образа.
RUN useradd - u 1000 - m user -- shell / bin / bash \&& mkdir - p / home / user \&& chown user : user / home / user \&& mkdir - p / home / jovyan \&& chown user : user / home / jovyanУстановите сервер OpenSSH, Python (при необходимости) и пакеты curl, wget и bzip2. Можно добавить дополнительные пакеты для образа, которые устанавливаем с помощью пакетного менеджера.
RUN apt - get update \&& apt - get install - y -- no - install - recommends \openssh - server openssh - client \ # Устанавливаем OpenSSH для MPI что бы соединятся между контейнерамиcurl wget bzip2 \ # Эти пакеты потребуются при сборке образа&& rm - rf / var / lib / apt / lists /*Сгенерируйте SSH-ключи:
# Generating keys for SSHRUN mkdir - p / var / run / sshd \&& ssh - keygen - A
Настройте OpenSSH:
Измените конфигурацию SSH, чтобы отключить проверку ключей хоста (StrictHostKeyChecking no).
Отключите PAM в конфигурации SSH (UsePAM no).
Установите PubkeyAcceptedAlgorithms для использования алгоритма ssh-rsa.
Установите порт SSH на 2222.
Установите права доступа 600 для всех файлов в /etc/ssh/.
Установите пользователя user и группу user в качестве владельцев файлов /etc/ssh/ssh_host_* и каталога /run/sshd.`
RUN echo "StrictHostKeyChecking no" >> / etc / ssh / ssh_config . d / mlspace . conf \&& echo "UsePAM no" > / etc / ssh / sshd_config . d / mlspace . conf \&& echo "PubkeyAcceptedAlgorithms +ssh-rsa" >> / etc / ssh / sshd_config . d / mlspace . conf \&& echo "Port 2222" >> / etc / ssh / sshd_config . d / mlspace . conf \&& echo "PidFile /run/sshd/sshd.pid" >> / etc / ssh / sshd_config . d / mlspace . conf \&& chmod 600 / etc / ssh /* \&& chown user : user / etc / ssh / ssh_host_ * \&& chown user : user / run / sshd(Опционально) Установите OpenMPI.
В базовом наследуемом образе, например из NVIDIA NG, OpenMPI может быть уже установлен или добавлен из репозиториев дистрибутива и привязан к приложению.
ПримечаниеВаше приложение может использовать MPI как средство коммуникации, тогда оно будет зависеть от наличия и версии пакета. В ML Space OpenMPI используется только для запуска распределенных задач с последующим контролем из состояния.
Распакуйте его в директорию /opt/hpcx. Для примера используется версия 2.18.1 для Ubuntu 22.04.
ARG HPCX_VER 2.18.1ARG UBUNTU_VER 22.04ARG HPCX_DIR /opt/hpcxARG HPCX_PACKAGE hpcx-v${HPCX_VER}-gcc-mlnx_ofed-ubuntu${UBUNTU_VER}-cuda12-x86_64.tbzRUN mkdir - ${HPCX_DIR} \&& wget --quiet --no-check-certificate -c https://content.mellanox.com/hpc/hpc-x/v${HPCX_VER}/${HPCX_PACKAGE} -O /tmp/${HPCX_PACKAGE} \&& tar xjf /tmp/${HPCX_PACKAGE} -C ${HPCX_DIR} --strip-components=1
(Опционально) Если в образе не установлен Python, установите miniconda в директорию /home/user/conda и обновите переменную PATH, чтобы были доступны Python и связанные инструменты из miniconda.
# Установка PythonARG CONDA_DIR=/home/user/condaARG DOWNLOAD_LINK="https://repo.anaconda.com/miniconda/Miniconda3-py311_24.11.1-0-Linux-x86_64.sh"RUN mkdir -p ${CONDA_DIR} \&& wget --quiet --no-check-certificate ${DOWNLOAD_LINK} -O miniconda.sh \&& chmod +x miniconda.sh \&& /bin/bash miniconda.sh -f -b -p ${CONDA_DIR} \&& rm miniconda.sh \ENV PATH="$CONDA_DIR/bin:$PATH"Установите дополнительные пакеты:
RUN apt - get install package - nameОчистите образ и пакетный менеджер от кеша:
RUN apt - get clean \&& rm - rf / var / lib / apt / lists /* \Выставите переменные окружения, которые необходимы для корректной работы. Ниже приведены переменные окружения для корректной работы HPC-X из шага 5 по настройке OpenSSH:
ENV LD_LIBRARY_PATH=/opt/hpcx/ompi/lib:/opt/hpcx/ucx/lib:/opt/hpcx/ucc/lib:/opt/hpcx/sharp/lib:/opt/hpcx/nccl_rdma_sharp_plugin/lib:/opt/hpcx/hcoll/lib:${LD_LIBRARY_PATH}ENV PATH=/opt/hpcx/ompi/bin:/opt/hpcx/ucx/bin:/opt/hpcx/ucc/bin:/opt/hpcx/sharp/bin:/opt/hpcx/hcoll/bin:${PATH}ENV OPAL_PREFIX=/opt/hpcx/ompiДля корректного сохранения переменных окружения создайте файл профиля в /etc/profile.d/mlspace.sh, который будет содержать необходимые переменные окружения, активирующиеся при работе в образе:
RUN echo "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH" >/ etc / profile . d / mlspace . sh \&& echo "export PATH=$PATH" >> / etc / profile . d / mlspace . sh \&& echo "export OPAL_PREFIX=$OPAL_PREFIX" >> / etc / profile . d / mlspace . sh
Секция USER user
В этой секции выполняются команды, которые не требуют прав суперпользователя.
USER user
(Опционально) Установите пакеты Python и зависимости одним из способов.
Используя репозиторий пакетов pypi:
RUN pip install -- no - cache < package >Используя бинарные пакеты wheel-формата:
RUN pip install -- no - cache < package >. whlОсуществляя сборку пакета:
RUN python setup . py install / bdist_wheel /...
Повторно установите переменные окружения, чтобы все действия, выполненные при запуске задачи от имени непривилегированного пользователя, стали доступны этому пользователю.
ENV LD_LIBRARY_PATH=/opt/hpcx/ompi/lib:/opt/hpcx/ucx/lib:/opt/hpcx/ucc/lib:/opt/hpcx/sharp/lib:/opt/hpcx/nccl_rdma_sharp_plugin/lib:/opt/hpcx/hcoll/lib:${LD_LIBRARY_PATH}ENV PATH=/opt/hpcx/ompi/bin:/opt/hpcx/ucx/bin:/opt/hpcx/ucc/bin:/opt/hpcx/sharp/bin:/opt/hpcx/hcoll/bin:${PATH}ENV OPAL_PREFIX=/opt/hpcx/ompi
Секция shell
В этой секции добавляются финальные действия для образа, такие как WORKDIR, ENTRYPOINT, CMD, SHELL.
ML Space не использует команды, установленные в образе для старта, и игнорирует все, кроме WORKDIR. Ее рекомендуется оставить:
SHELL [ "/bin/bash" , "-cu" ]
Полный код Dockerfile
Собрав все рекомендации выше воедино, вы получите файл со следующим содержанием. Опциональные части и условия их опциональности обозначены комментарием.
Сборка образа
Перейдите в Data Catalog → Artifact Registry → Docker registry.
Нажмите Push command и скопируйте появившуюся команду.
Скопируйте имя хоста и неймспейс.
Убедитесь, что для использования в задачах обучения название репозитория начинается с префикса «job-«.
Выполните команду сборки образа в директории с вашим Dockerfile:
docker build - t cr . ai . cloud . ru / хххххххх - хххх - хххх - хххх - хххххххххххх / job - custom - image .
Шаг 2. Проверьте корректность сборки
Чтобы проверить работоспособность образа при запуске распределенной задачи:
Запустите образ локально через используемую вами систему (docker, containerd, cri-o). Вы попадете в образ.
Убедитесь, что вы работаете от имени пользователя user c UID=GID=1000:
$ iduid=1000(user) gid=1000(user) groups=1000(user) <-- user and groups "user" with ID 1000Убедитесь, что папка /home/user и /home/jovyan существует и обладает нужными правами:
$ ls -la /hometotal 28drwxr-xr-x 1 root root 4096 Nov 18 19:56 .drwxr-xr-x 1 root root 4096 Nov 26 01:29 ..drwxr-xr-x 1 user user 4096 Nov 27 11:51 jovyan <-- user and group "user"drwxr-xr-x 1 user user 4096 Nov 26 01:31 user <-- user and group "user"Убедитесь, что у вас установлен OpenMPI:
$ which mpirun/opt/hpcx/ompi/bin/mpirun <-- for an installed HPC-X, there will be a different path for another OpenMPI$ hostnameasdh123asdh <-- Current container name$ mpirun -np 1 hostnameasdh123asdh <-- Current container nameУбедитесь, что запуск OpenSSH не возвращает ошибку:
$ /usr/sbin/sshd -p 2222$ ps ax | grep sshd1437421 ? Ss 0:00 sshd: /usr/sbin/sshd -p 2222 [listener] 0 of 10-100 startups <-- the process is runningЗапустите образ локально, выполнив команду:
docker run - it cr . ai . cloud . ru / хххххххх - хххх - хххх - хххх - хххххххххххх / job - custom - image
Шаг 3. Пройдите аутентификацию в Docker registry
Сгенерируйте ключ для Docker CLI:
В левом меню платформы перейдите в ML Space → Воркспейсы.
Возле воркспейса, для которого нужно сгенерировать ключ, нажмите
и выберите Параметры разработчика.
Возле Docker CLI Key нажмите Сгенерировать ключ.
После генерации скопируйте ключ.
Аутентифицируйтесь в Docker registry.
Откройте терминал на вашем компьютере и аутентифицируйтесь в Docker CLI, используя команду:
docker login cr.ai.cloud.ru --username example@example.com --password examplepsswdГде параметр example@example.com — это email пользователя, а examplepsswd — ключ, однократно передаваемый пользователю при нажатии на Сгенерировать ключ для Docker CLI.
Шаг 4. Загрузите образ в Docker registry
Команду для использования тега можно просмотреть, нажав Push command в Docker registry.
docker push cr.ai.cloud.ru/хххххххх-хххх-хххх-хххх-хххххххххххх/job-custom-image:test_tag
Эта команда позволяет загрузить образ job-custom-image с тегом test_tag в Docker registry требуемого воркспейса.
Что дальше
Создайте и запустите задачу обучения, выбрав предпочитаемый способ.
- Перед началом работы
- Шаг 1. Соберите кастомный Docker-образ
- Шаг 2. Проверьте корректность сборки
- Шаг 3. Пройдите аутентификацию в Docker registry
- Шаг 4. Загрузите образ в Docker registry
- Что дальше