Toplu uç noktaya özelleştirilmiş model dağıtma
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)
Bahşiş
Python SDK v2 ile bir toplu dağıtım oluşturmak için başvuru belgeleriniinceleyin.