Обучение моделей Scikit-learn в большом масштабе с помощью Машинного обучения Azure (пакет SDK версии 1)

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

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

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

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

Предварительные требования

Этот код можно выполнить в вычислительном экземпляре Машинного обучения Azure или в собственной записной книжке Jupyter:

  • Вычислительная операция Машинного обучения Azure

    • Чтобы создать вычислительный экземпляр, выполните действия, указанные в разделе Краткое руководство. Приступая к работе с Машинным обучением Azure. Каждый вычислительный экземпляр включает выделенный сервер записных книжек, на котором предварительно загружены пакет SDK и репозиторий с примерами записных книжек.
    • Перейдите на вкладку "Записная книжка" в Студии машинного обучения Azure. В папке примеров для обучения найдите готовую и развернутую записную книжку, перейдя в следующую папку: how-to-use-azureml > ml-frameworks > scikit-learn > train-hyperparameter-tune-deploy-with-sklearn.
    • Для работы с этим руководством можно использовать предварительно подготовленный код в папке с примерами для обучения.
  • Создайте сервер Jupyter Notebook и выполните код в следующих разделах.

Настройка эксперимента

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

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

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

Создайте объект рабочей области из файла config.json, созданного при выполнении инструкций в разделе Предварительные требования.

from azureml.core import Workspace

ws = Workspace.from_config()

Подготовка сценариев

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

Примечание

  • В предоставленном скрипте обучения показано, как записать некоторые метрики в запуск Машинного обучения Azure с помощью Run объекта в скрипте.
  • В предоставленном сценарии для обучения используются примеры данных из функции iris = datasets.load_iris(). Сведения о доступе к собственным данным и их использовании см. в разделе Выполнение обучения с наборами данных.

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

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

Использование курированной среды

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

Если вы хотите использовать курированную среду, можно выполнить следующую команду:

from azureml.core import Environment

sklearn_env = Environment.get(workspace=ws, name='AzureML-Tutorial')

Создание пользовательской среды

Вы также можете создать пользовательскую среду. Определите зависимости Conda в файле YAML; в данном примере этот файл называется conda_dependencies.yml.

dependencies:
  - python=3.7
  - scikit-learn
  - numpy
  - pip:
    - azureml-defaults

Создайте среду Машинного обучения Azure на основе этой спецификации среды Conda. Среда будет упакована в контейнер Docker во время выполнения.

from azureml.core import Environment

sklearn_env = Environment.from_conda_specification(name='sklearn-env', file_path='conda_dependencies.yml')

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

Настройка и отправка объекта run обучения

Создание ScriptRunConfig

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

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

from azureml.core import ScriptRunConfig

src = ScriptRunConfig(source_directory='.',
                      script='train_iris.py',
                      arguments=['--kernel', 'linear', '--penalty', 1.0],
                      environment=sklearn_env)

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

from azureml.core import ScriptRunConfig

compute_target = ws.compute_targets['<my-cluster-name>']
src = ScriptRunConfig(source_directory='.',
                      script='train_iris.py',
                      arguments=['--kernel', 'linear', '--penalty', 1.0],
                      compute_target=compute_target,
                      environment=sklearn_env)

Отправка выполнения

from azureml.core import Experiment

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

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

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

Что происходит во время выполнения объекта run

В процессе выполнения объект run проходит следующие этапы.

  • Подготовка. Создается образ Docker в соответствии с определенной средой. Образ отправляется в реестр контейнеров рабочей области и кэшируется для последующего выполнения. Журналы также передаются в журнал выполнения, и их можно просматривать для отслеживания хода выполнения. Если вместо этого указана курированная среда, то будет использоваться кэшированный образ, в котором выполняется резервное копирование курированной среды.

  • Масштабирование. Кластер пытается выполнить вертикальное масштабирование, если кластеру Batch AI требуется больше узлов для выполнения объекта run, чем доступно в настоящее время.

  • Выполнение. Все сценарии в папке сценариев передаются в целевой объект вычислений, хранилища данных подключаются или копируются, и затем выполняется script. Выходные данные из stdout и папки ./logs передаются в журнал выполнения и могут использоваться для мониторинга выполнения.

  • Постобработка. Папка ./outputs объекта run копируется в журнал выполнения.

Сохранение и регистрация модели

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

Добавьте следующий код в сценарий обучения train_iris.py, чтобы сохранить модель.

import joblib

joblib.dump(svm_model_linear, 'model.joblib')

Зарегистрируйте модель в рабочей области с помощью следующего кода. Если указать параметры model_framework, model_framework_version и resource_configuration, станет возможным развертывание модели без кода. Развертывание модели без кода позволяет напрямую развернуть модель в качестве веб-службы из зарегистрированной модели, и объект ResourceConfiguration определяет вычислительный ресурс для этой веб-службы.

from azureml.core import Model
from azureml.core.resource_configuration import ResourceConfiguration

model = run.register_model(model_name='sklearn-iris', 
                           model_path='outputs/model.joblib',
                           model_framework=Model.Framework.SCIKITLEARN,
                           model_framework_version='0.19.1',
                           resource_configuration=ResourceConfiguration(cpu=1, memory_in_gb=0.5))

Развертывание

Только что зарегистрированную модель можно развернуть точно так же, как и любую другую зарегистрированную модель в Машинном обучении Azure. В руководстве по развертыванию имеется раздел, посвященный регистрации моделей, но можно сразу перейти к [созданию целевого объекта вычисленийhow-to-deploy-and-where.md#choose-a-compute-target) для развертывания, так как у вас уже есть зарегистрированная модель.

(Предварительная версия) Развертывание модели без кода

Важно!

Эта функция сейчас доступна в виде общедоступной предварительной версии. Эта предварительная версия предоставляется без соглашения об уровне обслуживания. Ее не следует использовать для производственных рабочих нагрузок. Некоторые функции могут не поддерживаться или их возможности могут быть ограничены.

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

Вместо традиционного маршрута развертывания можно также использовать для Scikit-learn функцию развертывания без кода (предварительная версия). Развертывание модели без кода поддерживается для всех встроенных типов моделей Scikit-learn. Зарегистрировав модель, как показано выше, с помощью параметров model_framework, model_framework_version и resource_configuration, можно просто использовать статическую функцию deploy() для развертывания модели.

web_service = Model.deploy(ws, "scikit-learn-service", [model])

Примечание

Эти зависимости включены в предварительно построенный контейнер вывода Scikit-learn.

    - azureml-defaults
    - inference-schema[numpy-support]
    - scikit-learn
    - numpy

В полном описании процесса более подробно рассматривается развертывание в Машинном обучении Azure.

Дальнейшие действия

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