Toplu uç noktaya özelleştirilmiş model dağıtma

Tamamlandı

MLflow modeli biçimini kullanmadan bir modeli toplu iş uç noktasına dağıtmak istiyorsanız puanlama betiğini ve ortamını oluşturmanız gerekir.

Modeli dağıtmak için zaten bir uç nokta oluşturmuş olmanız gerekir. Ardından modeli uç noktaya dağıtabilirsiniz.

Puanlama betiğini oluşturma

Puanlama betiği, yeni verileri okuyan, modeli yükleyen ve puanlama işlemini gerçekleştiren bir dosyadır.

Puanlama betiği iki işlev içermelidir:

  • init(): İşlemin başında bir kez çağrılır, bu nedenle modeli yükleme gibi yüksek maliyetli veya yaygın hazırlıklar için kullanın.
  • run(): Puanlama gerçekleştirmek için her mini parti işleminde çağrılır.

run() yöntemi bir pandas DataFrame veya dizi/liste döndürmelidir.

Puanlama betiği aşağıdaki gibi görünebilir:

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

Örnek betikte dikkate alınacak bazı noktalar vardır:

  • AZUREML_MODEL_DIR, modelle ilişkili dosyaları bulmak için kullanabileceğiniz bir ortam değişkenidir.
  • Yüklenen model gibi yeni verileri puanlarken gereken tüm varlıkları kullanılabilir hale getirmek için global değişkenini kullanın.
  • mini_batch boyutu dağıtım yapılandırmasında tanımlanır. Mini toplu işlemdeki dosyalar işlenemeyecek kadar büyükse, dosyaları daha küçük dosyalara bölmeniz gerekir.
  • Varsayılan olarak, tahminler tek bir dosyaya yazılır.

Bahşiş

toplu dağıtımlar için yazar puanlama betiklerinihakkında daha fazla bilgi edinin.

Ortam oluşturma

Dağıtımınız, puanlama betiğini çalıştırmak için bir yürütme ortamı gerektirir. Kodunuzun gerektirdiği tüm bağımlılıklar ortama dahil edilmelidir.

Conda bağımlılıkları olan bir Docker görüntüsüyle veya Dockerfile ile bir ortam oluşturabilirsiniz.

Toplu dağıtımların çalışması için gereken kitaplık azureml-core de eklemeniz gerekir.

Temel Docker görüntüsü kullanarak ortam oluşturmak için conda bağımlılıklarını bir conda.yaml dosyasında tanımlayabilirsiniz:

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

Ardından, ortamı oluşturmak için aşağıdaki kodu çalıştırın:

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)

Dağıtımı yapılandır ve oluştur

Son olarak, dağıtımı yapılandırabilir ve BatchDeployment sınıfıyla oluşturabilirsiniz.

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)