Настройка и отправка заданий на выполнение обучения

ОБЛАСТЬ ПРИМЕНЕНИЯ:Пакет SDK для Python для ML Azure версии 1

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

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

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

Необходимые компоненты

Что такое конфигурация запуска сценария

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

Вы отправляете обучающий эксперимент с помощью объекта ScriptRunConfig. Этот объект включает в себя следующее.

  • source_directory: исходный каталог, содержащий скрипт обучения
  • script: обучающий сценарий для запуска;
  • compute_target: целевой объект вычислений, в котором выполняется запуск;
  • environment: среда, используемая при запуске сценария;
  • некоторые дополнительные настраиваемые параметры (дополнительные сведения см. в справочной документации).

Обучение модели

Шаблон кода для отправки задания на выполнение обучения одинаковый для всех типов целевых объектов вычислений.

  1. Создание эксперимента для запуска
  2. Создание среды, в которой выполняется скрипт
  3. Создайте ScriptRunConfig, который задает целевой объект вычислений и среду.
  4. отправить задание.
  5. Ожидание завершения задания

Также вы можете:

Создание эксперимента

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

ОБЛАСТЬ ПРИМЕНЕНИЯ:Пакет SDK для Python для ML Azure версии 1

from azureml.core import Experiment

experiment_name = 'my_experiment'
experiment = Experiment(workspace=ws, name=experiment_name)

Выбор целевого объекта вычислений

Выберите целевой объект вычислений, где будет выполняться сценарий обучения. Если целевой объект вычислений не указан в ScriptRunConfig или если compute_target='local'Машинное обучение Azure будет выполнять скрипт локально.

В примере кода в этой статье предполагается, что вы уже создали целевой объект вычислений my_compute_target в разделе "Предварительные требования".

Примечание.

  • Azure Databricks не поддерживается в качестве целевого объекта вычислений для обучения модели. Вы можете использовать Azure Databricks для подготовки данных и задач развертывания.
  • Сведения о создании и присоединении целевого объекта вычислений для обучения в кластере Kubernetes с поддержкой Azure Arc см. в статье Настройка Машинного обучения с поддержкой Azure Arc.

Создать среду

Среды Машинного обучения Azure представляют собой инкапсуляцию среды, в которой происходит машинное обучение. Они определяют пакеты Python, образ Docker, переменные среды и параметры программного обеспечения, связанные с вашими сценариями обучения и оценок. Они также указывают среды выполнения (Python, Spark или Docker).

Вы можете определить собственную среду или использовать Машинное обучение Azure курированную среду. Курированные среды — это предопределенные среды, доступные в рабочей области по умолчанию. Эти среды поддерживают кэшированные образы Docker, что снижает затраты на подготовку заданий. Полный список доступных курированных сред см. в разделе Курированные среды Машинного обучения Azure.

Для удаленного целевого объекта вычислений можно использовать одну из следующих распространенных курированных сред:

ОБЛАСТЬ ПРИМЕНЕНИЯ:Пакет SDK для Python для ML Azure версии 1

from azureml.core import Workspace, Environment

ws = Workspace.from_config()
myenv = Environment.get(workspace=ws, name="AzureML-Minimal")

Дополнительные сведения о средах см. в разделе Создание и использование программных сред в Машинном обучении Azure.

Локальный целевой объект вычислений

Если целевой объект вычислений является локальным компьютером, вы несете ответственность за обеспечение доступности всех необходимых пакетов в среде Python, в которой выполняется скрипт. Задайте параметр python.user_managed_dependencies, чтобы использовать текущую среду Python (или Python по указанному пути).

ОБЛАСТЬ ПРИМЕНЕНИЯ:Пакет SDK для Python для ML Azure версии 1

from azureml.core import Environment

myenv = Environment("user-managed-env")
myenv.python.user_managed_dependencies = True

# You can choose a specific Python environment by pointing to a Python path 
# myenv.python.interpreter_path = '/home/johndoe/miniconda3/envs/myenv/bin/python'

Создание конфигурации задания для скрипта

Теперь, когда у вас есть целевой объект вычислений (my_compute_targetсм . предварительные требования и среда (myenvсм. статью "Создание среды"), создайте конфигурацию задания скрипта, которая запускает скрипт обучения (train.py) в каталоге project_folder :

ОБЛАСТЬ ПРИМЕНЕНИЯ:Пакет SDK для Python для ML Azure версии 1

from azureml.core import ScriptRunConfig

src = ScriptRunConfig(source_directory=project_folder,
                      script='train.py',
                      compute_target=my_compute_target,
                      environment=myenv)

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

Если у вас есть аргументы командной строки, которые вы хотите передать в скрипт обучения, их можно указать с помощью arguments параметра конструктора ScriptRunConfig, например arguments=['--arg1', arg1_val, '--arg2', arg2_val].

Чтобы переопределить максимально допустимое время выполнения задания по умолчанию, используйте параметр max_run_duration_seconds. Система пытается автоматически отменить задание, если оно занимает больше времени, чем это значение.

Указание конфигурации распределенного задания

Если вы хотите запускать задание распределенного обучения, задайте конфигурацию распределенного задания с помощью параметра distributed_job_config. Поддерживаются следующие типы конфигурации: MpiConfiguration, TensorflowConfiguration и PyTorchConfiguration.

Дополнительные сведения и примеры выполнения распределенных заданий Horovod, TensorFlow и PyTorch см. в следующих примерах:

Отправка эксперимента

ОБЛАСТЬ ПРИМЕНЕНИЯ:Пакет SDK для Python для ML Azure версии 1

run = experiment.submit(config=src)
run.wait_for_completion(show_output=True)

Внимание

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

Чтобы предотвратить включение ненужных файлов в моментальный снимок, создайте файл игнорирования (.gitignore или .amlignore) в каталоге. Добавьте исключаемые файлы и каталоги в этот файл. Дополнительные сведения о синтаксисе, который будет использоваться в этом файле, см. в разделе синтаксис и шаблоны для .gitignore. Файл .amlignore использует тот же синтаксис. Если оба файла существуют, используется файл .amlignore, а файл .gitignore не используется.

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

Внимание

Особые папки. Две папки — выходные данные и журналы, обрабатываются Машинным обучением Azure специальным образом. Если вы записываете файлы в папки с именами outputs и logs в корневом каталоге (./outputs и ./logs, соответственно), то эти файлы во время обучения автоматически будут отправляться в журнал заданий, чтобы после завершения задания у вас был к ним доступ.

Чтобы создать артефакты во время обучения (например, к файлам моделей, контрольным точкам, файлам данных или графическим изображениям), запишите их в папку ./outputs.

Аналогичным образом можно записать любые журналы задания на обучение в папку ./logs. Чтобы использовать интеграцию TensorBoard Машинного обучения Azure, убедитесь, что вы записываете журналы TensorBoard в эту папку. Во время выполнения задания вы сможете запустить TensorBoard и выполнить потоковую передачу этих журналов. Позже вы также сможете восстановить журналы для любого из ваших предыдущих заданий.

Например, чтобы загрузить файл, записанный в папку outputs на локальном компьютере, после запуска удаленного задания на обучение выполните такую команду: run.download_file(name='outputs/my_output_file', output_file_path='my_destination_path')

Отслеживание и интеграция Git

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

Примеры записных книжек

Примеры настройки задания для разных сценариев обучения см. в следующих записных книжках.

Узнайте, как запускать записные книжки, следуя указаниям из статьи Использование записных книжек Jupyter в Машинном обучении Azure.

Устранение неполадок

  • AttributeError: 'RoundTripLoader' object has no attribute 'comment_handling' (AttributeError: у объекта "RoundTripLoader" нет атрибута "comment_handling"): эта ошибка поступает из новой версии (0.17.5) ruamel-yaml, зависимости azureml-core, в которую внесено критическое изменение в azureml-core. Чтобы устранить эту ошибку, удалите, ruamel-yaml выполнив pip uninstall ruamel-yaml и установив другую версию ruamel-yaml; поддерживаемые версии — версии 0.15.35 до версии 0.17.4 (включительно). Для этого можно выполнить команду pip install "ruamel-yaml>=0.15.35,<0.17.5".

  • Сбой задания с ошибкой jwt.exceptions.DecodeError. Точный текст сообщения об ошибке: jwt.exceptions.DecodeError: It is required that you pass in a value for the "algorithms" argument when calling decode().

    Рассмотрите возможность обновления до последней версии azureml-core: pip install -U azureml-core.

    Если . Эта проблема связана с локальными заданиями, проверка версию PyJWT, установленную в вашей среде. Вы запускаете задания. Поддерживаемые версии PyJWT — < 2.0.0. Если версия PyJWT >= 2.0.0 или выше, удалите ее из среды. Вы можете проверка версию PyJWT, удалить и установить правильную версию следующим образом:

    1. Запустите командную оболочку и активируйте среду conda, в которой установлен azureml-core.
    2. Введите pip freeze и найдите PyJWT. Если этот параметр присутствует, он должен указывать версию < 2.0.0
    3. Если указанная версия не поддерживается, выполните команду pip uninstall PyJWT в командной оболочке и введите "y" (да) для подтверждения.
    4. Установка с помощью pip install 'PyJWT<2.0.0'

    Если . Вы отправляете созданную пользователем среду с заданием, рассмотрите возможность использования последней версии azureml-core в этой среде. В версиях azureml-core >= 1.18.0 уже закреплен PyJWT < 2.0.0. Если в отправляемой среде необходимо использовать версию azureml-core < 1.18.0, убедитесь, что в зависимостях pip указан PyJWT < 2.0.0.

  • ModuleErrors (без имени модуля): If. Вы работаете в ModuleErrors при отправке экспериментов в Машинное обучение Azure, скрипт обучения ожидает установки пакета, но он не добавлен. После предоставления имени пакета Машинное обучение Azure устанавливает пакет в среде, используемой для обучения.

    Если . Вы используете средство оценки для отправки экспериментов, вы можете указать имя пакета через pip_packages или conda_packages параметр в оценщике на основе источника, из которого требуется установить пакет. Можно также указать YML-файл со всеми зависимостями с помощью параметра conda_dependencies_file или перечислить все требования к pip в TXT-файле с помощью параметра pip_requirements_file. Если у вас есть собственный объект Машинное обучение Azure Environment, который требуется переопределить образ по умолчанию, используемый средством оценки, можно указать эту среду с помощью environment параметра конструктора оценщика.

    Машинное обучение Azure поддерживаемые образы Docker и их содержимое можно увидеть в Машинное обучение Azure контейнерах. Зависимости, связанные с платформой, перечислены в соответствующей документации по платформе:

    Примечание.

    Если вы считаете, что определенный пакет достаточно распространен для добавления в Машинное обучение Azure поддерживаемых образов и сред, обратитесь к проблеме с GitHub в Машинное обучение Azure контейнерах.

  • NameError (имя не задано), AttributeError (не найден атрибут объекта): это исключение может поступать из ваших сценариев обучения. Дополнительные сведения о конкретном не заданном имени или ошибке атрибута можно найти в файлах журналов на портале Azure. В пакете SDK можно использовать run.get_details() для просмотра сообщения об ошибке. Будут также перечислены все файлы журнала, созданные для вашего задания. Обязательно проверьте свой сценарий обучения и исправьте ошибку перед повторной отправкой задания.

  • Удаление задания или эксперимента: Эксперименты можно архивировать с помощью метода Experiment.archive или из представления "Эксперимент" в клиенте студии машинного обучения Azure с помощью кнопки "Архивировать эксперимент". Это действие скрывает эксперимент из списка запросов и представлений, но не удаляет его.

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

  • Документ метрики слишком велик. Машинное обучение Azure имеет внутренние ограничения на размер объектов метрик, которые могут регистрироваться сразу в ходе задания на обучение. Если при записи метрик в виде списка возникает ошибка "Документ метрики слишком велик", попробуйте разделить список на меньшие блоки, например:

    run.log_list("my metric name", my_metric[:N])
    run.log_list("my metric name", my_metric[N:])
    

    Внутри Машинное обучение Azure объединяет блоки с тем же именем метрик в непрерывный список.

  • Запуск целевого объекта вычислений занимает слишком много времени. Образы Docker для целевых объектов вычислений загружаются из Реестра контейнеров Azure (ACR). По умолчанию служба Машинного обучения Azure создает реестр ACR, который использует уровень обслуживания Basic. Изменение ACR для рабочей области на уровень "Стандарт" или "Премиум" может сократить время, затрачиваемое на сборку и загрузку образов. Дополнительные сведения см в статье Уровни службы Реестра контейнеров Azure.

Следующие шаги