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í)
Python SDK azure-ai-ml v2 (aktuální)
Tento článek popisuje, jak nasadit modely MLflow do služby Azure Machine Learning pro dávkové odvozování pomocí dávkových koncových bodů. Když nasadíte modely MLflow do dávkových koncových bodů, Azure Machine Learning dokončí následující úlohy:
- Poskytuje základní image nebo kurátorované prostředí MLflow, které obsahuje požadované závislosti pro spuštění dávkové úlohy Machine Learning.
- Vytvoří pipeline dávkové úlohy se skriptem pro hodnocení, který může zpracovávat data pomocí paralelizace.
Další informace o podporovaných typech vstupních souborů a podrobnostech o tom, jak model MLflow funguje, najdete v tématu Důležité informace o nasazení do dávkového odvozování.
Požadavky
Předplatné Azure. Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet.
Pracovní prostor služby Azure Machine Learning. Pokud chcete vytvořit pracovní prostor, přečtěte si téma Správa pracovních prostorů Služby Azure Machine Learning.
Následující oprávnění v pracovním prostoru Azure Machine Learning:
- Pro vytvoření nebo správu dávkových koncových bodů a nasazení použijte roli vlastníka, přispěvatele nebo vlastní roli, která má oprávnění
Microsoft.MachineLearningServices/workspaces/batchEndpoints/*. - Pro vytváření nasazení v Azure Resource Manageru ve skupině prostředků pracovního prostoru použijte roli Vlastník, Přispěvatel nebo Vlastní role, která má
Microsoft.Resources/deployments/writeoprávnění ve skupině prostředků, kde je pracovní prostor nasazený.
- Pro vytvoření nebo správu dávkových koncových bodů a nasazení použijte roli vlastníka, přispěvatele nebo vlastní roli, která má oprávnění
Azure Machine Learning CLI nebo sada Azure Machine Learning SDK pro Python:
Spuštěním následujícího příkazu nainstalujte Azure CLI a
mlrozšíření pro Azure Machine Learning:az extension add -n mlNasazení komponent kanálu pro dávkové koncové body vyžadují rozšíření
mlpro Azure CLI ve verzi 2.7 nebo novější (aktuální verze: 2.37.0).az extension update --name mlPomocí příkazu získejte nejnovější verzi.
Připojení k pracovnímu prostoru
Pracovní prostor je prostředek nejvyšší úrovně pro Azure Machine Learning. Poskytuje centralizované místo pro práci se všemi artefakty, které vytvoříte při použití služby Azure Machine Learning. V této části se připojíte k pracovnímu prostoru, kde provádíte úkony související s nasazením.
V následujícím příkazu zadejte ID předplatného, název pracovního prostoru, název skupiny prostředků a umístění:
az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>
Prozkoumání příkladu
Příklad v tomto článku ukazuje, jak nasadit model MLflow do dávkového koncového bodu pro provádění dávkových predikcí. Model MLflow je založen na datové sadě UCI Heart Disease Data Set. Databáze obsahuje 76 atributů, ale v příkladu se používá pouze podmnožina 14. Model se snaží předpovědět přítomnost onemocnění srdce u pacienta s celočíselnou hodnotou od 0 (bez přítomnosti) do 1 (přítomnost).
Model se trénuje pomocí klasifikátoru XGBBoost . Všechna požadovaná předzpracování jsou zabalená jako scikit-learn pipeline, což dělá z modelu koncové potrubí, které přechází od nezpracovaných dat k predikcím.
Příklad v tomto článku vychází z ukázek kódu obsažených v úložišti azureml-examples . Pokud chcete příkazy spustit místně, aniž byste museli kopírovat nebo vkládat YAML a další soubory, naklonujte úložiště pomocí následujících příkazů 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
Soubory pro tento příklad jsou umístěny v následující složce:
cd endpoints/batch/deploy-models/heart-classifier-mlflow
Sledování v poznámkových blocích Jupyter
Tuto ukázku můžete sledovat pomocí veřejného poznámkového bloku Jupyter. V repozitáři naklonovaného otevřete notebook mlflow-for-batch-tabular.ipynb.
Nasazení modelu MLflow
V této části nasadíte model MLflow do dávkového koncového bodu, abyste mohli spouštět dávkové odvozování nad novými daty. Než budete pokračovat s nasazením, ujistěte se, že je váš model zaregistrovaný a v pracovním prostoru je dostupný výpočetní cluster.
Registrace modelu
Koncové body služby Batch můžou nasazovat jenom registrované modely. V tomto článku použijete místní kopii modelu v úložišti. V důsledku toho musíte model publikovat jenom do registru v pracovním prostoru.
Poznámka:
Pokud už je model, který nasazujete, zaregistrovaný, můžete pokračovat v části Vytvoření výpočetního clusteru .
Zaregistrujte model spuštěním následujícího příkazu:
MODEL_NAME='heart-classifier-mlflow'
az ml model create --name $MODEL_NAME --type "mlflow_model" --path "model"
Vytvoření výpočetního clusteru
Potřebujete zajistit, aby dávkové nasazení běžela na určité dostupné infrastruktuře (výpočetních prostředcích). Nasazení služby Batch mohou být spuštěna na jakýchkoli výpočetních prostředcích Machine Learning, které již v pracovním prostoru existují. Stejnou výpočetní infrastrukturu může sdílet několik dávkových nasazení.
V tomto článku pracujete na výpočetním clusteru Machine Learning s názvem cpu-cluster. Následující příklad ověří, že výpočetní prostředky existují v pracovním prostoru nebo vytvoří nový výpočetní objekt.
Vytvoření výpočetního clusteru:
az ml compute create -n batch-cluster --type amlcompute --min-instances 0 --max-instances 5
Vytvoření dávkového koncového bodu
K vytvoření koncového bodu potřebujete název a popis. Název koncového bodu se zobrazí v identifikátoru URI přidruženém k vašemu koncovému bodu, takže musí být jedinečný v rámci oblasti Azure. V regionu WestUS2 může být například pouze jeden dávkový koncový bod se jménem mybatchendpoint.
Název koncového bodu umístěte do proměnné pro pozdější použití:
Vytvořte koncový bod:
Pokud chcete vytvořit nový koncový bod, vytvořte
YAMLkonfiguraci, jako je následující kód:endpoint.yml
$schema: https://azuremlschemas.azureedge.net/latest/batchEndpoint.schema.json name: heart-classifier-batch description: A heart condition classifier for batch inference auth_mode: aad_tokenPomocí následujícího příkazu vytvořte koncový bod:
az ml batch-endpoint create -n $ENDPOINT_NAME -f endpoint.yml
Vytvoření dávkového nasazení
Modely MLflow nevyžadují, abyste při vytváření nasazení zadali prostředí nebo bodovací skript. Prostředí nebo skript pro hodnocení se vytvoří automaticky. Pokud ale chcete přizpůsobit způsob odvozování nasazení, můžete zadat prostředí nebo bodovací skript.
Pokud chcete vytvořit nové nasazení v rámci vytvořeného koncového bodu, vytvořte
YAMLkonfiguraci, jak je znázorněno v následujícím kódu. Můžete zkontrolovat, jestli schéma YAML celého dávkového koncového bodu obsahuje další vlastnosti.deployment-simple/deployment.yml
$schema: https://azuremlschemas.azureedge.net/latest/modelBatchDeployment.schema.json endpoint_name: heart-classifier-batch name: classifier-xgboost-mlflow description: A heart condition classifier based on XGBoost type: model model: azureml:heart-classifier-mlflow@latest compute: azureml:batch-cluster resources: instance_count: 2 settings: max_concurrency_per_instance: 2 mini_batch_size: 2 output_action: append_row output_file_name: predictions.csv retry_settings: max_retries: 3 timeout: 300 error_threshold: -1 logging_level: infoVytvořte nasazení pomocí následujícího příkazu:
az ml batch-deployment create --file deployment-simple/deployment.yml --endpoint-name $ENDPOINT_NAME --set-default
Důležité
timeout Nakonfigurujte hodnotu v nasazení na základě toho, jak dlouho trvá spuštění odvozování modelu v jedné dávce. Čím větší je velikost dávky, tím delší je hodnota timeout. Mějte na paměti, že mini_batch_size hodnota označuje počet souborů v dávce, nikoli počet vzorků. Při práci s tabulkovými daty může každý soubor obsahovat více řádků, což zvyšuje dobu potřebnou ke zpracování jednotlivých souborů v dávkovém koncovém bodu. V takových případech použijte vyšší hodnoty timeout, abyste se vyvarovali chybám časového limitu.
Vyvolání koncového bodu
I když můžete vyvolat konkrétní nasazení uvnitř koncového bodu, je běžné vyvolat samotný koncový bod a nechat koncový bod rozhodnout, které nasazení se má použít. Tento typ nasazení má název výchozí nasazení. Tento přístup umožňuje změnit výchozí nasazení, které umožňuje změnit model obsluhující nasazení beze změny kontraktu s uživatelem, který vyvolá koncový bod.
K aktualizaci výchozího nasazení použijte následující pokyny:
DEPLOYMENT_NAME="classifier-xgboost-mlflow"
az ml batch-endpoint update --name $ENDPOINT_NAME --set defaults.deployment_name=$DEPLOYMENT_NAME
Koncový bod dávky je teď připravený k použití.
Testujte nasazení
K otestování koncového bodu použijte ukázku neoznaených dat umístěných v tomto úložišti, která fungují s modelem. Koncové body služby Batch můžou zpracovávat pouze data umístěná v cloudu a přístupná z pracovního prostoru Machine Learning. V tomto příkladu nahrajete ukázku do úložiště dat Machine Learning. Vytvoříte datový prostředek, který použijete k vyvolání koncového bodu pro vyhodnocení. Mějte na paměti, že dávkové koncové body přijímají data, která můžete umístit do různých umístění.
Nejprve vytvořte datový objekt. Datový prostředek se skládá ze složky s několika soubory CSV, které chcete zpracovat paralelně pomocí dávkových koncových bodů. Tento krok můžete přeskočit, pokud jsou vaše data už zaregistrovaná jako datový prostředek nebo chcete použít jiný vstupní typ.
Vytvoření definice datového assetu v YAML:
heart-dataset-unlabeled.yml
$schema: https://azuremlschemas.azureedge.net/latest/data.schema.json name: heart-dataset-unlabeled description: An unlabeled dataset for heart classification. type: uri_folder path: dataVytvoření datového assetu:
az ml data create -f heart-dataset-unlabeled.yml
Po nahrání dat vyvoláte koncový bod.
Návod
V následujících příkazech si všimněte, že název nasazení není uveden v operaci
invoke. Koncový bod automaticky směruje úlohu do výchozího nasazení, protože koncový bod má pouze jedno nasazení. Konkrétní nasazení můžete cílit tak, že uvedete argument/parametrdeployment_name.Spusťte následující příkaz:
JOB_NAME = $(az ml batch-endpoint invoke --name $ENDPOINT_NAME --input azureml:heart-dataset-unlabeled@latest --query name -o tsv)Poznámka:
jqNástroj nemusí být nainstalován v každé instalaci. Pokyny k instalaci najdete v tématu Stažení jq.Dávková úloha se spustí, jakmile příkaz vrátí. Stav úlohy můžete monitorovat, dokud se nedokončí:
Analýza výstupů
Konfigurace nasazení určuje, že úloha generuje výstupní předpovědi v souborupredictions.csv . Úloha vytvoří výstup s názvem skóre a tento soubor tam umístí. Každá dávková úloha generuje pouze jeden soubor.
Soubor má následující strukturu:
Jeden řádek pro každý datový bod odeslaný do modelu. U tabulkových dat obsahuje soubor predictions.csv jeden řádek pro každý řádek, který je v každém zpracovaném souboru. U jiných datových typů (obrázky, zvuk, text) je pro každý zpracovaný soubor jeden řádek.
Soubor obsahuje následující sloupce v zadaném pořadí:
row(volitelné): Odpovídající index řádku ve vstupním datovém souboru. Tento sloupec platí jenom v případě, že jsou vstupní data tabulková. Předpovědi se vrátí ve stejném pořadí, v jakém se zobrazí ve vstupním souboru. Můžete se spolehnout na číslo řádku tak, aby odpovídalo odpovídající predikci.prediction: Předpověď přidružená ke vstupním datům. Model vrátí tuto hodnotu "as-is" prostřednictvím svépredict()funkce.file_name: Název souboru, ve kterém se data čtou. V tabulkových datech můžete pomocí tohoto pole určit, které předpovědi patří do jednotlivých vstupních dat.
Výsledky úlohy si můžete stáhnout pomocí názvu úlohy.
K stažení předpovědí použijte následující příkaz:
az ml job download --name $JOB_NAME --output-name score --download-path ./
Po stažení souboru můžete soubor otevřít pomocí preferovaného nástroje pro úpravy. Následující příklad načte předpovědi pomocí datového pandas rámce.
import pandas as pd
score = pd.read_csv(
"named-outputs/score/predictions.csv", names=["row", "prediction", "file"]
)
Výstup zobrazí tabulku:
| Řádek | Predikce | Soubor |
|---|---|---|
| 0 | 0 | heart-unlabeled-0.csv |
| 1 | 1 | heart-unlabeled-0.csv |
| 2 | 0 | heart-unlabeled-0.csv |
| ... | ... | ... |
| 307 | 0 | heart-unlabeled-3.csv |
Návod
Všimněte si, že v tomto příkladu vstupní data obsahují tabulková data ve formátu CSV. Existují čtyři různé vstupní soubory: heart-unlabeled-0.csv, heart-unlabeled-1.csv, heart-unlabeled-2.csv a heart-unlabeled-3.csv.
Kontrola důležitých informací o dávkovém odvozování
Azure Machine Learning podporuje nasazení modelů MLflow do dávkových koncových bodů bez označení hodnoticího skriptu. Tento přístup představuje pohodlný způsob nasazení modelů, které vyžadují zpracování velkých objemů dat podobných dávkovému zpracování. Azure Machine Learning používá informace ve specifikaci modelu MLflow k orchestraci procesu odvozování.
Prozkoumání distribuce práce na pracovníky
Koncové body batch distribuují práci na úrovni souboru pro strukturovaná i nestrukturovaná data. V důsledku toho se pro tuto funkci podporují jenom soubory URI a složky URI. Každý pracovník zpracovává dávky Mini batch size souborů najednou. U tabulkových dat dávkové koncové body nezohledňují počet řádků v každém souboru při rozdělování práce.
Varování
Vnořené struktury složek se během odvozování neprobídnou. Pokud data rozdělíte pomocí složek, nezapomeňte před pokračováním strukturu zploštět.
Dávková nasazení volají funkci predict modelu MLflow jednou na každý soubor. U souborů CSV s více řádky může tato akce v podkladových výpočetních prostředcích tlačit na paměť. Toto chování zvyšuje dobu potřebnou k určení skóre jednoho souboru, zejména u drahých modelů, jako jsou velké jazykové modely. Pokud v protokolech dojde k několika výjimkám z nedostatku paměti nebo záznamům časového limitu, zvažte rozdělení dat do menších souborů s menším počtem řádků nebo implementaci dávkování na úrovni řádků uvnitř hodnoticího skriptu modelu.
Kontrola podpory typů souborů
Následující datové typy jsou podporovány pro dávkové odvozování při nasazování modelů MLflow bez prostředí nebo bodovacího skriptu. Pokud chcete zpracovat jiný typ souboru nebo provést odvození odlišně, můžete nasazení vytvořit přizpůsobením nasazení modelu MLflow pomocí hodnoticího skriptu.
| Přípona souboru | Typ vrácený jako vstup modelu | Požadavek na podpis |
|---|---|---|
.csv
.parquet, .pqt |
pd.DataFrame |
ColSpec. Pokud nejsou zadány, nevynucuje se typování sloupců. |
.png, .jpg, .jpeg, .tiff, , .bmp.gif |
np.ndarray |
TensorSpec. Vstup je upraven, aby odpovídal tvaru tenzorů, pokud je k dispozici. Pokud není k dispozici žádný podpis, odvozují se tensory typu np.uint8 . Další informace najdete v tématu Důležité informace o modelech MLflow zpracovávajících obrázky. |
Varování
Jakýkoli nepodporovaný soubor, který může být součástí vstupních dat, způsobí selhání úlohy. V takových případech se zobrazí chyba podobná chybě ERROR:azureml:Error processing input file: '/mnt/batch/tasks/.../a-given-file.avro'. Typ souboru avro se nepodporuje.
Vysvětlení vynucení podpisu pro modely MLflow
Úlohy dávkového nasazení zajistí kontrolu vstupních datových typů při čtení dat s využitím podpisu modelu MLflow. V důsledku toho musí vstup dat vyhovovat typům uvedeným v podpisu modelu. Pokud se data nedají analyzovat podle očekávání, úloha selže s chybou podobnou CHYBA:azureml:Error processing input file: '/mnt/batch/tasks/.../a-given-file.csv'. Výjimka: neplatný literál int() se základnou 10: 'value'.
Návod
Podpisy v modelech MLflow jsou volitelné, ale důrazně se doporučuje. Poskytují pohodlný způsob, jak včas odhalit problémy s kompatibilitou dat. Další informace o tom, jak protokolovat modely s podpisy, najdete v tématu Modely protokolů, které používají vlastní podpis, prostředí nebo ukázky.
Podpis modelu modelu můžete zkontrolovat otevřením souboru přidruženého k vašemu MLmodel modelu MLflow. Další informace o tom, jak podpisy fungují v MLflow, najdete v tématu Podpisy v MLflow.
Prozkoumání podpory příchutí
Nasazení služby Batch podporují nasazování modelů MLflow pouze s příchutí pyfunc . Pokud chcete nasadit jinou variantu, přečtěte si téma Přizpůsobení nasazení modelu pomocí hodnoticího skriptu.
Přizpůsobení nasazení modelu pomocí hodnoticího skriptu
Modely MLflow můžete nasadit do dávkových koncových bodů bez označení hodnoticího skriptu v definici nasazení. Můžete se ale rozhodnout označit tento soubor (běžně označovaný jako dávkový ovladač) a přizpůsobit provádění inferenčního procesu.
Pro následující scénáře obvykle vyberte tento pracovní postup:
- Zpracovat typy souborů, které dávková nasazení MLflow nepodporují.
- Přizpůsobte si způsob, jakým model běží, například použitím konkrétní varianty pro jeho načtení pomocí funkce
mlflow.<flavor>.load(). - Dokončete předběžné nebo následné zpracování ve vašem běžném způsobu hodnocení, pokud model sám nedokončí.
- Upravte prezentaci modelu, který se dobře nezobrazuje s tabulkovými daty, jako je například tenzorový graf, který představuje obrázek.
- Povolit modelu čtení dat v blocích dat, protože nemůže zpracovat každý soubor najednou kvůli omezením paměti.
Důležité
Pokud chcete označit bodovací skript pro nasazení modelu MLflow, musíte zadat prostředí, ve kterém se nasazení spouští.
Použití hodnoticího skriptu
Pomocí následujících kroků nasaďte model MLflow s vlastním skriptem bodování:
Určete složku, ve které je umístěn model MLflow.
V nástroji Azure Machine Learning Studio přejděte na Modely.
Vyberte model, který chcete nasadit, a pak vyberte kartu Artefakty .
Poznamenejte si zobrazenou složku. Tuto složku jste označili při registraci modelu.
Vytvořte bodovací skript. Všimněte si, jak je součástí
modelfunkce název předchozí složkyinit().deployment-custom/code/batch_driver.py
# Copyright (c) Microsoft. All rights reserved. # Licensed under the MIT license. import os import glob import mlflow import pandas as pd import logging def init(): global model global model_input_types global model_output_names # AZUREML_MODEL_DIR is an environment variable created during deployment # It is the path to the model folder # Please provide your model's folder name if there's one model_path = glob.glob(os.environ["AZUREML_MODEL_DIR"] + "/*/")[0] # Load the model, it's input types and output names model = mlflow.pyfunc.load(model_path) if model.metadata and model.metadata.signature: if model.metadata.signature.inputs: model_input_types = dict( zip( model.metadata.signature.inputs.input_names(), model.metadata.signature.inputs.pandas_types(), ) ) if model.metadata.signature.outputs: if model.metadata.signature.outputs.has_input_names(): model_output_names = model.metadata.signature.outputs.input_names() elif len(model.metadata.signature.outputs.input_names()) == 1: model_output_names = ["prediction"] else: logging.warning( "Model doesn't contain a signature. Input data types won't be enforced." ) def run(mini_batch): print(f"run method start: {__file__}, run({len(mini_batch)} files)") data = pd.concat( map( lambda fp: pd.read_csv(fp).assign(filename=os.path.basename(fp)), mini_batch ) ) if model_input_types: data = data.astype(model_input_types) # Predict over the input data, minus the column filename which is not part of the model. pred = model.predict(data.drop("filename", axis=1)) if pred is not pd.DataFrame: if not model_output_names: model_output_names = ["pred_col" + str(i) for i in range(pred.shape[1])] pred = pd.DataFrame(pred, columns=model_output_names) return pd.concat([data, pred], axis=1)Vytvořte prostředí, ve kterém lze spustit bodovací skript. Protože model v tomto příkladu je MLflow, požadavky na conda jsou také specifikovány v balíčku modelu. Další informace o modelech MLflow a zahrnutých souborech naleznete ve formátu MLmodel.
V tomto kroku vytvoříte prostředí pomocí závislostí conda ze souboru. Musíte také zahrnout
azureml-corebalíček, který je nutný pro dávkové nasazení.Poznámka:
Balíček
azureml-coreje součástí sady Azure Machine Learning SDK verze 1, která je od 31. března 2025 zastaralá s ukončením podpory 30. června 2026. Pro skripty bodování dávkového nasazení zůstává nezbytné jako provozní závislost.Návod
Pokud jste model už zaregistrovali v registru modelů, můžete stáhnout a zkopírovat soubor přidružený k vašemu
conda.ymlmodelu. Tento soubor najdete v nástroji Azure Machine Learning Studio v části Modely>Vyberte model ze seznamu>Artefakty. V kořenové složce vyberteconda.ymlsoubor a pak vyberte Stáhnout nebo zkopírovat jeho obsah.Důležité
Tento příklad používá prostředí conda zadané na adrese
/heart-classifier-mlflow/environment/conda.yaml. Tento soubor byl vytvořen kombinací původního souboru závislostí MLflow conda a přidánímazureml-corebalíčku. Souborconda.ymlnemůžete použít přímo ze modelu.Konfigurace nasazení:
Pokud chcete vytvořit nové nasazení v rámci vytvořeného koncového bodu, vytvořte
YAMLkonfiguraci, jak je znázorněno v následujícím fragmentu kódu. Další vlastnosti najdete ve schématu YAML celého dávkového koncového bodu.deployment-custom/deployment.yml
$schema: https://azuremlschemas.azureedge.net/latest/modelBatchDeployment.schema.json endpoint_name: heart-classifier-batch name: classifier-xgboost-custom description: A heart condition classifier based on XGBoost type: model model: azureml:heart-classifier-mlflow@latest environment: name: batch-mlflow-xgboost image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest conda_file: environment/conda.yaml code_configuration: code: code scoring_script: batch_driver.py compute: azureml:batch-cluster resources: instance_count: 2 settings: max_concurrency_per_instance: 2 mini_batch_size: 2 output_action: append_row output_file_name: predictions.csv retry_settings: max_retries: 3 timeout: 300 error_threshold: -1 logging_level: infoVytvořte nasazení:
Koncový bod dávky je teď připravený k použití.
Uvolnění prostředků
Po dokončení cvičení odstraňte prostředky, které už nepotřebujete.
Spuštěním následujícího kódu odstraňte koncový bod batch a všechna podkladová nasazení:
az ml batch-endpoint delete --name $ENDPOINT_NAME --yes
Tento příkaz neodstraní dávkové skórovací úlohy.