Поделиться через


Создание пакетов моделей (предварительная версия)

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

Внимание

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

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

Из этой статьи вы узнаете, как упаковать модель для развертывания.

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

Перед выполнением действий, описанных в этой статье, убедитесь, что выполнены следующие необходимые условия:

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

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

  • Управление доступом на основе ролей Azure (Azure RBAC) используется для предоставления доступа к операциям в Машинном обучении Azure. Чтобы выполнить действия, описанные в этой статье, учетная запись пользователя должна быть назначена роль владельца или участника для рабочей области Машинное обучение Azure или настраиваемой роли. Дополнительные сведения см. в статье Управление доступом к рабочей области Машинного обучения Azure.

  • Модель для упаковки. В этом примере используется модель MLflow, зарегистрированная в рабочей области.

    Внимание

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

Сведения об этом примере

В этом примере вы узнаете, как упаковать модели в Машинное обучение Azure.

Клонирование репозитория

Пример в этой статье основан на примерах кода, содержащихся в репозитории azureml-examples . Чтобы выполнить команды локально без необходимости копирования и вставки YAML и других файлов, сначала клонируйте репозиторий, а затем измените каталоги в папку:

git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli

В этом разделе используется пример в конечных точках папки,online /deploy-packages/custom-model.

Подключение к рабочей области

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

az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>

Упаковка модели

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

  • Вы хотите настроить создание пакета модели.
  • Вы хотите развернуть пакет модели за пределами Машинное обучение Azure.
  • Вы хотите использовать пакеты моделей в рабочем процессе MLOps.

Пакеты моделей можно создать, указав следующее:

  • Модель для пакета: каждый пакет модели может содержать только одну модель. Машинное обучение Azure не поддерживает упаковку нескольких моделей в одном пакете модели.
  • Базовая среда: среды используются для указания базового образа и в пакетах Python, необходимых вашей модели. Для моделей MLflow Машинное обучение Azure автоматически создает базовую среду. Для пользовательских моделей его необходимо указать.
  • Технология обслуживания: стек вывода, используемый для запуска модели.

Регистрация модели.

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

MODEL_NAME='sklearn-regression'
MODEL_PATH='model'
az ml model create --name $MODEL_NAME --path $MODEL_PATH --type custom_model

Создание базовой среды

Базовые среды используются для указания базовых образов и зависимостей пакета Python модели. Для нашей модели необходимо использовать следующие пакеты, как указано в файле conda:

conda.yaml

name: model-env
channels:
  - conda-forge
dependencies:
  - python=3.9
  - numpy=1.23.5
  - pip=23.0.1
  - scikit-learn=1.2.2
  - scipy=1.10.1
  - xgboost==1.3.3

Примечание.

Как базовая среда отличается от среды, используемой для развертывания модели в сетевых и пакетных конечных точках? При развертывании моделей в конечных точках среда должна включать зависимости модели и пакеты Python, необходимые для работы управляемых сетевых конечных точек. Это приводит процесс вручную к развертыванию, где необходимо объединить требования модели с требованиями платформы обслуживания. С другой стороны, использование пакетов моделей устраняет это трение, так как необходимые пакеты для сервера вывода автоматически будут введены в пакет модели во время упаковки.

Создайте среду следующим образом:

Создайте определение среды:

sklearn-regression-env.yml

$schema: https://azuremlschemas.azureedge.net/latest/environment.schema.json
name: sklearn-regression-env
image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu22.04
conda_file: conda.yaml
description: An environment for models built with XGBoost and Scikit-learn.

Затем создайте среду:

az ml environment create -f environment/sklearn-regression-env.yml

Создание спецификации пакета

Пакеты моделей можно создавать в Машинное обучение Azure с помощью Azure CLI или пакета SDK Машинное обучение Azure для Python. Спецификация пользовательского пакета поддерживает следующие атрибуты:

Атрибут Тип Описание Обязательное поле
target_environment str Имя создаваемого пакета. Результатом операции пакета является среда в Машинное обучение Azure. Да
base_environment_source object Базовый образ, используемый для создания пакета, в котором указаны зависимости для модели. Да, если модель не является MLflow.
base_environment_source.type str Тип базового образа. Поддерживается только другая среда, так как базовый образ поддерживается .type: environment_asset>.
base_environment_source.resource_id str Идентификатор ресурса базовой среды, используемой. Используйте формат или идентификатор длинного azureml:<name>:<version> ресурса.
inferencing_server object Используемый сервер вывода. Да
inferencing_server.type azureml_online
custom
Используется azureml_online для сервера вывода Машинное обучение Azure или custom для пользовательского веб-сервера, например TensorFlow, обслуживающего или факела. Да
inferencing_server.code_configuration object Конфигурация кода с подпрограммой вывода. Он должен содержать по крайней мере один файл Python с методами init и run. Да, если модель не является MLflow.
model_configuration object Конфигурация модели. Используйте этот атрибут для управления тем, как модель упаковается в результирующем изображении. No
model_configuration.mode download
copy
Укажите способ размещения модели в пакете. Возможные значения: download (по умолчанию) и copy. Используйте download , если требуется, чтобы модель была скачана из реестра моделей во время развертывания. Этот параметр создает небольшие образы Docker, так как модель не включена в нее. Используйтеcopy, если вы хотите отключить образ от Машинное обучение Azure. Модель будет скопирована внутри образа Docker во время пакета. copy не поддерживается в рабочих областях с поддержкой приватного канала. No
  1. Создайте спецификацию пакета следующим образом:

    package-moe.yml

    $schema: http://azureml/sdk-2-0/ModelVersionPackage.json
    base_environment_source:
        type: environment_asset
        resource_id: azureml:sklearn-regression-env:1
    target_environment: sklearn-regression-online-pkg
    inferencing_server: 
        type: azureml_online
        code_configuration:
          code: src
          scoring_script: score.py
    
  2. Запустите операцию пакета модели:

    az ml model package -n $MODEL_NAME -v $MODEL_VERSION --file package-moe.yml
    
  3. Результатом операции пакета является среда.

Упаковка модели с зависимостями в частных веб-каналах Python

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

from azure.ai.ml.entities import WorkspaceConnection
from azure.ai.ml.entities import PatTokenConfiguration

# fetching secrets from env var to secure access, these secrets can be set outside or source code
git_pat = os.environ["GIT_PAT"]

credentials = PatTokenConfiguration(pat=git_pat)

ws_connection = WorkspaceConnection(
    name="<workspace_connection_name>",
    target="<git_url>",
    type="git",
    credentials=credentials,
)

ml_client.connections.create_or_update(ws_connection)

После создания подключения создайте пакет модели, как описано в разделе для пакета модели. В следующем примере базовая среда пакета использует частный веб-канал для зависимости barPython, как указано в следующем файле conda:

conda.yml

name: foo
channels:
  - defaults
dependencies:
  - python
  - pip
  - pip:
    - --extra-index-url <python_feed_url>
    - bar

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

Упаковка модели, размещенной в реестре

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

Следующий код создает пакет t5-base модели из реестра:

  1. Подключитесь к реестру, где находится модель, и рабочая область, в которой требуется создать пакет модели:

    az login
    
  2. Получите ссылку на модель, которую вы хотите упаковать. В этом случае мы упаковаем модель t5-base из azureml реестра.

    MODEL_NAME="t5-base"
    MODEL_VERSION=$(az ml model show --name $MODEL_NAME --label latest --registry-name azureml | jq .version -r)
    
  3. Настройка спецификации пакета. Так как модель, которую мы хотим упаковать, является MLflow, базовая среда и скрипт оценки необязателен.

    package.yml

    $schema: http://azureml/sdk-2-0/ModelVersionPackage.json
    target_environment: pkg-t5-base-online
    inferencing_server: 
        type: azureml_online
    
  4. Запустите операцию, чтобы создать пакет модели:

    az ml model package --name $MODEL_NAME \
                        --version $MODEL_VERSION \
                        --registry-name azureml \
                        --file package.yml
    
  5. Пакет теперь создается в целевой рабочей области и готов к развертыванию.

Модели пакетов для развертывания вне Машинное обучение Azure

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

В следующем коде показано, как настроить copy в пакете модели:

package-external.yml

$schema: http://azureml/sdk-2-0/ModelVersionPackage.json
base_environment_source:
    type: environment_asset
    resource_id: azureml:sklearn-regression-env:1
target_environment: sklearn-regression-docker-pkg
inferencing_server: 
    type: azureml_online
    code_configuration:
      code: src
      scoring_script: score.py
model_configuration:
  mode: copy

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