Обучение модели с помощью пользовательского образа Docker

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

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

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

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

Запускайте этот код в любой из указанных ниже сред.

Настройка обучающего эксперимента

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

Инициализация рабочей области

Рабочая область Машинного обучения Azure — это ресурс верхнего уровня данной службы. Она предоставляет централизованное расположение для работы со всеми создаваемыми артефактами. В пакете SDK для Python можно получить доступ к артефактам рабочей области, создав объект Workspace.

Создайте объект Workspace на основе файла config.json, который вы создали в качестве необходимого компонента.

from azureml.core import Workspace

ws = Workspace.from_config()

Определение среды

Создайте объект Environment.

from azureml.core import Environment

fastai_env = Environment("fastai2")

Указанный базовый образ в следующем коде поддерживает библиотеку fast.ai, которая позволяет использовать распределенные возможности глубокого обучения. Дополнительные сведения см. в репозитории fast.ai в Docker Hub.

Если вы используете пользовательский образ Docker, возможно, ваша среда Python уже настроена правильно. В этом случае установите для флага user_managed_dependencies значение True, чтобы использовать встроенную среду Python пользовательского образа. По умолчанию Машинное обучение Azure создает среду Conda с указанными зависимостями. Служба запускает скрипт в этой среде вместо использования библиотек Python, установленных на базовом образе.

fastai_env.docker.base_image = "fastdotai/fastai2:latest"
fastai_env.python.user_managed_dependencies = True

Создание частного реестра контейнеров (необязательно)

Чтобы использовать образ из закрытого реестра контейнеров, который отсутствует в рабочей области, необходимо использовать docker.base_image_registry для указания адреса репозитория и имени пользователя и пароля:

# Set the container registry information.
fastai_env.docker.base_image_registry.address = "myregistry.azurecr.io"
fastai_env.docker.base_image_registry.username = "username"
fastai_env.docker.base_image_registry.password = "password"

Использование пользовательского Dockerfile (необязательно)

Также можно использовать пользовательский Dockerfile. Используйте этот подход, если необходимо установить пакеты, отличные от Python, как зависимости. Не забудьте задать для базового образа значение None.

# Specify Docker steps as a string. 
dockerfile = r"""
FROM mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04:20210615.v1
RUN echo "Hello from custom container!"
"""

# Set the base image to None, because the image is defined by Dockerfile.
fastai_env.docker.base_image = None
fastai_env.docker.base_dockerfile = dockerfile

# Alternatively, load the string from a file.
fastai_env.docker.base_image = None
fastai_env.docker.base_dockerfile = "./Dockerfile"

Важно!

Машинное обучение Azure поддерживает только образы Docker, которые поддерживает следующее программное обеспечение:

  • Ubuntu 18.04 или более поздней версии;
  • Conda 4.7.# или более поздней версии;
  • Python версии 3.7 и выше.
  • Оболочка с поддержкой POSIX, доступная в папке /bin/sh, является обязательной для любого образа контейнера, который используется для обучения.

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

Создание или подключение целевого объекта вычислений

Для обучения модели необходимо создать целевой объект вычислений. В этом учебнике вы создадите AmlCompute в качестве вычислительного ресурса для обучения.

Создание AmlCompute займет несколько минут. Если ресурс AmlCompute уже находится в рабочей области, этот код пропускает процесс создания.

Как и в других службах Azure, существуют ограничения на некоторые ресурсы (например, AmlCompute), связанные со службой "Машинное обучение Azure". Дополнительные сведения см. в разделе Ограничения по умолчанию и запрос повышенной квоты.

from azureml.core.compute import ComputeTarget, AmlCompute
from azureml.core.compute_target import ComputeTargetException

# Choose a name for your cluster.
cluster_name = "gpu-cluster"

try:
    compute_target = ComputeTarget(workspace=ws, name=cluster_name)
    print('Found existing compute target.')
except ComputeTargetException:
    print('Creating a new compute target...')
    compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_NC6',
                                                           max_nodes=4)

    # Create the cluster.
    compute_target = ComputeTarget.create(ws, cluster_name, compute_config)

    compute_target.wait_for_completion(show_output=True)

# Use get_status() to get a detailed status for the current AmlCompute.
print(compute_target.get_status().serialize())

Важно!

Используйте SKU ЦП для любой сборки образа в вычислительных ресурсах.

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

В рамках этого учебника используйте сценарий обучения train.py на GitHub. На практике вы можете запустить любой сценарий обучения как есть с помощью Машинного обучения Azure.

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

from azureml.core import ScriptRunConfig

src = ScriptRunConfig(source_directory='fastai-example',
                      script='train.py',
                      compute_target=compute_target,
                      environment=fastai_env)

Отправка задания обучения

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

from azureml.core import Experiment

run = Experiment(ws,'Tutorial-fastai').submit(src)
run.wait_for_completion(show_output=True)

Предупреждение

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

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

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