Введение в службу машинного обучения Azure
В сентябре 2018 года Microsoft запустила Службу машинного обучения Azure, которая помогает специалистам по обработке данных и инженерам по машинному обучению создавать сквозные конвейеры машинного обучения в Azure, не беспокоясь о разработчиках, стоящих за обучением, тестированием и развертыванием вашей модели. У Azure есть ряд предложений в этой области, таких как Блокноты Azure, Студия машинного обучения Azure и Пакетный искусственный интеллект Azure. Сравнение предложений доступно здесь.
В этой статье основное внимание будет уделено новейшему предложению Azure, и в ней будут рассмотрены основные концепции, включая пример обучения вашей собственной модели машинного обучения. Ниже приводится разбивка статьи:
- Введение в машинное обучение Azure (с этого момента именуемое AML)
- Настройка машинного обучения Azure с помощью VS-кода
- Использование конвейера AML на примере
Раздел 1: Введение в AML
Чтобы работать с AML, вам необходимо знать следующие концепции:
Рабочая область: это централизованное место для всех ваших артефактов (экспериментов, запусков, развертываний, образов). Это помогает вести историю всей вашей работы, включая регистрацию моделей машинного обучения, которые можно использовать для прогнозирования. Чтобы создать рабочее пространство:
- Авторизуйтесь на портале Azure.
- Поиск рабочих областей службы машинного обучения
- Добавить новую рабочую область
Когда вы создаете рабочую область, Azure создаст для вас реестр контейнеров, хранилище, аналитику приложений и хранилище ключей. Это позволяет хранить образы докеров в реестре контейнеров, хранить данные в хранилище, отслеживать производительность модели в аналитических данных приложения и хранить конфиденциальную информацию в хранилище ключей, включая целевые ключи вычислений.
Эксперимент: в рабочей области вы можете определить эксперименты, содержащие отдельные тренировочные прогоны. Каждый тренировочный запуск, который вы выполняете, будет ассоциироваться с экспериментом и рабочим пространством. Определение логических экспериментов высокого уровня поможет вам отслеживать различные тренировочные прогоны и их результаты.
Модель: это основа любого процесса машинного обучения. AML предоставляет возможность регистрировать (версии) моделей, созданных во время каждого обучающего прогона. Каждая зарегистрированная модель физически хранится в хранилище, предоставленном при создании рабочего пространства. Это позволяет специалистам по машинному обучению тестировать и развертывать различные модели с поддержкой версий без необходимости хранить их локально. Можно зарегистрировать модели, созданные из любой из библиотек машинного обучения (scikit-learn, TensorFlow, PyTorch и т. Д.).
Изображение: образы Docker, содержащие модель и сценарий прогнозирования (оценки), могут быть созданы после тестирования модели. AML предоставляет возможность создавать эти образы и версировать их, аналогично управлению версиями модели. Это позволяет создавать и развертывать несколько образов Docker с разными версиями модели.
Развертывание. Созданные образы Docker можно развернуть с помощью Экземпляров контейнеров Azure. В этом и заключается истинная сила AML. Автоматическое создание конечной точки HTTP с балансировкой нагрузки, не беспокоясь о базовой инфраструктуре или конфигурации развертывания, помогает специалистам-практикам машинного обучения сосредоточиться на обучении и оценке своей модели. AML помогает собирать аналитические данные о приложениях для отслеживания производительности вашего развертывания.
Раздел 2. Настройка машинного обучения Azure с помощью VS-кода
В предыдущем разделе мы рассмотрели основные концепции AML. Прежде чем приступить к работе с этой службой, важно понять эти концепции. В этом разделе мы сосредоточимся на настройке нашей среды AML.
Настройка VS-кода. Моя предпочтительная среда IDE для работы с AML - VS-Code (с этого момента называется VSC). Это мотивировано тем фактом, что в VSC доступно расширение Azure, которое обеспечивает беспрепятственное подключение к рабочему пространству AML, помогая нам получить визуальное представление о наших рабочих пространствах, экспериментах, моделях, изображениях и развертываниях.
Чтобы настроить VSC, выполните следующие действия:
- Установить VSC
- Загрузите расширения Python, Azure, Машинное обучение Azure и Visual Studio Code Tools для AI через торговую площадку в VSC. Включите расширения, и если они настроены правильно, на левой боковой панели появится значок Azure.
- Войдите в свою учетную запись Azure через расширение Azure. Вы можете сделать это, обновив расширение Azure. Появится всплывающее окно входа с инструкциями. После входа в систему он покажет вам все ваши рабочие области.
Форк и клонирование репозитория AML. Чтобы быстро начать работу с AML, я создал репозиторий GitHub с примером, который поможет вам быстро обучить и развернуть простую регрессионную модель sklearn. Пожалуйста, перед продолжением создайте вилку и клонируйте репозиторий.
Настройка среды conda: в репозитории доступен файл среды conda (environment.yml). В качестве хорошей практики я Предлагаем создать новую виртуальную среду с помощью conda. Это изолирует ваши зависимости для конвейера AML без нарушения зависимостей для ваших существующих проектов. Чтобы создать новую среду conda со всеми необходимыми пакетами:
conda env create -f environment.yml
Это создаст новую среду conda с именем myenv. Примечание. Вы можете изменить имя среды, отредактировав файл environment.yml. Теперь вы готовы обучить свою первую модель с помощью конвейера AML.
Раздел 3. Использование конвейера AML с примером
Для настройки конвейера в репо предоставляется конфигурационный файл. Давайте рассмотрим каждый раздел в файле конфигурации и соответствующий ему модуль в конвейере.
Часть 1 - Конфигурация рабочего пространства (ws_config):
parameter | data_type | Azure name | |
---|---|---|---|
subscription_id | string | Azure subscription id | |
resource_group | string | Azure resource group | |
workspace_name | string | Azure machine learning workspace |
Чтобы настроить рабочее пространство, создается отдельный файл конфигурации в папке aml_config / config.json. Это можно сделать, введя указанные выше параметры в раздел ws_config файла ml-config.ini и запустив его (Примечание: вы можете запустить это через VSC, но сначала обязательно активируйте среду conda)
(myenv)python generate_wsconfig.py
Примечание. Этот шаг необходимо выполнить один раз для каждого проекта, который вы создаете в конвейере, если вы не измените группу ресурсов и / или рабочую область.
Часть 2 - Обучение (тренировка):
parameter | data_type | explanation | |
---|---|---|---|
experiment_name | string | Name of the experiment to place the current training run under (new experiment is created if no previous experiment with the same name is found) | |
compute_target_name | string | Name of VM where training will be done (new compute name is created if no previous compute of the same name is found) | |
vm_size | string | Ability to choose from various available VM configurations (e.g. Standard_D5_v2) | |
data_folder | string | Name of the folder in the Azure storage is store your training data. | |
local_directory | string | Path to the training data's local directory | |
conda_packages | list | List of conda packages required to train your model | |
script | string | Name of the training script (placed in the current working directory) | |
model_name | string | Name of trained model to be registered under in the workspace. |
Например, мой файл конфигурации выглядит так:
train.py будет содержать ваш обучающий код, а в репозитории представлен пример обучения простой регрессионной модели sklearn. main_train.py - это драйвер для обучения. Код хорошо прокомментирован и не требует пояснений, но я рассмотрю ключевые части кода.
# Create an experiment | |
from azureml.core import Experiment | |
# NOTE: New experiment is created if one with the following name is not found | |
experiment_name = config['train']['experiment_name'] | |
exp = Experiment(workspace=ws, name=experiment_name) | |
# Create a target compute - VM | |
from azureml.core.compute import DsvmCompute | |
from azureml.core.compute_target import ComputeTargetException | |
# NOTE: New compute target is created is one with the following name is not found | |
compute_target_name = config['train']['compute_target_name'] | |
try: | |
dsvm_compute = DsvmCompute(workspace=ws, name=compute_target_name) | |
print('found existing:', dsvm_compute.name) | |
except ComputeTargetException: | |
print('creating new.') | |
dsvm_config = DsvmCompute.provisioning_configuration(vm_size= config['train']['vm_size']) | |
dsvm_compute = DsvmCompute.create(ws, name=compute_target_name, provisioning_configuration=dsvm_config) | |
dsvm_compute.wait_for_completion(show_output=True) |
- Мы создаем эксперимент с именем, указанным в файле ml-config.ini, и настраиваем виртуальную машину Azure. Новый вычислительный экземпляр с указанной конфигурацией создается, если не существует предыдущего экземпляра с таким же именем.
# get the default datastore and upload data from local folder to VM | |
ds = ws.get_default_datastore() | |
print(ds.name, ds.datastore_type, ds.account_name, ds.container_name) | |
# Upload data to default data storage | |
data_folder = config['train']['data_folder'] | |
ds.upload(config['train']['local_directory'],target_path=data_folder,overwrite=True) | |
print ('Finished Uploading Data.') |
- Загрузите данные из локальной папки в хранилище Azure, предоставленное с рабочей областью. Данные загружаются на обучающую виртуальную машину из этого места хранения.
src = ScriptRunConfig(source_directory='./', | |
script= config['train']['script'], | |
run_config=conda_run_config, | |
# pass the datastore reference as a parameter to the training script | |
arguments=['--data-folder', str(ds.as_download())] | |
) | |
run = exp.submit(config=src) | |
run.wait_for_completion(show_output=True) |
- Отправьте свой обучающий сценарий на обучающую виртуальную машину Azure. Рекомендуется хранить train.py в корневом каталоге проекта.
# Register the model | |
print('Registering model...') | |
model = run.register_model(model_name=config['train']['model_name'], model_path='./outputs/ridge_1.pkl') | |
print('Done registering model.') |
- run - это объект регистратора, который отслеживает производительность модели. Он может регистрировать различные метрики, такие как потери, точность и т. Д. В сценарии train.py объект run уже создан и может использоваться для записи метрик модели.
- Зарегистрируйте обученную модель, хранящуюся в «./outputs/ridge_1.pkl». Это то же место, где вы храните свою модель в файле train.py.
Теперь вы можете запустить свое обучение, и оно должно дать следующий результат:
(myenv)python main_train.py
Часть 3 - Создать образ Docker (докер):
parameters | data_type | explanation | |
---|---|---|---|
model_version | int | Version of the trained model (can be located via the VSC IDE) | |
pip_packages | list | List of pip packages to be installed | |
conda_packages | list | List of conda packages to be installed | |
conda_env_file | string | Name of the conda env file | |
path_scoring_script | string | Path to prediction script [score.py] | |
docker_image_name | string | Name of the docker image |
Например, мой файл конфигурации выглядит так:
Скачанную выше модель можно оценить и использовать для создания образа Docker. Сценарий score.py используется для прогнозирования, и его пример представлен в репозитории. create_docker.py - это драйвер для создания образа докера, который хорошо прокомментирован. Я пройдусь по ключевым частям кода.
# Retrive registered model by version and name | |
from azureml.core.model import Model | |
regression_models = Model.list(workspace=ws,name=config['train']['model_name']) | |
for m in regression_models: | |
if m.version == int(config['docker']['model_version']): | |
model = m |
- Получите зарегистрированную модель по имени и версии. Вы можете использовать VSC IDE, чтобы найти имя и версию модели и передать их в файл ml-config.ini.
# Create conda environment for docker image | |
from azureml.core.conda_dependencies import CondaDependencies | |
# DEFINE CONDA DEPENDENCIES | |
myenv = CondaDependencies.create(pip_packages=ast.literal_eval(config['docker']['pip_packages']),conda_packages=ast.literal_eval(config['train']['conda_packages'])) | |
myenv.add_pip_package("pynacl==1.2.1") | |
# CREATE CONDA ENVIRONMENT FILE | |
with open(config['docker']['conda_env_file'],"w") as f: | |
f.write(myenv.serialize_to_string()) |
- Определите необходимые пакеты pip и conda в файле конфигурации для выполнения прогнозирования на обученной модели.
# Create docker image | |
from azureml.core.image import Image, ContainerImage | |
image_config = ContainerImage.image_configuration(runtime= "python", | |
execution_script=config['docker']['path_scoring_script'], | |
conda_file=config['docker']['conda_env_file'], | |
tags = {'area': "diabetes", 'type': "regression"}, | |
description = "test") | |
image = Image.create(name = config['docker']['docker_image_name'], | |
# this is the model object | |
models = [model], | |
image_config = image_config, | |
workspace = ws) | |
image.wait_for_creation(show_output = True) |
- Создайте образ Docker из модели, сценария прогнозирования (score.py) и необходимых зависимостей. Для образа Docker можно добавлять теги.
Теперь вы можете создать образ докера, запустив,
(myenv)python create_docker.py
Теперь вы можете увидеть образ Docker, создаваемый в разделе Images вашей рабочей области в VSC IDE.
Часть 4 - Создание развертывания (развертывание):
parameters | data_type | explanation | |
---|---|---|---|
docker_image_version | int | Version of the docker image created in the previous step (can be found via the VSC IDE) | |
cpu_cores | int | Number of CPU cores for the Docker container | |
memory | int | Memory for the Docker container | |
service_name | string | Deployment service name |
Например, мой файл конфигурации выглядит так:
Чтобы развернуть созданный выше образ Docker, запустите:
(myenv)python create_deployment.py
Я рассмотрю важные части скрипта create_deployment.py,
for i in Image.list(workspace = ws,image_name=config['docker']['docker_image_name']): | |
if i.version == int(config['deploy']['docker_image_version']): | |
image = i | |
from azureml.core.webservice import AciWebservice | |
aciconfig = AciWebservice.deploy_configuration(cpu_cores = int(config['deploy']['cpu_cores']), | |
memory_gb = int(config['deploy']['memory']), | |
tags = {'area': "diabetes", 'type': "regression"}, | |
description = "test") | |
from azureml.core.webservice import Webservice | |
aci_service_name = config['deploy']['service_name'] | |
print(aci_service_name) | |
aci_service = Webservice.deploy_from_image(deployment_config = aciconfig, | |
image = image, | |
name = aci_service_name, | |
workspace = ws) | |
aci_service.wait_for_deployment(True) |
- Выберите образ Docker, указав имя и версию. Вы можете использовать VSC IDE, чтобы найти имя и версию модели и передать их в файл ml-config.ini.
- Создайте развертывание для заданного количества ядер процессора и памяти. Теги могут быть добавлены для развернутой службы.
Результат будет выглядеть примерно так:
После развертывания службы вы можете получить доступ к конечной точке HTTP из файла развертывания properties.json.
Часть 5 - Тестовое развертывание:
Я использую Почтальон для тестирования службы со следующими данными для созданной выше службы регрессии sklearn.
{ "data": [ [1,2,3,4,5,6,7,8,9,10], [10,9,8,7,6,5,4,3,2,1] ] }
Напомним,
- Мы рассмотрели основные концепции AML в Разделе 1.
- Настройте VS-Code и среду conda для AML в разделе 2
- Мы рассмотрели пошаговый пример обучения, развертывания и тестирования простой регрессионной модели sklearn в Разделе 3.
Я рекомендую вам использовать этот конвейер для ваших сценариев использования машинного обучения, включая обучение и развертывание моделей глубокого обучения.
Заявление об ограничении ответственности: мнения, представленные в этой статье, принадлежат автору, а не компании EY Ireland.
Для получения дополнительной информации: https://ey.com/gl/en/issues/business-environment/ey-global-innovation