Nasazení modelů pro bodování v dávkových koncových bodech

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:

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í.

  1. 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 mybatchendpoint v westus2.

    Název koncového bodu umístěte do proměnné, abyste na něj mohli snadno odkazovat později.

    ENDPOINT_NAME="mnist-batch"
    
  2. 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-learning
    

    Ná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
    name Název dávkového koncového bodu. Musí být jedinečný na úrovni oblasti Azure.
    description Popis dávkového koncového bodu Tato vlastnost je nepovinná.
    tags Značky, které se mají zahrnout do koncového bodu. Tato vlastnost je nepovinná.
  3. Vytvořte koncový bod:

    Spusťte tento kód pro vytvoření dávkového koncového bodu.

    az ml batch-endpoint create --file endpoint.yml  --name $ENDPOINT_NAME
    

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ů
  1. 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.

    MODEL_NAME='mnist-classifier-torch'
    az ml model create --name $MODEL_NAME --type "custom_model" --path "deployment-torch/model"
    
  2. 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)
    
  3. Vytvořte prostředí, ve kterém běží dávkové nasazení. Prostředí by mělo obsahovat balíčky azureml-core a azureml-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 v conda.yaml souboru:

    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-core jsou vyžadovány azureml-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:

    Definice prostředí je součástí samotné definice nasazení jako anonymní prostředí. V nasazení se zobrazí následující řádky:

    environment:
      name: batch-torch-py38
      image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu22.04:latest
      conda_file: environment/conda.yaml
    
  4. V boční nabídce přejděte na kartu Prostředí .

  5. Vyberte Vlastní prostředí> a Vytvořit.

    1. Zadejte název prostředí, v tomto případě torch-batch-env.

    2. Pokud chcete vybrat zdroj prostředí, vyberte Použít existující image Dockeru s volitelným souborem Conda.

    3. Do cesty image registru kontejneru zadejte mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04.

    4. Výběrem možnosti Další přejděte do oddílu Přizpůsobit.

    5. Zkopírujte obsah souboru deployment-torch/environment/conda.yaml z úložiště GitHub na portál.

  6. Vyberte Další , dokud se nedostanete na stránku Revize.

  7. 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í.

  8. 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: info
    

    Ná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
    name Název nasazení.
    endpoint_name Název koncového bodu pro vytvoření nasazení v části.
    model Model, 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žijte azureml:<model-name>:<model-version> syntaxi.
    code_configuration.code Místní adresář, který obsahuje veškerý zdrojový kód Pythonu pro určení skóre modelu.
    code_configuration.scoring_script Soubor Pythonu code_configuration.code v adresáři. Tento soubor musí mít init() funkci a run() 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. Hodnota mini_batch je seznam cest k souborům. Funkce run() 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 objektu mini_batch. Další informace o tom, jak vytvořit bodovací skript, najdete v tématu Vysvětlení hodnoticího skriptu.
    environment Prostředí pro určení skóre modelu. Příklad definuje prostředí vložené pomocí conda_file a image. conda_file Závislosti jsou nainstalovány nad rozhraním image. 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žijte azureml:<environment-name>:<environment-version> syntaxi.
    compute Výpočetní prostředky pro spuštění dávkového vyhodnocování. Příklad používá batch-cluster vytvořený na začátku a odkazuje na něj pomocí azureml:<compute-name> syntaxe.
    resources.instance_count Početinstancíchch
    settings.max_concurrency_per_instance Maximální počet paralelních scoring_script spuštění na instanci.
    settings.mini_batch_size Počet souborů, které scoring_script může zpracovat v jednom run() volání.
    settings.output_action Jak se má výstup uspořádat do výstupního souboru. append_row sloučí všechny run() vrácené výstupní výsledky do jednoho souboru s názvem output_file_name. summary_only nebude sloučit výsledky výstupu a vypočítá error_thresholdpouze .
    settings.output_file_name Název výstupního souboru dávkového bodování pro append_rowoutput_action.
    settings.retry_settings.max_retries Poč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_threshold Poč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_level Protokolování podrobností Hodnoty při zvýšení úrovně podrobností jsou: UPOZORNĚNÍ, INFORMACE a LADĚNÍ.
    settings.environment_variables Slovník párů název-hodnota proměnné prostředí, které se nastaví pro každou dávkovou úlohu vyhodnocování.
  9. V boční nabídce přejděte na kartu Koncové body .

    1. Vyberte kartu Koncové body>Batch – Vytvořit.

    2. Dejte koncovému bodu název, v tomto případě mnist-batch. Zbývající pole můžete nakonfigurovat nebo ponechat prázdná.

    3. Výběrem možnosti Další přejděte do části Model.

    4. Vyberte model mnist-classifier-torch.

    5. Výběrem možnosti Další přejděte na stránku Nasazení.

    6. Pojmenujte nasazení.

  10. Ujistěte se, že je pro výstupní akci vybrána možnost Připojit řádek.

    1. 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.

    2. 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.

    3. 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.

    4. 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.

    5. Po dokončení přejděte výběrem možnosti Další na stránku Kód + prostředí.

    6. V části "Vyberte bodovací skript pro odvozování", vyhledejte a vyberte soubor hodnoticího skriptu deployment-torch/code/batch_driver.py.

    7. V části "Vybrat prostředí" vyberte prostředí, které jste vytvořili dříve torch-batch-env.

    8. Výběrem možnosti Další přejděte na stránku Výpočty.

    9. 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.

    10. Zadejte počet výpočetních instancí, které chcete pro nasazení použít. V tomto případě použijte 2.

    11. Vyberte Další.

  11. 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-default
    

    Návod

    Parametr --set-default nastaví 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 .

  12. Zkontrolujte podrobnosti o dávkovém koncovém bodu a nasazení.

    Slouží show ke kontrole podrobností o koncovém bodu a nasazení. Pokud chcete zkontrolovat dávkové nasazení, spusťte následující kód:

    DEPLOYMENT_NAME="mnist-torch-dpl"
    az ml batch-deployment show --name $DEPLOYMENT_NAME --endpoint-name $ENDPOINT_NAME
    
  13. Vyberte kartu Batch endpoints.

    1. Vyberte dávkový koncový bod, který chcete zobrazit.

    2. Stránka Podrobností koncového bodu zobrazuje podrobnosti o koncovém bodu spolu se všemi nasazeními dostupnými v koncovém bodu.

      Snímek obrazovky s podrobnostmi o kontrole dávkových koncových bodů a nasazení

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:

  1. 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 hodnota interactionEndpoints.Studio.endpoint.

    az ml job show -n $JOB_NAME --web
    
  2. V grafu úlohy vyberte batchscoring krok.

  3. Vyberte kartu Výstupy a protokoly a pak vyberte Zobrazit výstupy dat.

  4. Ve výstupech dat vyberte ikonu a otevřete Průzkumník služby Storage.

    Snímek obrazovky studia zobrazující umístění výstupu dat

    Výsledky vyhodnocování Průzkumník služby Storage se podobají následující ukázkové stránce:

    Snímek obrazovky s výstupem bodování

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í

  1. 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.

    Definice prostředí je součástí samotné definice nasazení jako anonymní prostředí.

    environment:
      name: batch-tensorflow-py38
      image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu22.04:latest
      conda_file: environment/conda.yaml
    
  2. Zkopírujte obsah souboru deployment-keras/environment/conda.yaml z úložiště GitHub na portál.

    1. Vyberte Další , dokud se nedostanete na stránku Revize.

    2. 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]
    
  3. 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)
    
  4. 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.csv
    
  5. Výběrem Další přejděte na stránku „Kód + prostředí“.

    1. Pokud chcete vybrat bodovací skript pro odvozování, vyhledejte bodovací soubor souboru skriptu deployment-keras/code/batch_driver.py.

    2. V části Vybrat prostředí vyberte prostředí, které jste vytvořili v předchozím kroku.

    3. Vyberte Další.

    4. Na stránce Compute vyberte výpočetní cluster, který jste vytvořili v předchozím kroku.

    5. Zadejte počet výpočetních instancí, které chcete pro nasazení použít. V tomto případě použijte 2.

    6. Vyberte Další.

  6. 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_NAME
    

    Návod

    V --set-default tomto 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