Job

Функция Job позволяет работать с задачами обучения в регионах.

Список параметров

Обязательные параметры:

Опциональные параметры:

Описание параметров

Обязательные параметры

Параметр

Описание параметра

script

Тип — string

…

Путь до запускаемого скрипта. Обратите внимание, что точка монтирования — это корневой каталог, поэтому его не должно быть в начале пути. Если ваш скрипт лежит по пути /data/demo_examples/script.py, то необходимо указать /home/jovyan/data/demo_examples/script.py.

Примечание

Скрипт должен быть расположен на NFS региона, в котором будет запускаться задача обучения.

base_image

Тип — string

…

Базовый образ, в котором будет исполняться скрипт обучения модели. Образ должен быть из cr.ai.cloud.ru/aicloud-base-images или из проекта Docker Registry для текущего воркспейса. Подробнее про базовые образы.

Если указать несуществующий образ, задача не будет создана.

instance_type

Тип — string

…

Конфигурация вычислительных ресурсов, используемых для решения задач.

Для просмотра доступных instance_type воспользуйтесь методом.

Опциональные параметры

Параметр

Описание параметра

n_workers

Тип — integer

Значение по умолчанию — 1

…

Количество рабочих узлов региона, на котором будет исполняться скрипт. Параметр игнорируется задачами обучения на CPU и определяется для:

  • Christofari.A100

  • Christofari.V100

  • Cloud.Region.A100 (GPU Tesla A100)

  • Cloud.Region.HP1

Если в регионе Cloud.Region.A100 (GPU Tesla A100) указать «n_workers» больше единицы, вернется ошибка n_workers > 1 not allowed.

type

Тип — string

Значение по умолчанию — horovod

…

Тип задачи. Может быть фреймворком машинного обучения или бинарным исполняемым файлом.

Возможные значения:

  • 'binary' для исполнения бинарных файлов и shell-скриптов. Пример запуска.

  • 'pytorch' для использования встроенного механизма pytorch.distributed.

  • 'pytorch2' для использования встроенного механизма pytorch.distributed.

    Примечание

    Если запускаете задачу обучения с типом 'pytorch2' на instance_type='a100plus..', используйте образы cr.ai.cloud.ru/aicloud-base-images/cuda12.2-torch2-py310 и cr.ai.cloud.ru/aicloud-base-images/cuda12.2-torch2-py310.

    'pytorch' планируется отключить.

  • 'horovod' для использования библиотеки horovod.

  • 'pytorch_elastic' для запуска задачи с типом Pytorch Elastic Learning. При некорректных значениях параметров возможны ошибки:

    • если n_workers < 2 — возникает ошибка «elastic job needs n_workers >= 2».

    • если elastic_max_workers != n_workers — возникает ошибка «elastic_max_workers != n_workers is not implemented».

    • если elastic_min_workers > n_workers — возникает ошибка «elastic_min_workers must be <= n_workers».

    Подробнее в разделе Обучить модель с использованием PyTorch Elastic Learning.

    Примечание

    Этот тип задач недоступен для региона Cloud.Region.A100 (GPU Tesla A100).

  • 'spark' для запуска распределенных задач обучения с использованием Spark. Позволяет запускать задачи как на CPU, так и на GPU. Для запуска используйте образ «cr.ai.cloud.ru/aicloud-base-images/spark-3.2.1:0.0.32.1». Список библиотек в образах.

    Параметр region обязателен для типа распределенных вычислений 'spark'.

    Примечание

    Этот тип задач недоступен для регионов Cloud.Region.A100 (GPU Tesla A100), Cloud.Region.HP. Рекомендуемые регионы — Christofari.V100, Christofari.A100, Cloud.Region.HP1. Как узнать доступные конфигурации.

spark_executor_memory

Тип — float

…

Объем памяти в ГБ, которую использует каждый воркер Spark.

Значение параметра должно быть больше нуля, но меньше, чем

\(memory - 512 - 384\)
, где

  • memory — ограничение памяти для instance_type;

  • 512 MiB — объем памяти, необходимый для обслуживания контейнера;

  • 384 MiB — минимальное значение spark.executor.memoryOverhead.

Если не указано, значение по умолчанию вычисляется по формуле

\((memory - 512) \div (1 + 0,2)\)
, где 0,2 — это spark.executor.memoryOverheadFactor. При этом значение параметра spark.executor.memoryOverhead рассчитывается как
\(max(memory - 512 - spark\_executor\_memory, 384)\)
.

Если type не равен spark, параметр spark_executor_memory игнорируется.

pytorch_use_env (опц.)

Тип — boolean

Значение по умолчанию — False

…

Параметр pytorch_use_env дублирует флаг „use_env“ в torch.distributed.launch и нужен, если в скрипте «local_rank» передается через окружения, а не через «argparse».

flags (опц.)

Тип — dict

Значение по умолчанию — {}

…

Флаги, с которыми необходимо запустить скрипт (если таковые имеются в скрипте обучения модели).

Пример запуска.

Примечание

Значения возможно передавать с пробелами, обращая внимание на кавычки. Пример — "'some value'".

elastic_min_workers (опц.)

Тип — integer

Значение по умолчанию — 1

…

Параметр устанавливает минимальное количество воркеров для задач Pytorch Elastic Learning. Возможно передать значения больше 0 или строку default.

elastic_max_workers (опц.)

Тип — integer

Значение по умолчанию — n_workers

…

Параметр устанавливает максимальное количество воркеров для задач Pytorch Elastic Learning. Возможно передать значения больше 0 или строку default.

elastic_max_restarts (опц.)

Тип — integer

Значение по умолчанию — 5

…

Параметр устанавливает максимальное количество перезапусков задач Pytorch Elastic Learning.

stop_timer (опц.)

Тип — integer

Значение по умолчанию — 0 (задача не будет принудительно удалена)

…

Время в минутах до принудительного удаления задачи, которая перешла в статус «Выполняется». Подробнее о статусах задач.

env_variables (опц.)

Тип — dict

Значение по умолчанию — {}

…

Параметр задает переменные окружения.

Примечание

Значения возможно передавать с пробелами, обращая внимание на кавычки. Пример — "'some value'".

processes_per_worker (опц.)

Тип — integer

Значение по умолчанию — 'default'

…

Параметр задает количество процессов на один рабочий узел региона, если не подходит количество процессов, равное количеству GPU.

Можно запустить задачу на 16 GPU одного рабочего узла региона, указать processes_per_worker=1, не заботясь о механизме распараллеливания и не оборачивая весь исполняемый код, например, в hvd.init(). Вместо этого напишите код как на обычной исполняющей машине.

Пример запуска.

conda_env (опц.)

Тип — string

Значение по умолчанию — None

…

Параметр позволяет указывать название окружения conda, если в образе имеется таковое и используется не стандартное окружение python, а окружение anaconda.

job_desc (опц.)

Тип — string

Значение по умолчанию — None

…

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

Пример запуска.

region (опц.)

Тип — RegionMT | str

Значение по умолчанию — DGX2-MT

…

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

Доступны ключи регионов:

  • DGX2-MT — Christofari.V100

  • A100-MT — Christofari.A100

  • SR002-MT — Cloud.Region.A100 (GPU Tesla A100)

  • SR003 — Cloud.Region.HP1

  • SR006 — Cloud.Region.HP

Примечание

В регионе Cloud.Region.A100 (GPU Tesla A100) можно запускать только нераспределенные задачи обучения.

forbid_s3 (опц.)

Тип — boolean

Значение по умолчанию — False

…

В значении True позволяет запретить скрипту при выполнении получать доступ к S3. В значении False доступ к S3 разрешен.

Примечание

Параметр будет отключен с 04.07.2024. Вместо него используйте internet

forbid_internet (опц.)

Тип — boolean

Значение по умолчанию — False

…

В значении True позволяет запретить скрипту при выполнении получать доступ к интернету. В значении False доступ к интернету разрешен.

Примечание
  • Параметр доступен в регионах Christofari.V100, Cloud.Region.A100 (GPU Tesla A100), Cloud.Region.HP1.

  • Параметр будет отключен с 04.07.2024. Вместо него используйте internet

internet (опц.)

Тип — boolean

Значение по умолчанию до 04.07.2024 — None. Значение по умолчанию после 04.07.2024 — True.

…

  • Если параметр internet не указан, то forbid_internet и forbid_s3 примут значения согласно политике региона.

  • Если указан параметр internet = True, то forbid_internet и forbid_s3, вне зависимости от их значений, примут значение False, и интернет, S3 будут доступны.

  • Если указан параметр internet = False, то forbid_internet и forbid_s3, вне зависимости от их значений, примут значение True, и интернет, S3 не будут доступны.

Примечание
  • С 04.07.2024 параметры forbid_internet и forbid_s3 перестанут поддерживаться. Их необходимо исключить из конфигураций используемых для запуска задач. Параметр internet примет значение по умолчанию равное True во всех регионах.

  • Для задач, в которых доступ в интернет должен быть заблокирован, необходимо перейти на использование параметра internet = False.

max_retry (опц.)

Тип — integer

Значение по умолчанию — None

…

Максимальное количество попыток запуска задачи для случая, когда первая из этих попыток завершилась с ошибкой. При рестарте задача попадает в очередь на запуск в регионе.

Допустимые значения — от 3 до 100 включительно.

Используется, если type принимает одно из значений: pytorch, pytorch2, horovod, binary.

Параметр доступен только в аллокациях.

Примечание

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

Доступна переменная окружения MLSPACE_JOB_RETRY_COUNT — количество перезапусков задачи обучения. Переменную можно использовать в собственном скрипте, например, чтобы структурировать логи относительно текущего номера перезапуска задачи.

checkpoints_dir (опц.)

Тип — string

Значение по умолчанию — None

…

Путь к директории, в которую записываются чекпоинты обучения.

Пример значения параметра: /home/jovyan/my-checkpoints.

Использование параметра checkpoints_dir упрощает получение перерасчета, если в задаче обучения возникли технические ошибки со стороны ML Space.

Подробнее о чекпоинтах

health_params (опц.)

Тип — object | HealthParams

Набор параметров для мониторинга зависших задач. Примеры использования

Примечание

Кроме обязательного параметра log_period необходимо задать хотя бы один из параметров action, sub_actions.

  • log_period (обяз.)

    Тип — integer

    Значение по умолчанию — 720.

    Максимальный интервал в минутах, в течение которого в логах задачи не появляются новые записи.

    Допустимые значения — от 20 до 720 включительно.

  • action (опц.)

    Тип — str | JobHealthAction

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

    Допустимые значения:

    • delete — остановка задачи;

    • restart — перезапуск задачи. При зависании запускается новая задача с теми же параметрами запуска, что и у зависшей родительской.

  • sub_actions (опц.)

    Тип — list[str | JobHealthSubAction]

    Действия, которые не повлияют на задачу напрямую, но будут полезны пользователю, например, для получения дополнительной информации и диагностики проблем.

    Допустимые значения:

    • notify — отправить пользователю уведомление с информацией по зависшей задаче.

Примеры команд

Пример добавления job_desc к задаче
client_lib . Job ( base_image = 'cr.ai.cloud.ru/aicloud-base-images/py3.10-torch2.2.2:0.0.40' ,
script = '/home/jovyan/quick-start/job_launch/scripts/horovod/tensorflow_mnist_estimator.py' ,
instance_type = 'a100.1gpu.80vG.12C.96G' ,
job_desc = 'your_job_description' )
Пример запуска задачи с типом binary
job = client_lib . Job ( base_image = 'cr.ai.cloud.ru/aicloud-base-images/py3.10-torch2.2.2:0.0.40' ,
script = 'ls' ,
n_workers = 1 , instance_type = 'a100.1gpu.80vG.12C.96G' , type = 'binary' , region = 'SR002-MT' )
job . submit ()

При запуске задач с типом binary для переменной script можно использовать bash-скрипты.

Пример использования параметра processes_per_worker
client_lib . Job ( base_image = 'cr.ai.cloud.ru/aicloud-base-images/py3.10-torch2.2.2:0.0.40' ,
script = '/home/jovyan/quick-start/job_launch/scripts/horovod/tensorflow_mnist_estimator.py' ,
instance_type = 'a100.1gpu.80vG.12C.96G' ,
n_workers = 1 ,
processes_per_worker = 1 )
Пример задания параметра flags
flags = {
'batch_size' : 512 ,
'model' : 'mymodel50' ,
'xla' : False
}

Скрипт будет запущен с параметрами <your_script> --batch_size=512 --model='mymodel50' --xla=False.

Примеры использования JobHealthParams
from client_lib import *
# Example 1
Job (
base_image = 'cr.ai.cloud.ru/aicloud-base-images/py3.10-torch2.2.2:0.0.40' ,
script = '/home/jovyan/quick-start/job_launch/scripts/horovod/tensorflow_mnist_estimator.py' ,
instance_type = 'v100.1gpu' ,
# If there were no updates in the job log for 20 minutes,
# the user will receive a notification, the job will be deleted
health_params = JobHealthParams ( log_period = 20 , action = JobHealthAction . delete , sub_actions = [ JobHealthSubAction . notify ]),
)
# Example 2
Job (
base_image = 'cr.ai.cloud.ru/aicloud-base-images/py3.10-torch2.2.2:0.0.40' ,
script = '/home/jovyan/quick-start/job_launch/scripts/horovod/tensorflow_mnist_estimator.py' ,
instance_type = 'v100.1gpu' ,
max_retry = 3 ,
# If there were no updates in the job log for 120 minutes,
# the user will receive a notification, the job will be restarted
health_params = JobHealthParams ( log_period = 120 , action = 'restart' , sub_actions = [ 'notify' ]),
)
# Example 3
Job (
base_image = 'cr.ai.cloud.ru/aicloud-base-images/py3.10-torch2.2.2:0.0.40' ,
script = '/home/jovyan/quick-start/job_launch/scripts/horovod/tensorflow_mnist_estimator.py' ,
instance_type = 'v100.1gpu' ,
# If there were no updates in the job log for 180 minutes,
# the user will receive a notification
health_params = JobHealthParams ( log_period = 180 , sub_actions = [ JobHealthSubAction . notify ]),
)
# Example 4
Job (
base_image = 'cr.ai.cloud.ru/aicloud-base-images/py3.10-torch2.2.2:0.0.40' ,
script = '/home/jovyan/quick-start/job_launch/scripts/horovod/tensorflow_mnist_estimator.py' ,
instance_type = 'v100.1gpu' ,
max_retry = 3 ,
# If there were no updates in the job log for 60 minutes,
# the job will be restarted without notification
health_params = JobHealthParams ( log_period = 60 , action = JobHealthAction . restart ),
)

Команды

submit()

Команда submit() отправляет сформированную задачу на вычисление в регион, после чего задача ставится в очередь на выполнение.

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

Пример использования submit()
job = client_lib . Job ( base_image = 'cr.ai.cloud.ru/aicloud-base-images/py3.10-torch2.2.2:0.0.40' ,
script = 'ls' ,
n_workers = 1 , instance_type = 'a100.1gpu.80vG.12C.96G' , type = 'binary' , region = 'SR002-MT' )
job . submit ()

status()

Команда status() возвращает статус по последней задаче обучения.

Пример использования status()
job = client_lib . Job ( base_image = 'cr.ai.cloud.ru/aicloud-base-images/py3.10-torch2.2.2:0.0.40' ,
script = 'ls' ,
n_workers = 1 , instance_type = 'a100.1gpu.80vG.12C.96G' , type = 'binary' , region = 'SR002-MT' )
job . submit ()
job . status ()
Статусы задач обучения

Статус

Описание

«Pending»

Задача находится в ожидании ресурсов.

«Inqueue»

Задача находится в очереди на запуск.

«Starting»

Ресурсы аллоцированы, происходит скачивание образов и запуск воркеров.

«Running»

Задача обучения выполняется.

«Completed»

Задача обучения завершилась.

«Completing»

Задача обучения завершается.

«Failed»

Задача обучения завершилась с ошибкой, рекомендуется проверить логи задачи.

«Deleted» или «Terminated»

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

«Stopped» или «Aborted»

Задача обучения остановлена.

«Terminating»

Задача обучения останавливается. Освобождаются ресурсы, задача и поды удаляются.

«Aborting»

Задача обучения останавливается. Освобождаются ресурсы, удаляются только поды.

kill()

Команда client_lib.Job(...).kill() удаляет последнюю задачу:

Пример использования client_lib.Job().kill()
job = client_lib . Job ( base_image = 'cr.ai.cloud.ru/aicloud-base-images/py3.10-torch2.2.2:0.0.40' ,
script = 'ls' ,
n_workers = 1 , instance_type = 'a100.1gpu.80vG.12C.96G' , type = 'binary' , region = 'SR002-MT' )
job . submit ()
job . status ()
job . kill ()

Команда client_lib.kill(job_name, region) удаляет задачу по номеру и ключу региона, где задача выполняется:

Пример использования client_lib.kill()
client_lib . kill ( 'lm-mpi-job-abbb512e-e2c4-4d57-bb72-4c029b82cf02' , region = 'SR002-MT' )

logs()

Команда client_lib.Job.logs() возвращает логи задачи обучения.

Пример использования logs(tail, verbose)
job = client_lib . Job ( base_image = 'cr.ai.cloud.ru/aicloud-base-images/py3.10-torch2.2.2:0.0.40' ,
script = 'ls' ,
n_workers = 1 , instance_type = 'a100.1gpu.80vG.12C.96G' , type = 'binary' , region = 'SR002-MT' )
job . submit ()
job . status ()
job . logs ()

Команда client_lib.logs(job_name, region, tail, verbose) возвращает логи задачи обучения по ее имени.

Пример использования logs(job_name, tail, verbose)
client_lib . logs ( 'lm-mpi-job-abbb512e-e2c4-4d57-bb72-4c029b82cf02' , region = 'SR002-MT' , tail = 1 , verbose = False )
Параметры

Параметр

Описание параметра

job_name

Тип — string

…

Название задачи. Обязательный параметр для logs(job_name, tail, verbose)

tail (опц.)

Тип — integer

Значение по умолчанию — None

…

Параметр определяет количество выводимых строк из лога, начиная с конца.

verbose (опц.)

Тип — boolean

Значение по умолчанию — False

…

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

region (опц.)

Тип — String

Значение по умолчанию — DGX2-MT

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

Для параметра доступны следующие значения:

  • Christofari.V100 = «DGX2-MT»

  • Christofari.A100 = «A100-MT»

  • Cloud.Region.A100 (GPU Tesla A100) = «SR002-MT»

  • Cloud.Region.HP1 = «SR003»

  • Cloud.Region.HP = «SR006»

ML Space