Развертывание пользовательской модели в конечной точке пакетной службы
Если вы хотите развернуть модель в пакетной конечной точке без использования формата модели 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.