Обучение модели с помощью пользовательского образа Docker
ОБЛАСТЬ ПРИМЕНЕНИЯ: Пакет SDK для Python версии 1
Из этой статьи вы узнаете, как использовать пользовательский образ Docker при обучении моделей с помощью Машинного обучения Azure. Примеры сценариев в этой статье используются для классификации изображений домашних животных путем создания сверточной нейронной сети.
Машинное обучение Azure предоставляет базовый образ Docker по умолчанию. Можно также использовать среды Машинного обучения Azure, чтобы указать другой базовый образ, например один из обслуживаемых базовых образов Машинного обучения Azure или пользовательский образ. Пользовательские базовые образы позволяют тесно управлять зависимостями и поддерживать более строгий контроль версий компонентов при выполнении заданий обучения.
Необходимые компоненты
Запускайте этот код в любой из указанных ниже сред.
- Машинное обучение Azure вычислительный экземпляр (не требуется скачивание или установка):
- Выполните инструкции по созданию ресурсов, чтобы приступить к работе, чтобы создать выделенный сервер записной книжки, предварительно загруженный с помощью пакета SDK и примера репозитория.
- Собственный сервер Jupyter Notebook:
- Создайте файл конфигурации рабочей области.
- Установите пакет SDK для Машинного обучения Azure.
- Создайте реестр контейнеров Azure или другой реестр Docker, доступный в Интернете.
Настройка обучающего эксперимента
В этом разделе вы настроите обучающий эксперимент, инициализировав рабочую область, определив среду и настроив целевой объект вычислений.
Инициализация рабочей области
Рабочая область Машинного обучения 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 см. в следующих статьях:
- Отслеживание метрик выполнения во время обучения.
- Развертывание модели с помощью пользовательского образа Docker.