Развертывание пользовательской модели в конечной точке пакетной службы

Завершено

Если вы хотите развернуть модель в пакетной конечной точке без использования формата модели MLflow, необходимо создать скрипт оценки и среду.

Чтобы развернуть модель, необходимо уже создать конечную точку. Затем можно развернуть модель в конечной точке.

Создание сценария оценки

Скрипт оценки — это файл, который считывает новые данные, загружает модель и выполняет оценку.

Скрипт оценки должен включать две функции:

  • init(): вызывается один раз в начале процесса, поэтому используется для любой дорогостоящей или обычной подготовки, например загрузки модели.
  • run(): вызывается для каждого мини-пакета для выполнения оценки.

Метод run() должен возвращать кадр данных pandas или массив или список.

Скрипт оценки может выглядеть следующим образом:

import os
import mlflow
import pandas as pd


def init():
    global model

    # get the path to the registered model file and load it
    model_path = os.path.join(os.environ["AZUREML_MODEL_DIR"], "model")
    model = mlflow.pyfunc.load(model_path)


def run(mini_batch):
    print(f"run method start: {__file__}, run({len(mini_batch)} files)")
    resultList = []

    for file_path in mini_batch:
        data = pd.read_csv(file_path)
        pred = model.predict(data)

        df = pd.DataFrame(pred, columns=["predictions"])
        df["file"] = os.path.basename(file_path)
        resultList.extend(df.values)

    return resultList

В примере скрипта можно заметить некоторые моменты.

  • AZUREML_MODEL_DIR — это переменная среды, которую можно использовать для поиска файлов, связанных с моделью.
  • Используйте global переменную, чтобы сделать все ресурсы доступными для оценки новых данных, таких как загруженная модель.
  • Размер mini_batch объекта определяется в конфигурации развертывания. Если файлы в мини-пакете слишком большие для обработки, необходимо разделить файлы на небольшие файлы.
  • По умолчанию прогнозы записываются в один файл.

Создать среду

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

Вы можете создать среду с изображением Docker с зависимостями Conda или с помощью Dockerfile.

Кроме того, необходимо добавить библиотеку azureml-core , так как требуется для работы пакетных развертываний.

Чтобы создать среду с помощью базового образа Docker, можно определить зависимости Conda в conda.yaml файле:

name: basic-env-cpu
channels:
  - conda-forge
dependencies:
  - python=3.8
  - pandas
  - pip
  - pip:
      - azureml-core
      - mlflow

Затем, чтобы создать среду, выполните следующий код:

from azure.ai.ml.entities import Environment

env = Environment(
    image="mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04",
    conda_file="./src/conda-env.yml",
    name="deployment-environment",
    description="Environment created from a Docker image plus Conda environment.",
)
ml_client.environments.create_or_update(env)

Настройка и создание развертывания

Наконец, можно настроить и создать развертывание с BatchDeployment помощью класса.

from azure.ai.ml.entities import BatchDeployment, BatchRetrySettings
from azure.ai.ml.constants import BatchDeploymentOutputAction

deployment = BatchDeployment(
    name="forecast-mlflow",
    description="A sales forecaster",
    endpoint_name=endpoint.name,
    model=model,
    compute="aml-cluster",
    code_path="./code",
    scoring_script="score.py",
    environment=env,
    instance_count=2,
    max_concurrency_per_instance=2,
    mini_batch_size=2,
    output_action=BatchDeploymentOutputAction.APPEND_ROW,
    output_file_name="predictions.csv",
    retry_settings=BatchRetrySettings(max_retries=3, timeout=300),
    logging_level="info",
)
ml_client.batch_deployments.begin_create_or_update(deployment)

Совет

Ознакомьтесь со справочной документацией по созданию пакетного развертывания с помощью пакета SDK для Python версии 2.