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í)
Koncové body služby Batch umožňují nasadit modely, které spouští odvozování nad velkými objemy dat. Tyto koncové body zjednodušují hostování modelů pro dávkové vyhodnocování, takže se můžete soustředit na strojové učení místo na infrastrukturu.
K nasazení modelů použijte dávkové koncové body, když:
- Používáte nákladné modely, které pro odvozování trvá déle.
- Odvozování provádíte u velkých objemů dat distribuovaných ve více souborech.
- Nepotřebujete nízkou latenci.
- Využíváte paralelizaci.
Tento článek ukazuje, jak pomocí dávkového koncového bodu nasadit model strojového učení, který řeší klasický problém rozpoznávání číslic MNIST (Modified National Institute of Standards and Technology). Nasazený model provádí dávkové odvozování nad velkým množstvím dat, jako jsou soubory obrázků. Proces začíná vytvořením dávkového nasazení modelu vytvořeného pomocí Torchu. Toto nasazení se stane výchozím nastavením v koncovém bodu. Později vytvořte druhé nasazení modelu vytvořeného pomocí TensorFlow (Keras), otestujte druhé nasazení a nastavte ho jako výchozí nasazení koncového bodu.
Požadavky
Než budete postupovat podle kroků v tomto článku, ujistěte se, že máte následující 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 ho nemáte, vytvořte si ho pomocí kroků v článku Správa pracovních prostorů .
Pokud chcete provést následující úlohy, ujistěte se, že máte tato oprávnění v pracovním prostoru:
Vytváření a správa dávkových koncových bodů a nasazení: Použijte roli vlastníka, roli přispěvatele nebo vlastní roli, která povoluje
Microsoft.MachineLearningServices/workspaces/batchEndpoints/*.Vytvoření nasazení ARM ve skupině prostředků pracovního prostoru: Použijte roli vlastníka, roli přispěvatele nebo vlastní roli, která umožňuje ve
Microsoft.Resources/deployments/writeskupině prostředků, ve které je pracovní prostor nasazený.
Abyste mohli pracovat se službou Azure Machine Learning, musíte nainstalovat následující software:
PLATÍ PRO:
Rozšíření Azure CLI ml v2 (aktuální)Azure CLI a
mlrozšíření pro Azure Machine Learning.az extension add -n ml
Klonování úložiště příkladů
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/endpoints/batch/deploy-models/mnist-classifier
Příprava systému
Připojení k pracovnímu prostoru
Nejprve se připojte k pracovnímu prostoru Azure Machine Learning, ve kterém pracujete.
Pokud jste ještě nenastavili výchozí hodnoty pro Azure CLI, uložte výchozí nastavení. Pokud se chcete vyhnout vícenásobnému zadávání hodnot předplatného, pracovního prostoru, skupiny prostředků a umístění, spusťte tento kód:
az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>
Vytvoření výpočetních prostředků
Koncové body služby Batch běží na výpočetních clusterech a podporují výpočetní clustery Azure Machine Learning (AmlCompute) i clustery Kubernetes. Clustery jsou sdíleným prostředkem, takže jeden cluster může v případě potřeby hostovat jedno nebo mnoho dávkových nasazení (společně s jinými úlohami).
Vytvořte výpočetní prostředky s názvem batch-cluster, jak je znázorněno v následujícím kódu. Upravte podle potřeby a ověřte svůj výpočet pomocí azureml:<your-compute-name>.
az ml compute create -n batch-cluster --type amlcompute --min-instances 0 --max-instances 5
Poznámka:
Za výpočetní prostředky se vám v tomto okamžiku neúčtují poplatky, protože cluster zůstane na 0 uzlech, dokud není vyvolán koncový bod dávky a neodesílá se úloha dávkového vyhodnocování. Další informace o nákladech na výpočetní prostředky najdete v tématu Správa a optimalizace nákladů na AmlCompute.
Vytvoření dávkového koncového bodu
Dávkový koncový bod je koncový bod HTTPS, který klienti volají ke spuštění dávkové úlohy skórování. Úloha dávkového zpracování ohodnotí více vstupů. Dávkové nasazení je sada výpočetních prostředků hostující model, který provádí dávkové skórování (nebo dávkovou inferenci). Jeden dávkový koncový bod může mít několik dávkových nasazení. Další informace o dávkových koncových bodech najdete v tématu Co jsou dávkové koncové body?
Návod
Jedno z dávkových nasazení slouží jako výchozí nasazení koncového bodu. Když je koncový bod vyvolán, výchozí nasazení provádí dávkové bodování. Další informace o dávkových koncových bodech a nasazeních najdete v tématu Dávkové koncové body a dávkové nasazení.
Pojmenujte koncový bod. Název koncového bodu musí být jedinečný v rámci oblasti Azure, protože tento název je součástí identifikátoru URI koncového bodu. Například může existovat pouze jeden dávkový koncový bod s názvem
mybatchendpointvwestus2.Konfigurace dávkového koncového bodu
Následující soubor YAML definuje dávkový koncový bod. Tento soubor použijte s příkazem CLI pro vytvoření dávkového koncového bodu.
endpoint.yml
$schema: https://azuremlschemas.azureedge.net/latest/batchEndpoint.schema.json name: mnist-batch description: A batch endpoint for scoring images from the MNIST dataset. tags: type: deep-learningNásledující tabulka popisuje klíčové vlastnosti koncového bodu. Kompletní schéma YAML dávkového koncového bodu najdete ve schématu YAML koncového bodu dávky CLI (v2).
Klíč Popis nameNázev dávkového koncového bodu. Musí být jedinečný na úrovni oblasti Azure. descriptionPopis dávkového koncového bodu Tato vlastnost je nepovinná. tagsZnačky, které se mají zahrnout do koncového bodu. Tato vlastnost je nepovinná. Vytvořte koncový bod:
Vytvoření dávkového nasazení
Nasazení modelu je sada prostředků vyžadovaných pro hostování modelu, který provádí skutečné odvozování. K vytvoření nasazení dávkového modelu potřebujete následující položky:
- Registrovaný model v pracovním prostoru
- Kód pro určení skóre modelu
- Prostředí s nainstalovanými závislostmi modelu
- Předem vytvořené nastavení výpočetních prostředků a prostředků
Začněte registrací modelu, který se má nasadit – model Torch pro populární problém s rozpoznáváním číslic (MNIST). Nasazení služby Batch můžou nasazovat pouze modely, které jsou zaregistrované v pracovním prostoru. Tento krok můžete přeskočit, pokud už je model, který chcete nasadit, zaregistrovaný.
Návod
Modely se přidruží k nasazení, nikoli ke koncovému bodu. To znamená, že jeden koncový bod může sloužit různým modelům (nebo verzím modelů) ve stejném koncovém bodu, pokud jsou různé modely (nebo verze modelů) nasazené v různých nasazeních.
Teď je čas vytvořit bodovací skript. Nasazení služby Batch vyžadují bodovací skript, který indikuje, jak se má daný model spustit a jak se musí zpracovávat vstupní data. Koncové body služby Batch podporují skripty vytvořené v Pythonu. V tomto případě nasadíte model, který čte soubory obrázků představující číslice a vypíše odpovídající číslici. Bodovací skript je následující:
Poznámka:
V případě modelů MLflow azure Machine Learning automaticky vygeneruje bodovací skript, takže ho nemusíte zadávat. Pokud je vaším modelem MLflow, můžete tento krok přeskočit. Další informace o tom, jak dávkové koncové body fungují s modely MLflow, najdete v článku Použití modelů MLflow v dávkových nasazeních.
Upozorňující
Pokud nasazujete model automatizovaného strojového učení (AutoML) do dávkového koncového bodu, mějte na paměti, že bodovací skript, který AutoML poskytuje, funguje jenom pro online koncové body a není navržený pro dávkové spouštění. Informace o tom, jak vytvořit bodovací skript pro dávkové nasazení, najdete v tématu Vytváření hodnoticích skriptů pro dávkové nasazení.
deployment-torch/code/batch_driver.py
import os import pandas as pd import torch import torchvision import glob from os.path import basename from mnist_classifier import MnistClassifier from typing import List def init(): global model global device # AZUREML_MODEL_DIR is an environment variable created during deployment # It is the path to the model folder model_path = os.environ["AZUREML_MODEL_DIR"] model_file = glob.glob(f"{model_path}/*/*.pt")[-1] model = MnistClassifier() model.load_state_dict(torch.load(model_file)) model.eval() device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") def run(mini_batch: List[str]) -> pd.DataFrame: print(f"Executing run method over batch of {len(mini_batch)} files.") results = [] with torch.no_grad(): for image_path in mini_batch: image_data = torchvision.io.read_image(image_path).float() batch_data = image_data.expand(1, -1, -1, -1) input = batch_data.to(device) # perform inference predict_logits = model(input) # Compute probabilities, classes and labels predictions = torch.nn.Softmax(dim=-1)(predict_logits) predicted_prob, predicted_class = torch.max(predictions, axis=-1) results.append( { "file": basename(image_path), "class": predicted_class.numpy()[0], "probability": predicted_prob.numpy()[0], } ) return pd.DataFrame(results)Vytvořte prostředí, ve kterém běží dávkové nasazení. Prostředí by mělo obsahovat balíčky
azureml-coreaazureml-dataset-runtime[fuse], které jsou vyžadovány koncovými body dávky a každou závislost, kterou váš kód vyžaduje ke spuštění. V tomto případě byly závislosti zachyceny vconda.yamlsouboru:deployment-torch/environment/conda.yaml
name: mnist-env channels: - conda-forge dependencies: - python=3.8.5 - pip<22.0 - pip: - torch==1.13.0 - torchvision==0.14.0 - pytorch-lightning - pandas - azureml-core - azureml-dataset-runtime[fuse]Důležité
Balíčky a
azureml-corejsou vyžadoványazureml-dataset-runtime[fuse]dávkovými nasazeními a měly by být zahrnuty do závislostí prostředí.Zadejte prostředí následujícím způsobem:
V boční nabídce přejděte na kartu Prostředí .
Vyberte Vlastní prostředí> a Vytvořit.
Zadejte název prostředí, v tomto případě
torch-batch-env.Pokud chcete vybrat zdroj prostředí, vyberte Použít existující image Dockeru s volitelným souborem Conda.
Do cesty image registru kontejneru zadejte
mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04.Výběrem možnosti Další přejděte do oddílu Přizpůsobit.
Zkopírujte obsah souboru deployment-torch/environment/conda.yaml z úložiště GitHub na portál.
Vyberte Další , dokud se nedostanete na stránku Revize.
Vyberte Vytvořit a počkejte, až bude prostředí připravené.
Upozorňující
Kurátorovaná prostředí se v dávkových nasazeních nepodporují. Musíte zadat vlastní prostředí. Ke zjednodušení procesu můžete vždy použít základní image kurátorovaného prostředí.
Vytvoření definice nasazení
torch/deployment.yml nasazení
$schema: https://azuremlschemas.azureedge.net/latest/modelBatchDeployment.schema.json name: mnist-torch-dpl description: A deployment using Torch to solve the MNIST classification dataset. endpoint_name: mnist-batch type: model model: name: mnist-classifier-torch path: model code_configuration: code: code scoring_script: batch_driver.py environment: name: batch-torch-py38 image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu22.04:latest conda_file: environment/conda.yaml compute: azureml:batch-cluster resources: instance_count: 1 settings: max_concurrency_per_instance: 2 mini_batch_size: 10 output_action: append_row output_file_name: predictions.csv retry_settings: max_retries: 3 timeout: 30 error_threshold: -1 logging_level: infoNásledující tabulka popisuje klíčové vlastnosti dávkového nasazení. Úplné schéma YAML dávkového nasazení najdete ve schématu YAML dávkového nasazení CLI (v2).
Klíč Popis nameNázev nasazení. endpoint_nameNázev koncového bodu pro vytvoření nasazení v části. modelModel, který se má použít pro dávkové vyhodnocování. Příklad definuje model vložený pomocí path. Tato definice umožňuje, aby se soubory modelu automaticky nahrály a zaregistrovaly s automaticky vygenerovaným názvem a verzí. Další možnosti najdete ve schématu modelu. Osvědčeným postupem pro produkční scénáře je vytvořit model samostatně a odkazovat na něj zde. Pokud chcete odkazovat na existující model, použijteazureml:<model-name>:<model-version>syntaxi.code_configuration.codeMístní adresář, který obsahuje veškerý zdrojový kód Pythonu pro určení skóre modelu. code_configuration.scoring_scriptSoubor Pythonu code_configuration.codev adresáři. Tento soubor musí mítinit()funkci arun()funkci.init()Funkci použijte pro jakoukoli nákladnou nebo běžnou přípravu (například k načtení modelu do paměti).init()je volána pouze jednou na začátku procesu. Sloužírun(mini_batch)k určení skóre každé položky. Hodnotamini_batchje seznam cest k souborům. Funkcerun()by měla vrátit datový rámec pandas nebo pole. Každý vrácený prvek označuje jeden úspěšný spuštění vstupní prvek v objektumini_batch. Další informace o tom, jak vytvořit bodovací skript, najdete v tématu Vysvětlení hodnoticího skriptu.environmentProstředí pro určení skóre modelu. Příklad definuje prostředí vložené pomocí conda_fileaimage.conda_fileZávislosti jsou nainstalovány nad rozhranímimage. Prostředí se automaticky zaregistruje s automaticky vygenerovaným názvem a verzí. Další možnosti najdete ve schématu prostředí. Osvědčeným postupem pro produkční scénáře je vytvořit prostředí samostatně a odkazovat na něj zde. Pokud chcete odkazovat na existující prostředí, použijteazureml:<environment-name>:<environment-version>syntaxi.computeVýpočetní prostředky pro spuštění dávkového vyhodnocování. Příklad používá batch-clustervytvořený na začátku a odkazuje na něj pomocíazureml:<compute-name>syntaxe.resources.instance_countPočetinstancíchch settings.max_concurrency_per_instanceMaximální počet paralelních scoring_scriptspuštění na instanci.settings.mini_batch_sizePočet souborů, které scoring_scriptmůže zpracovat v jednomrun()volání.settings.output_actionJak se má výstup uspořádat do výstupního souboru. append_rowsloučí všechnyrun()vrácené výstupní výsledky do jednoho souboru s názvemoutput_file_name.summary_onlynebude sloučit výsledky výstupu a vypočítáerror_thresholdpouze .settings.output_file_nameNázev výstupního souboru dávkového bodování pro append_rowoutput_action.settings.retry_settings.max_retriesPočet maximálních pokusů o neúspěšný scoring_scriptrun()pokus .settings.retry_settings.timeoutČasový limit v sekundách pro scoring_scriptrun()bodování mini dávky.settings.error_thresholdPočet chyb vyhodnocování vstupního souboru, které by se měly ignorovat. Pokud počet chyb pro celý vstup překročí tuto hodnotu, úloha dávkového vyhodnocování se ukončí. Příklad používá -1, který označuje, že jakýkoli počet selhání je povolen bez ukončení dávkové bodovací úlohy.settings.logging_levelProtokolování podrobností Hodnoty při zvýšení úrovně podrobností jsou: UPOZORNĚNÍ, INFORMACE a LADĚNÍ. settings.environment_variablesSlovník párů název-hodnota proměnné prostředí, které se nastaví pro každou dávkovou úlohu vyhodnocování. V boční nabídce přejděte na kartu Koncové body .
Vyberte kartu Koncové body>Batch – Vytvořit.
Dejte koncovému bodu název, v tomto případě
mnist-batch. Zbývající pole můžete nakonfigurovat nebo ponechat prázdná.Výběrem možnosti Další přejděte do části Model.
Vyberte model mnist-classifier-torch.
Výběrem možnosti Další přejděte na stránku Nasazení.
Pojmenujte nasazení.
Ujistěte se, že je pro výstupní akci vybrána možnost Připojit řádek.
V případě názvu výstupního souboru se ujistěte, že výstupní soubor dávkového bodování je ten, který potřebujete. Výchozí hodnota je
predictions.csv.U velikosti mini dávky upravte velikost souborů, které budou součástí každé minidávkové dávky. Tato velikost určuje množství dat, která skript bodování obdrží na dávku.
V případě časového limitu bodování (sekund) se ujistěte, že dáváte dostatek času na to, aby vaše nasazení ohodnotilo danou dávku souborů. Pokud zvýšíte počet souborů, obvykle je nutné zvýšit i hodnotu časového limitu. Dražší modely (například modely založené na hlubokém učení) můžou v tomto poli vyžadovat vysoké hodnoty.
V případě maximální souběžnosti na instanci nakonfigurujte počet exekutorů, které chcete mít pro každou výpočetní instanci, kterou získáte v nasazení. Vyšší číslo zde zaručuje vyšší stupeň paralelizace, ale také zvyšuje zatížení paměti na výpočetní instanci. Tuto hodnotu vylaďte úplně pomocí velikosti mini dávky.
Po dokončení přejděte výběrem možnosti Další na stránku Kód + prostředí.
V části "Vyberte bodovací skript pro odvozování", vyhledejte a vyberte soubor hodnoticího skriptu deployment-torch/code/batch_driver.py.
V části "Vybrat prostředí" vyberte prostředí, které jste vytvořili dříve torch-batch-env.
Výběrem možnosti Další přejděte na stránku Výpočty.
Vyberte výpočetní cluster, který jste vytvořili v předchozím kroku.
Upozorňující
Clustery Azure Kubernetes se podporují v dávkových nasazeních, ale pouze při vytváření pomocí azure Machine Learning CLI nebo sady Python SDK.
Zadejte počet výpočetních instancí, které chcete pro nasazení použít. V tomto případě použijte 2.
Vyberte Další.
Vytvořte nasazení:
Spuštěním následujícího kódu vytvořte dávkové nasazení v rámci koncového bodu dávky a nastavte ho jako výchozí nasazení.
az ml batch-deployment create --file deployment-torch/deployment.yml --endpoint-name $ENDPOINT_NAME --set-defaultNávod
Parametr
--set-defaultnastaví nově vytvořené nasazení jako výchozí nasazení koncového bodu. Je to pohodlný způsob, jak vytvořit nové výchozí nasazení koncového bodu, zejména při prvním vytvoření nasazení. Osvědčeným postupem pro produkční scénáře je vytvoření nového nasazení, aniž byste ho nastavili jako výchozí. Ověřte, že nasazení funguje podle očekávání, a pak aktualizujte výchozí nasazení později. Další informace o implementaci tohoto procesu najdete v části Nasazení nového modelu .Zkontrolujte podrobnosti o dávkovém koncovém bodu a nasazení.
Vyberte kartu Batch endpoints.
Vyberte dávkový koncový bod, který chcete zobrazit.
Stránka Podrobností koncového bodu zobrazuje podrobnosti o koncovém bodu spolu se všemi nasazeními dostupnými v koncovém bodu.
Spuštění dávkových koncových bodů a získání přístupu k výsledkům
Principy toku dat
Před spuštěním dávkového koncového bodu zjistěte, jak data procházejí systémem:
Vstupy: Data ke zpracování (skóre). Sem patří:
- Soubory uložené ve službě Azure Storage (blob storage, data lake)
- Složky s více soubory
- Registrované datové sady ve službě Azure Machine Learning
Zpracování: Nasazený model zpracovává vstupní data v dávkách (minidávkách) a generuje předpovědi.
Výstupy: Výsledky z modelu uložené jako soubory ve službě Azure Storage Ve výchozím nastavení se výstupy ukládají do výchozího úložiště objektů blob pracovního prostoru, ale můžete zadat jiné umístění.
Vyvolání dávkového koncového bodu
Vyvolání dávkového koncového bodu aktivuje dávkovou úlohu bodování.
name Úloha se vrátí v odpovědi vyvolání a sleduje průběh dávkového vyhodnocování. Zadejte vstupní cestu k datům, aby koncové body mohly vyhledat data, která mají být vyhodnocena. Následující příklad ukazuje, jak spustit novou úlohu pomocí ukázkových dat datové sady MNIST uložené v účtu služby Azure Storage.
Ke spuštění a vyvolání dávkového koncového bodu můžete použít Azure CLI, sadu Azure Machine Learning SDK nebo koncové body REST. Další informace o těchto možnostech najdete v tématu Vytváření úloh a vstupních dat pro dávkové koncové body.
Poznámka:
Jak funguje paralelizace?
Nasazení služby Batch distribuují práci na úrovni souboru. Například složka se 100 soubory a minidávky 10 souborů generují 10 dávek po 10 souborech každá. K tomu dochází bez ohledu na velikost souboru. Pokud jsou soubory příliš velké pro zpracování v minidávkách, rozdělte je na menší soubory, abyste zvýšili paralelismus nebo snížili počet souborů na minidávku. Nasazení služby Batch v současné době nepočítá s nerovnoměrnou distribucí velikosti souborů.
JOB_NAME=$(az ml batch-endpoint invoke --name $ENDPOINT_NAME --input $SAMPLE_INPUT_URI --input-type uri_folder --query name -o tsv)
Koncové body služby Batch podporují čtení souborů nebo složek umístěných v různých umístěních. Další informace o podporovanýchtypech
Monitorování průběhu provádění dávkových úloh
Dávkové bodovací úlohy zabírají čas ke zpracování všech vstupů.
Následující kód zkontroluje stav úlohy a vypíše odkaz na studio Azure Machine Learning, kde najdete další podrobnosti.
az ml job show -n $JOB_NAME --web
Kontrola výsledků dávkového vyhodnocování
Výstupy úloh se ukládají v cloudovém úložišti, buď ve výchozím úložišti objektů blob pracovního prostoru, nebo v zadaném úložišti. Informace o tom, jak změnit výchozí hodnoty, najdete v tématu Konfigurace výstupního umístění. Následující kroky umožňují zobrazit výsledky vyhodnocování Průzkumník služby Azure Storage po dokončení úlohy:
Spuštěním následujícího kódu otevřete úlohu dávkového bodování v studio Azure Machine Learning. Odkaz job studio je také zahrnut v odpovědi
invoke, jako hodnotainteractionEndpoints.Studio.endpoint.az ml job show -n $JOB_NAME --webV grafu úlohy vyberte
batchscoringkrok.Vyberte kartu Výstupy a protokoly a pak vyberte Zobrazit výstupy dat.
Ve výstupech dat vyberte ikonu a otevřete Průzkumník služby Storage.
Výsledky vyhodnocování Průzkumník služby Storage se podobají následující ukázkové stránce:
Konfigurace výstupního umístění
Ve výchozím nastavení se výsledky dávkového vyhodnocování ukládají do výchozího úložiště objektů blob pracovního prostoru ve složce pojmenované po úloze (identifikátor GUID vygenerovaný systémem). Při vyvolání koncového bodu dávky nakonfigurujte výstupní umístění.
Slouží output-path ke konfiguraci libovolné složky v registrovaném úložišti dat služby Azure Machine Learning. Syntaxe je --output-path stejná jako --input při zadávání složky, azureml://datastores/<datastore-name>/paths/<path-on-datastore>/tedy . Slouží --set output_file_name=<your-file-name> ke konfiguraci nového názvu výstupního souboru.
OUTPUT_FILE_NAME=predictions_`echo $RANDOM`.csv
OUTPUT_PATH="azureml://datastores/workspaceblobstore/paths/$ENDPOINT_NAME"
JOB_NAME=$(az ml batch-endpoint invoke --name $ENDPOINT_NAME --input $SAMPLE_INPUT_URI --output-path $OUTPUT_PATH --set output_file_name=$OUTPUT_FILE_NAME --query name -o tsv)
Upozorňující
Musíte použít jedinečné výstupní umístění. Pokud výstupní soubor existuje, úloha dávkového bodování selže.
Důležité
Na rozdíl od vstupů je možné výstupy ukládat jenom v úložištích dat Azure Machine Learning, která běží v účtech úložiště objektů blob.
Přepsání konfigurace nasazení pro každou úlohu
Při vyvolání dávkového koncového bodu můžete přepsat některá nastavení, abyste co nejlépe využili výpočetní prostředky a zlepšili výkon. Tato funkce je užitečná, když potřebujete různá nastavení pro různé úlohy, aniž byste museli trvale měnit nasazení.
Která nastavení je možné přepsat?
Pro každou úlohu můžete nakonfigurovat následující nastavení:
| Nastavení | Kdy používat | Ukázkový scénář |
|---|---|---|
| Počet instancí | Pokud máte různé objemy dat | Pro větší datové sady použijte více instancí (10 instancí pro 1 milion souborů vs. 2 instance pro 100 000 souborů). |
| Velikost minidávkové dávky | Když potřebujete vyvážit propustnost a využití paměti | Pro velké obrázky a větší dávky (10–500 souborů) použijte menší dávky (100–500 souborů) pro malé textové soubory. |
| Maximální počet opakování | Když se kvalita dat liší | Vyšší opakování (5–10) pro hlučná data; nižší počet opakování (1–3) pro čistá data |
| Přerušení zápasu | Při zpracování se doba zpracování liší podle datového typu | Delší časový limit (300s) pro komplexní modely; kratší časový limit (30s) pro jednoduché modely |
| Prahová hodnota chyby | Pokud potřebujete různé úrovně odolnosti proti chybám | Striktní prahová hodnota (-1) pro kritické úlohy; Lenient threshold (10%) pro experimentální úlohy |
Přepsání nastavení
JOB_NAME=$(az ml batch-endpoint invoke --name $ENDPOINT_NAME --input https://azuremlexampledata.blob.core.windows.net/data/mnist/sample --mini-batch-size 20 --instance-count 5 --query name -o tsv)
Přidání nasazení do koncového bodu
Jakmile budete mít dávkový koncový bod s nasazením, můžete model dál upřesnit a přidat nová nasazení. Koncové body služby Batch budou dál obsluhovat výchozí nasazení při vývoji a nasazování nových modelů ve stejném koncovém bodu. Nasazení nemají vliv na sebe navzájem.
V tomto příkladu přidáte druhé nasazení, které používá model vytvořený pomocí Kerasu a TensorFlow k vyřešení stejného problému MNIST.
Přidání druhého nasazení
Vytvořte prostředí pro dávkové nasazení. Zahrňte všechny závislosti, které váš kód potřebuje ke spuštění. Přidejte knihovnu
azureml-core, protože je vyžadována pro nasazení ve várkách. Následující definice prostředí obsahuje požadované knihovny pro spuštění modelu s TensorFlow.Zkopírujte obsah souboru deployment-keras/environment/conda.yaml z úložiště GitHub na portál.
Vyberte Další , dokud se nedostanete na stránku Revize.
Vyberte Vytvořit a počkejte, až bude prostředí připravené k použití.
Použitý soubor conda vypadá takto:
deployment-keras/environment/conda.yaml
name: tensorflow-env channels: - conda-forge dependencies: - python=3.8.5 - pip - pip: - pandas - tensorflow - pillow - azureml-core - azureml-dataset-runtime[fuse]Vytvořte bodovací skript pro model:
deployment-keras/code/batch_driver.py
import os import numpy as np import pandas as pd import tensorflow as tf from typing import List from os.path import basename from PIL import Image from tensorflow.keras.models import load_model def init(): global model # AZUREML_MODEL_DIR is an environment variable created during deployment model_path = os.path.join(os.environ["AZUREML_MODEL_DIR"], "model") # load the model model = load_model(model_path) def run(mini_batch: List[str]) -> pd.DataFrame: print(f"Executing run method over batch of {len(mini_batch)} files.") results = [] for image_path in mini_batch: data = Image.open(image_path) data = np.array(data) data_batch = tf.expand_dims(data, axis=0) # perform inference pred = model.predict(data_batch) # Compute probabilities, classes and labels pred_prob = tf.math.reduce_max(tf.math.softmax(pred, axis=-1)).numpy() pred_class = tf.math.argmax(pred, axis=-1).numpy() results.append( { "file": basename(image_path), "class": pred_class[0], "probability": pred_prob, } ) return pd.DataFrame(results)Vytvoření definice nasazení
deployment-keras/deployment.yml
$schema: https://azuremlschemas.azureedge.net/latest/modelBatchDeployment.schema.json name: mnist-keras-dpl description: A deployment using Keras with TensorFlow to solve the MNIST classification dataset. endpoint_name: mnist-batch type: model model: name: mnist-classifier-keras path: model code_configuration: code: code scoring_script: batch_driver.py environment: name: batch-tensorflow-py38 image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu22.04:latest conda_file: environment/conda.yaml compute: azureml:batch-cluster resources: instance_count: 1 settings: max_concurrency_per_instance: 2 mini_batch_size: 10 output_action: append_row output_file_name: predictions.csvVýběrem Další přejděte na stránku „Kód + prostředí“.
Pokud chcete vybrat bodovací skript pro odvozování, vyhledejte bodovací soubor souboru skriptu deployment-keras/code/batch_driver.py.
V části Vybrat prostředí vyberte prostředí, které jste vytvořili v předchozím kroku.
Vyberte Další.
Na stránce Compute vyberte výpočetní cluster, který jste vytvořili v předchozím kroku.
Zadejte počet výpočetních instancí, které chcete pro nasazení použít. V tomto případě použijte 2.
Vyberte Další.
Vytvořte nasazení:
Spuštěním následujícího kódu vytvořte dávkové nasazení v rámci koncového bodu dávky a nastavte ho jako výchozí nasazení.
az ml batch-deployment create --file deployment-keras/deployment.yml --endpoint-name $ENDPOINT_NAMENávod
V
--set-defaulttomto případě chybí parametr. Osvědčeným postupem pro produkční scénáře je vytvořit nové nasazení, aniž byste ho nastavili jako výchozí. Potom ho ověřte a aktualizujte výchozí nasazení později.
Testování jiného než výchozího dávkového nasazení
Pokud chcete otestovat nové jiné než výchozí nasazení, musíte znát název nasazení, které chcete spustit.
DEPLOYMENT_NAME="mnist-keras-dpl"
JOB_NAME=$(az ml batch-endpoint invoke --name $ENDPOINT_NAME --deployment-name $DEPLOYMENT_NAME --input $SAMPLE_INPUT_URI --input-type uri_folder --query name -o tsv)
Oznámení --deployment-name se používá k určení nasazení, které se má provést. Tento parametr umožňuje invoke nevýkonné nasazení bez aktualizace výchozího nasazení dávkového koncového bodu.
Aktualizace výchozího dávkového nasazení
I když můžete vyvolat konkrétní nasazení uvnitř koncového bodu, obvykle budete chtít vyvolat samotný koncový bod a nechat koncový bod rozhodnout, které nasazení použít – výchozí nasazení. Můžete změnit výchozí nasazení (a v důsledku toho změnit model obsluhující nasazení) beze změny smlouvy s uživatelem, který vyvolá koncový bod. K aktualizaci výchozího nasazení použijte následující kód:
az ml batch-endpoint update --name $ENDPOINT_NAME --set defaults.deployment_name=$DEPLOYMENT_NAME
Odstranění dávkového koncového bodu a nasazení
Pokud staré dávkové nasazení nepotřebujete, odstraňte ho spuštěním následujícího kódu. Příznak --yes potvrdí odstranění.
az ml batch-deployment delete --name mnist-torch-dpl --endpoint-name $ENDPOINT_NAME --yes
Spuštěním následujícího kódu odstraňte dávkový koncový bod a jeho související nasazení. Úlohy dávkového vyhodnocování se neodstraní.
az ml batch-endpoint delete --name $ENDPOINT_NAME --yes