Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
PLATÍ PRO:
Rozšíření Azure CLI ml v2 (aktuální)
V tomto článku se dozvíte, jak nasadit model MLflow do online koncového bodu pro odvozování v reálném čase. Když nasadíte model MLflow do online koncového bodu, nemusíte zadávat bodovací skript ani prostředí – tato funkce se označuje jako nasazení bez kódu.
Pro bez nasazení kódu azure Machine Learning:
- Dynamicky instaluje balíčky Pythonu, které vypíšete do souboru conda.yaml. V důsledku toho se závislosti nainstalují během modulu runtime kontejneru.
- Poskytuje základní image MLflow nebo kurátorované prostředí, které obsahuje následující položky:
- Balíček
azureml-inference-server-http - Balíček
mlflow-skinny - Bodovací skript pro odvozování
- Balíček
Prerequisites
Předplatné služby Azure. Pokud nemáte předplatné Azure, vytvořte si bezplatný účet před zahájením.
Uživatelský účet, který má alespoň jednu z následujících rolí řízení přístupu na základě role v Azure (Azure RBAC):
- Role Vlastník pro pracovní prostor Azure Machine Learning
- Role Přispěvatel pro pracovní prostor Azure Machine Learning
- Vlastní role s
Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*oprávněními
Další informace najdete v tématu Správa přístupu k pracovním prostorům Azure Machine Learning.
Přístup ke službě Azure Machine Learning:
Nainstalujte Azure CLI a
mlrozšíření do Azure CLI. Postup instalace najdete v tématu Instalace a nastavení rozhraní příkazového řádku (v2).
O příkladu
Příklad v tomto článku ukazuje, jak nasadit model MLflow do online koncového bodu pro provádění predikcí. V příkladu se používá model MLflow založený na datové sadě Diabetes. Tato datová sada obsahuje 10 základních proměnných: věk, pohlaví, index tělesné hmotnosti, průměrný krevní tlak a 6 měření krevního séru získané od 442 pacientů s cukrovkou. Obsahuje také odezvu zájmu, kvantitativní míru progrese onemocnění o jeden rok po datu základních dat.
Model byl natrénován pomocí regresoru scikit-learn . Veškerý požadovaný předzpracování je zabalený jako kanál, takže tento model je kompletní kanál, který přechází z nezpracovaných dat na predikce.
Informace v tomto článku jsou založené na ukázkách kódu z úložiště příkladů azureml . Pokud naklonujete úložiště, můžete příkazy v tomto článku spustit místně, aniž byste museli kopírovat nebo vkládat soubory YAML a další soubory. Pomocí následujících příkazů naklonujte úložiště a přejděte do složky pro váš kódovací jazyk:
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
Sledování v Poznámkovém bloku Jupyter
Pokud chcete postupovat podle kroků v tomto článku, podívejte se na poznámkový blok Nasazení modelu MLflow do online koncových bodů v úložišti příkladů.
Připojení k pracovnímu prostoru
Připojte se k pracovnímu prostoru Azure Machine Learning:
az account set --subscription <subscription-ID>
az configure --defaults workspace=<workspace-name> group=<resource-group-name> location=<location>
Registrace modelu
Do online koncových bodů můžete nasadit jenom registrované modely. Kroky v tomto článku používají model, který je natrénovaný pro datovou sadu Diabetes. V takovém případě už máte v naklonovaném úložišti místní kopii modelu, takže model musíte publikovat jenom do registru v pracovním prostoru. Tento krok můžete přeskočit, pokud už je model, který chcete nasadit, zaregistrovaný.
MODEL_NAME='sklearn-diabetes'
az ml model create --name $MODEL_NAME --type "mlflow_model" --path "endpoints/online/ncd/sklearn-diabetes/model"
Co když se váš model zaprotokoloval do spuštění?
Pokud byl váš model přihlášený do spuštění, můžete ho zaregistrovat přímo.
Pokud chcete model zaregistrovat, potřebujete znát jeho umístění úložiště:
- Pokud používáte funkci MLflow
autolog, cesta k modelu závisí na typu modelu a rozhraní. Zkontrolujte výstup úlohy a identifikujte název složky modelu. Tato složka obsahuje soubor s názvem MLModel. - Pokud metodu
log_modelpoužijete k ručnímu protokolování modelů, předáte mu cestu jako argument této metody. Pokud například použijetemlflow.sklearn.log_model(my_model, "classifier")k protokolování modelu, je cesta,classifierna které je model uložený.
Pomocí azure Machine Learning CLI v2 můžete vytvořit model z výstupu trénovací úlohy. Následující kód používá artefakty úlohy s ID $RUN_ID k registraci modelu s názvem $MODEL_NAME.
$MODEL_PATH je cesta, kterou úloha používá k uložení modelu.
az ml model create --name $MODEL_NAME --path azureml://jobs/$RUN_ID/outputs/artifacts/$MODEL_PATH
Nasazení modelu MLflow do online koncového bodu
Pomocí následujícího kódu nakonfigurujte režim názvu a ověřování koncového bodu, do kterého chcete model nasadit:
Nastavte název koncového bodu spuštěním následujícího příkazu. Nejprve nahraďte
YOUR_ENDPOINT_NAMEjedinečným názvem.export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"Pokud chcete nakonfigurovat koncový bod, vytvořte soubor YAML s názvem create-endpoint.yaml, který obsahuje následující řádky:
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json name: my-endpoint auth_mode: keyVytvořte koncový bod:
az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/ncd/create-endpoint.yamlNakonfigurujte nasazení. Nasazení je sada prostředků vyžadovaných pro hostování modelu, který provádí skutečné inferování.
Vytvořte soubor YAML s názvem sklearn-deployment.yaml, který obsahuje následující řádky:
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json name: sklearn-deployment endpoint_name: my-endpoint model: name: mir-sample-sklearn-ncd-model version: 2 path: sklearn-diabetes/model type: mlflow_model instance_type: Standard_DS3_v2 instance_count: 1Note
Automatické generování
scoring_scriptaenvironmentje podporováno pouze pro variantu modeluPyFunc. Pokud chcete použít jinou variantu modelu, přečtěte si téma Přizpůsobení nasazení modelu MLflow.Vytvořte nasazení:
az ml online-deployment create --name sklearn-deployment --endpoint $ENDPOINT_NAME -f endpoints/online/ncd/sklearn-deployment.yaml --all-trafficaz ml online-deployment create --name sklearn-deployment --endpoint $ENDPOINT_NAME -f endpoints/online/ncd/sklearn-deployment.yaml --all-trafficPřiřaďte veškerý síťový provoz k nasazení. Zatím má koncový bod jedno nasazení, ale žádný z jeho provozu se k němu neřadí.
Tento krok se v Azure CLI nevyžaduje, pokud během vytváření použijete
--all-trafficpříznak. Pokud potřebujete změnit provoz, můžete použítaz ml online-endpoint update --trafficpříkaz. Další informace o tom, jak aktualizovat provoz, naleznete v tématu Progresivní aktualizace provozu.Aktualizujte konfiguraci koncového bodu:
Tento krok se v Azure CLI nevyžaduje, pokud během vytváření použijete
--all-trafficpříznak. Pokud potřebujete změnit provoz, můžete použítaz ml online-endpoint update --trafficpříkaz. Další informace o tom, jak aktualizovat provoz, naleznete v tématu Progresivní aktualizace provozu.
Vyvolání koncového bodu
Jakmile je nasazení připravené, můžete ho použít k vyřizování požadavků. Jedním ze způsobů, jak nasazení otestovat, je použití integrované funkce vyvolání v klientovi nasazení. V úložišti příkladů soubor sample-request-sklearn.json obsahuje následující kód JSON. Můžete ho použít jako ukázkový soubor požadavku pro nasazení.
{"input_data": {
"columns": [
"age",
"sex",
"bmi",
"bp",
"s1",
"s2",
"s3",
"s4",
"s5",
"s6"
],
"data": [
[ 1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0 ],
[ 10.0,2.0,9.0,8.0,7.0,6.0,5.0,4.0,3.0,2.0]
],
"index": [0,1]
}}
Note
Tento soubor používá klíč input_data místo inputs, který používá služba MLflow. Azure Machine Learning vyžaduje jiný vstupní formát, aby mohly být automaticky vygenerovány kontrakty Swagger pro koncové body. Další informace o očekávaných formátech vstupu najdete v tématu Nasazení integrovaného serveru MLflow vs. nasazení na serveru odvozování ve službě Azure Machine Learning.
Odešlete žádost do koncového bodu:
az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/ncd/sample-request-sklearn.json
Odpověď by měla být podobná následujícímu textu:
[
11633.100167144921,
8522.117402884991
]
Important
U MLflow bez nasazení kódu se v současné době nepodporuje testování prostřednictvím místních koncových bodů .
Přizpůsobení nasazení modelů MLflow
V definici nasazení modelu MLflow do online koncového bodu nemusíte zadávat bodovací skript. Pokud ale chcete přizpůsobit proces odvozování, můžete zadat bodovací skript.
Nasazení modelu MLflow obvykle chcete přizpůsobit v následujících případech:
- Model nemá příchuť
PyFunc. - Musíte přizpůsobit způsob, jakým model spouštíte. Například musíte použít
mlflow.<flavor>.load_model()ke načtení modelu s konkrétní variantou. - V rutině bodování je potřeba provést předběžné zpracování nebo následné zpracování, protože model toto zpracování neprovádí.
- Výstup modelu nemůže být pěkně reprezentován v tabulkových datech. Výstup je například tensor, který představuje obrázek.
Important
Pokud zadáte bodovací skript pro nasazení modelu MLflow, musíte také určit prostředí, ve kterém se nasazení spouští.
Nasazení vlastního hodnoticího skriptu
Pokud chcete nasadit model MLflow, který používá vlastní bodovací skript, proveďte kroky v následujících částech.
Identifikace složky modelu
Pomocí následujících kroků identifikujte složku, která obsahuje váš model MLflow:
Přejděte na studio Azure Machine Learning.
Přejděte do části Modely .
Vyberte model, který chcete nasadit, a přejděte na kartu Artefakty .
Poznamenejte si zobrazenou složku. Při registraci modelu zadáte tuto složku.
Vytvoření hodnoticího skriptu
Následující bodovací skript, score.py, poskytuje příklad, jak provádět odvozování pomocí modelu MLflow. Tento skript můžete přizpůsobit vašim potřebám nebo změnit libovolnou jeho část tak, aby odrážel váš scénář. Všimněte si, že název složky, kterou jste dříve identifikovali, modelje součástí init() funkce.
import logging
import os
import json
import mlflow
from io import StringIO
from mlflow.pyfunc.scoring_server import infer_and_parse_json_input, predictions_to_json
def init():
global model
global input_schema
# "model" is the path of the mlflow artifacts when the model was registered. For automl
# models, this is generally "mlflow-model".
model_path = os.path.join(os.getenv("AZUREML_MODEL_DIR"), "model")
model = mlflow.pyfunc.load_model(model_path)
input_schema = model.metadata.get_input_schema()
def run(raw_data):
json_data = json.loads(raw_data)
if "input_data" not in json_data.keys():
raise Exception("Request must contain a top level key named 'input_data'")
serving_input = json.dumps(json_data["input_data"])
data = infer_and_parse_json_input(serving_input, input_schema)
predictions = model.predict(data)
result = StringIO()
predictions_to_json(predictions, result)
return result.getvalue()
Warning
Poradce pro MLflow 2.0: Ukázkový skript bodování funguje s MLflow 1.X a MLflow 2.X. Očekávané vstupní a výstupní formáty v těchto verzích se ale mohou lišit. Zkontrolujte definici prostředí a zjistěte, jakou verzi MLflow používáte. MLflow 2.0 se podporuje jenom v Pythonu 3.8 a novějších verzích.
Vytvoření prostředí
Dalším krokem je vytvoření prostředí, ve které můžete spustit bodovací skript. Vzhledem k tomu, že model je model MLflow, jsou požadavky na conda také specifikovány v balíčku modelu. Další informace o souborech zahrnutých v modelu MLflow naleznete v tématu Formát MLmodel. Prostředí sestavíte pomocí závislostí conda ze souboru. Musíte ale také zahrnout azureml-inference-server-http balíček, který je nutný pro online nasazení ve službě Azure Machine Learning.
Můžete vytvořit definiční soubor conda s názvem conda.yaml, který obsahuje následující řádky:
channels:
- conda-forge
dependencies:
- python=3.12
- pip
- pip:
- mlflow
- scikit-learn==1.7.0
- cloudpickle==3.1.1
- psutil==7.0.0
- pandas==2.3.0
- azureml-inference-server-http
name: mlflow-env
Note
Část dependencies tohoto souboru conda obsahuje azureml-inference-server-http balíček.
K vytvoření prostředí použijte tento soubor závislostí conda:
Prostředí se vytvoří přímo v konfiguraci nasazení.
Vytvořte nasazení
Ve složce koncových bodů/online/ncd vytvořte konfigurační soubor nasazení deployment.yml, který obsahuje následující řádky:
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
name: sklearn-diabetes-custom
endpoint_name: my-endpoint
model: azureml:sklearn-diabetes@latest
environment:
image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu22.04
conda_file: sklearn-diabetes/environment/conda.yaml
code_configuration:
code: sklearn-diabetes/src
scoring_script: score.py
instance_type: Standard_F2s_v2
instance_count: 1
Vytvořte nasazení:
az ml online-deployment create -f endpoints/online/ncd/deployment.yml
Obsluha požadavků
Po dokončení nasazení je připravená obsluhovat žádosti. Jedním ze způsobů, jak otestovat nasazení, je použít invoke metodu s ukázkovým souborem požadavku, jako je například následující soubor, sample-request-sklearn.json:
{"input_data": {
"columns": [
"age",
"sex",
"bmi",
"bp",
"s1",
"s2",
"s3",
"s4",
"s5",
"s6"
],
"data": [
[ 1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0 ],
[ 10.0,2.0,9.0,8.0,7.0,6.0,5.0,4.0,3.0,2.0]
],
"index": [0,1]
}}
Odešlete žádost do koncového bodu:
az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/ncd/sample-request-sklearn.json
Odpověď by měla být podobná následujícímu textu:
{
"predictions": [
1095.2797413413252,
1134.585328803727
]
}
Warning
Poradce pro MLflow 2.0: V MLflow 1.X odpověď neobsahuje predictions klíč.
Vyčistěte zdroje
Pokud už koncový bod nepotřebujete, odstraňte jeho přidružené prostředky:
az ml online-endpoint delete --name $ENDPOINT_NAME --yes
Související obsah
- Nasazení modelů pomocí REST
- Bezpečné nasazení nových implementací pro real-time inferenci
- Řešení problémů s nasazením a hodnocením online koncového bodu