Přizpůsobení výstupů v dávkových nasazeních
PLATÍ PRO:Rozšíření Azure CLI ml v2 (aktuální)Python SDK azure-ai-ml v2 (aktuální)
Tato příručka vysvětluje, jak vytvořit nasazení, která generují vlastní výstupy a soubory. Někdy potřebujete větší kontrolu nad tím, co se zapisuje jako výstup z dávkových úloh odvozovat. Mezi tyto případy patří následující situace:
- Potřebujete řídit, jak se predikce zapisují ve výstupu. Pokud jsou například data tabulková, chcete k původním datům připojit předpověď.
- Predikce musíte zapsat v jiném formátu souboru, než je to, které podporuje dávkové nasazení.
- Váš model je generativní model, který nemůže napsat výstup v tabulkovém formátu. Například modely, které vytvářejí obrázky jako výstupy.
- Váš model vytváří více tabulkových souborů místo jednoho souboru. Například modely, které provádějí prognózy zvážením více scénářů.
Nasazení batch umožňují převzít kontrolu nad výstupem úloh tím, že vám umožní zapisovat přímo do výstupu úlohy dávkového nasazení. V tomto kurzu se dozvíte, jak nasadit model pro provedení dávkového odvozování a zápis výstupů ve formátu parquet připojením předpovědí k původním vstupním datům.
O této ukázce
Tento příklad ukazuje, jak můžete nasadit model pro provedení dávkového odvozování a přizpůsobení způsobu zápisu předpovědí ve výstupu. Model je založený na datové sadě UCI Heart Disease. Databáze obsahuje 76 atributů, ale tento příklad používá podmnožinu 14 z nich. Model se snaží předpovědět přítomnost onemocnění srdce u pacienta. Hodnota integer je od 0 (bez přítomnosti) na 1 (přítomnost).
Model byl vytrénován pomocí XGBBoost
klasifikátoru a veškeré požadované předběžné zpracování bylo zabaleno jako scikit-learn
kanál, takže tento model představuje kompletní kanál, který přechází z nezpracovaných dat na predikce.
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, nejprve naklonujte úložiště a pak změňte adresáře do složky:
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
Soubory pro tento příklad jsou v:
cd endpoints/batch/deploy-models/custom-outputs-parquet
Sledování v poznámkovém bloku Jupyter
K tomuto příkladu můžete použít poznámkový blok Jupyter. V klonovaném úložišti otevřete poznámkový blok s názvem custom-output-batch.ipynb.
Požadavky
Předplatné Azure. Pokud ještě nemáte předplatné Azure, vytvořte si napřed bezplatný účet. Vyzkoušejte bezplatnou nebo placenou verzi služby Azure Machine Learning.
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.
Ujistěte se, že máte v pracovním prostoru Machine Learning následující oprávnění:
- Vytváření nebo správa dávkových koncových bodů a nasazení: Použijte roli Vlastník, Přispěvatel nebo Vlastní, která umožňuje
Microsoft.MachineLearningServices/workspaces/batchEndpoints/*
. - Vytvořte nasazení Azure Resource Manageru ve skupině prostředků pracovního prostoru: Použijte roli Vlastník, Přispěvatel nebo Vlastní, která umožňuje
Microsoft.Resources/deployments/write
ve skupině prostředků, ve které je pracovní prostor nasazený.
- Vytváření nebo správa dávkových koncových bodů a nasazení: Použijte roli Vlastník, Přispěvatel nebo Vlastní, která umožňuje
Nainstalujte následující software pro práci se službou Machine Learning:
Spuštěním následujícího příkazu nainstalujte Azure CLI a
ml
rozšíření pro Azure Machine Learning:az extension add -n ml
Nasazení součástí kanálu pro koncové body služby Batch se zavádí ve verzi 2.7
ml
rozšíření pro Azure CLI.az extension update --name ml
Pomocí příkazu získejte nejnovější verzi.
Připojení k pracovnímu prostoru
Pracovní prostor je prostředek nejvyšší úrovně pro Machine Learning. Poskytuje centralizované místo pro práci se všemi artefakty, které vytvoříte při použití služby Machine Learning. V této části se připojíte k pracovnímu prostoru, ve kterém provádíte úlohy nasazení.
V následujícím příkazu zadejte hodnoty ID předplatného, pracovního prostoru, umístění a skupiny prostředků:
az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>
Vytvoření dávkového nasazení s vlastním výstupem
V tomto příkladu vytvoříte nasazení, které může zapisovat přímo do výstupní složky úlohy dávkového nasazení. Nasazení používá tuto funkci k zápisu vlastních souborů parquet.
Registrace modelu
Registrované modely můžete nasadit pouze pomocí dávkového koncového bodu. V tomto případě už máte místní kopii modelu v úložišti, takže model je potřeba publikovat jenom do registru v pracovním prostoru. Tento krok můžete přeskočit, pokud už je model, který se pokoušíte nasadit, zaregistrovaný.
MODEL_NAME='heart-classifier-sklpipe'
az ml model create --name $MODEL_NAME --type "custom_model" --path "model"
Vytvoření hodnoticího skriptu
Potřebujete vytvořit bodovací skript, který může číst vstupní data poskytnutá dávkovém nasazením a vracet skóre modelu. Také budete zapisovat přímo do výstupní složky úlohy. V souhrnu navrhovaný bodovací skript provede takto:
- Přečte vstupní data jako soubory CSV.
- Spustí funkci modelu
predict
MLflow na vstupní data. - Připojí předpovědi spolu
pandas.DataFrame
se vstupními daty. - Zapíše data do souboru pojmenovaného jako vstupní soubor, ale ve
parquet
formátu.
kód/batch_driver.py
import os
import pickle
import glob
import pandas as pd
from pathlib import Path
from typing import List
def init():
global model
global output_path
# 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:
output_path = os.environ["AZUREML_BI_OUTPUT_PATH"]
model_path = os.environ["AZUREML_MODEL_DIR"]
model_file = glob.glob(f"{model_path}/*/*.pkl")[-1]
with open(model_file, "rb") as file:
model = pickle.load(file)
def run(mini_batch: List[str]):
for file_path in mini_batch:
data = pd.read_csv(file_path)
pred = model.predict(data)
data["prediction"] = pred
output_file_name = Path(file_path).stem
output_file_path = os.path.join(output_path, output_file_name + ".parquet")
data.to_parquet(output_file_path)
return mini_batch
Poznámky:
- Všimněte si, jak se proměnná
AZUREML_BI_OUTPUT_PATH
prostředí používá k získání přístupu k výstupní cestě úlohy nasazení. - Funkce
init()
naplní globální proměnnou,output_path
která se dá použít později, abyste věděli, kde psát. - Metoda
run
vrátí seznam zpracovaných souborů. Funkce musírun
vrátitlist
objekt nebopandas.DataFrame
objekt.
Upozorňující
Vezměte v úvahu, že všechny dávkové exekutory mají přístup k zápisu do této cesty současně. To znamená, že potřebujete počítat s souběžností. V takovém případě zajistěte, aby každý exekutor zapisuje svůj vlastní soubor pomocí názvu vstupního souboru jako názvu výstupní složky.
Vytvoření koncového bodu
Teď vytvoříte dávkový koncový bod s názvem heart-classifier-batch
, ve kterém je model nasazený.
Rozhodněte se o názvu koncového bodu. Název koncového bodu se zobrazí v identifikátoru URI přidruženém k vašemu koncovému bodu, takže názvy dávkových koncových bodů musí být jedinečné v rámci oblasti Azure. Například může existovat pouze jeden dávkový koncový bod s názvem
mybatchendpoint
vwestus2
.Nakonfigurujte svůj dávkový koncový bod.
Vytvořte koncový bod:
Vytvoření nasazení
Pomocí následujícího postupu vytvořte nasazení pomocí předchozího hodnoticího skriptu:
Nejprve vytvořte prostředí, ve kterém se dá spustit bodovací skript:
Vytvořte nasazení. Všimněte si, že
output_action
je nyní nastavena naSUMMARY_ONLY
hodnotu .Poznámka:
Tento příklad předpokládá, že máte výpočetní cluster s názvem
batch-cluster
. Odpovídajícím způsobem změňte tento název.Pokud chcete vytvořit nové nasazení v rámci vytvořeného koncového bodu, vytvořte konfiguraci YAML, jako je následující. Můžete zkontrolovat, jestli schéma YAML celého dávkového koncového bodu obsahuje další vlastnosti.
$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 and Scikit-Learn pipelines that append predictions on parquet files. type: model model: azureml:heart-classifier-sklpipe@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: summary_only retry_settings: max_retries: 3 timeout: 300 error_threshold: -1 logging_level: info
Pak vytvořte nasazení pomocí následujícího příkazu:
az ml batch-deployment create --file deployment.yml --endpoint-name $ENDPOINT_NAME --set-default
V tuto chvíli je náš dávkový koncový bod připravený k použití.
Otestování nasazení
K otestování koncového bodu použijte ukázku neoznačeného dat umístěného v tomto úložišti, která se dají použít s modelem. Koncové body služby Batch můžou zpracovávat pouze data umístěná v cloudu a jsou přístupná z pracovního prostoru Azure Machine Learning. V tomto příkladu ho nahrajete do úložiště dat Azure Machine Learning. Vytvoříte datový asset, který můžete použít k vyvolání koncového bodu pro bodování. Všimněte si však, že dávkové koncové body přijímají data, která lze umístit do více typů umístění.
Vyvolání koncového bodu s daty z účtu úložiště:
Dávková úloha se spustí hned po vrácení příkazu. Stav úlohy můžete monitorovat, dokud se nedokončí:
Analýza výstupů
Úloha vygeneruje pojmenovaný výstup, který se nazývá score
umístění všech vygenerovaných souborů. Vzhledem k tomu, že jste do adresáře napsali přímo, jeden soubor na každý vstupní soubor, můžete očekávat, že bude mít stejný počet souborů. V tomto konkrétním příkladu pojmenujte výstupní soubory stejně jako vstupy, ale mají příponu parquet.
Poznámka:
Všimněte si, že výstupní složka obsahuje také soubor predictions.csv . Tento soubor obsahuje souhrn zpracovaných souborů.
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 ./
Jakmile se soubor stáhne, můžete ho otevřít pomocí oblíbeného nástroje. Následující příklad načte předpovědi pomocí Pandas
datového rámce.
import pandas as pd
import glob
output_files = glob.glob("named-outputs/score/*.parquet")
score = pd.concat((pd.read_parquet(f) for f in output_files))
score
Výstup vypadá takto:
stáří | Sex | ... | thal | předpověď |
---|---|---|---|---|
63 | 0 | ... | stabilní | 0 |
67 | 0 | ... | normální | 0 |
67 | 0 | ... | vratný | 0 |
37 | 0 | ... | normální | 0 |
Vyčištění prostředků
Spuštěním následujícího kódu odstraňte koncový bod dávky a všechna podkladová nasazení. Úlohy dávkového vyhodnocování se neodstraní.
az ml batch-endpoint delete --name $ENDPOINT_NAME --yes