High-Performance-Bereitstellung mit Triton Inference Server (Vorschau)

GILT FÜR:Azure CLI ML-Erweiterung v2 (aktuell)Python SDK azure-ai-ml v2 (aktuell)

Hier erfahren Sie, wie Sie den NVIDIA Triton Inference Server in Azure Machine Learning mit Onlineendpunkten verwenden.

Triton ist eine Open-Source-Software mit mehreren Frameworks, die für Inferenzen optimiert ist. Es unterstützt beliebte maschinelle Lernsysteme wie TensorFlow, ONNX Runtime, PyTorch, NVIDIA TensorRT und andere. Sie kann für Ihre CPU- oder GPU-Arbeitslasten verwendet werden.

Es gibt hauptsächlich zwei Ansätze, mit denen Sie Triton-Modelle nutzen können, wenn Sie sie auf einem Onlineendpunkt bereitstellen: No-Code-Bereitstellung oder Full-Code-Bereitstellung (Bring your own container).

  • Die No-Code-Bereitstellung für Triton-Modelle ist ein einfacher Weg, da Sie nur Triton-Modelle zur Bereitstellung mitbringen müssen.
  • Die Full-Code-Bereitstellung (Bring your own container) für Triton-Modelle ist anspruchsvoller, da Sie die volle Kontrolle über die Anpassung der für den Triton Rückschluss-Server verfügbaren Konfigurationen haben.

Für beide Optionen führt der Triton-Rückschluss-Server basierend auf dem Triton-Modell, wie von NVIDIA definiert, einen Rückschluss durch. Beispielsweise können Ensemblemodelle für komplexere Szenarien verwendet werden.

Triton wird sowohl in verwalteten Onlineendpunkten als auch in Kubernetes-Onlineendpunkten unterstützt.

In diesem Artikel erfahren Sie, wie Sie ein Modell mithilfe der No-Code-Bereitstellung für Triton auf einem verwalteten Onlineendpunkt bereitstellen. Es werden Informationen zur Verwendung der CLI (Befehlszeile), des Python SDS v2 und des Azure Machine Learning Studio bereitgestellt. Wenn Sie die Konfiguration des Triton-Rückschluss-Servers weiter anpassen möchten, lesen Sie Verwenden eines benutzerdefinierten Containers zum Bereitstellen eines Modells und das BYOC-Beispiel für Triton (Bereitstellungsdefinition und End-to-End-Skript).

Hinweis

Die Nutzung des NVIDIA Triton Inference Server-Containers unterliegt dem NVIDIA AI Enterprise Software-Lizenzvertrag und kann 90 Tage lang ohne Enterprise-Produktabonnement verwendet werden. Weitere Informationen finden Sie unter NVIDIA AI Enterprise in Azure Machine Learning.

Voraussetzungen

Stellen Sie vor dem Ausführen der Schritte in diesem Artikel sicher, dass Sie über die folgenden erforderlichen Komponenten verfügen:

  • Eine funktionierende Python 3.8 (oder höher) Umgebung.

  • Sie müssen zusätzliche Python-Pakete für die Bewertung installiert haben und können sie mit dem folgenden Code installieren. Dazu gehören:

    • Numpy: Eine Array- und numerische Computerbibliothek
    • Triton Inference Server Client: Erleichtert Anforderungen an den Triton Inference Server
    • Pillow: Eine Bibliothek für Bildvorgänge
    • Gevent: Eine Netzwerkbibliothek, die beim Herstellen einer Verbindung mit dem Triton Server verwendet wird
pip install numpy
pip install tritonclient[http]
pip install pillow
pip install gevent
  • Zugang zu VMs der NCv3-Serie für Ihr Azure-Abonnement.

    Wichtig

    Möglicherweise müssen Sie eine Quotenerhöhung für Ihr Abonnement beantragen, bevor Sie diese Reihe von VMs verwenden können. Weitere Informationen finden Sie unter NCv3-series.

NVIDIA Triton Inference Server erfordert eine spezielle Modell-Repository-Struktur, in der es ein Verzeichnis für jedes Modell und Unterverzeichnisse für die Modellversion gibt. Der Inhalt der einzelnen Unterverzeichnisse der Modellversionen wird durch den Typ des Modells und die Anforderungen des Backends, das das Modell unterstützt, bestimmt. Um die gesamte Struktur des Modell-Repository zu sehen https://github.com/triton-inference-server/server/blob/main/docs/user_guide/model_repository.md#model-files

Die Informationen in diesem Dokument basieren auf der Verwendung eines im ONNX-Format gespeicherten Modells, so dass die Verzeichnisstruktur des Modell-Repositorys <model-repository>/<model-name>/1/model.onnx lautet. Konkret führt dieses Modell eine Bildidentifizierung durch.

Die Informationen in diesem Artikel basieren auf Codebeispielen, die im Repository azureml-examples enthalten sind. Um die Befehle lokal auszuführen, ohne YAML und andere Dateien kopieren/einfügen zu müssen, klonen Sie das Repository, und wechseln Sie dann in das Verzeichnis cli im Repository:

git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples
cd cli

Wenn Sie die Standardeinstellungen für die Azure-Befehlszeilenschnittstelle noch nicht festgelegt haben, speichern Sie Ihre Standardeinstellungen. Um zu vermeiden, dass Sie die Werte für Ihr Abonnement, Ihren Arbeitsbereich und Ihre Ressourcengruppe mehrfach übergeben müssen, verwenden Sie die folgenden Befehle. Ersetzen Sie die folgenden Parameter durch Werte für Ihre spezifische Konfiguration:

  • Ersetzen Sie <subscription> durch Ihre Azure-Abonnement-ID.
  • Ersetzen Sie <workspace> durch den Namen Ihres Azure Machine Learning-Arbeitsbereichs.
  • Ersetzen Sie <resource-group> durch die Azure-Ressourcengruppe, die Ihren Arbeitsbereich enthält.
  • Ersetzen Sie <location> durch die Azure-Region, die Ihren Arbeitsbereich enthält.

Tipp

Mit dem Befehl az configure -l können Sie die aktuellen Standardwerte anzeigen.

az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>

Definieren der Bereitstellungskonfiguration

GILT FÜRAzure CLI ML-Erweiterung v2 (aktuell)

In diesem Abschnitt wird gezeigt, wie Sie mit der Azure CLI und der Machine Learning-Erweiterung (v2) auf verwalteten Onlineendpunkten bereitstellen können.

Wichtig

Für die Bereitstellung ohne Code in Triton wird das Testen über lokale Endpunkte derzeit nicht unterstützt.

  1. Um zu vermeiden, dass Sie einen Pfad für mehrere Befehle eingeben müssen, verwenden Sie den folgenden Befehl, um eine BASE_PATH-Umgebungsvariable zu setzen. Diese Variable verweist auf das Verzeichnis, in dem sich das Modell und die zugehörigen YAML-Konfigurationsdateien befinden:

    BASE_PATH=endpoints/online/triton/single-model
    
  2. Verwenden Sie den folgenden Befehl, um den Namen des zu erstellenden Endpunkts festzulegen. In diesem Beispiel wird ein zufälliger Name für den Endpunkt erstellt:

    export ENDPOINT_NAME=triton-single-endpt-`echo $RANDOM`
    
  3. Erstellen Sie eine YAML-Konfigurationsdatei für Ihren Endpunkt. Im folgenden Beispiel werden der Name und der Authentifizierungsmodus des Endpunkts konfiguriert. Der in den folgenden Befehlen verwendete Befehl befindet sich unter /cli/endpoints/online/triton/single-model/create-managed-endpoint.yml im azureml-examples-Repository, das Sie zuvor geklont haben:

    create-managed-endpoint.yaml

    $schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
    name: my-endpoint
    auth_mode: aml_token
    
  4. Erstellen Sie eine YAML-Konfigurationsdatei für das Bereitstellen. Im folgenden Beispiel wird eine Bereitstellung mit dem Namen blue für den im vorherigen Schritt definierten Endpunkt konfiguriert. Der in den folgenden Befehlen verwendete Befehl befindet sich unter /cli/endpoints/online/triton/single-model/create-managed-deployment.yml im azureml-examples-Repository, das Sie zuvor geklont haben:

    Wichtig

    Damit die Triton-Bereitstellung ohne Code (NCD) funktioniert, müssen die Einstellungen type auf triton_model​ gesetzt werdentype: triton_model​. Weitere Informationen finden Sie unter CLI (v2)-Modell YAML-Schema.

    Diese Bereitstellung verwendet eine Standard_NC6s_v3-VM. Möglicherweise müssen Sie eine Quotenerhöhung für Ihr Abonnement beantragen, bevor Sie diese VM nutzen können. Weitere Informationen finden Sie unter NCv3-series.

    $schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
    name: blue
    endpoint_name: my-endpoint
    model:
      name: sample-densenet-onnx-model
      version: 1
      path: ./models
      type: triton_model
    instance_count: 1
    instance_type: Standard_NC6s_v3
    

Bereitstellen in Azure

GILT FÜRAzure CLI ML-Erweiterung v2 (aktuell)

  1. Um einen neuen Endpunkt unter Verwendung der YAML-Konfiguration zu erstellen, verwenden Sie den folgenden Befehl:

    az ml online-endpoint create -n $ENDPOINT_NAME -f $BASE_PATH/create-managed-endpoint.yaml
    
  2. Um die Bereitstellung mit der YAML-Konfiguration zu erstellen, verwenden Sie den folgenden Befehl:

    az ml online-deployment create --name blue --endpoint $ENDPOINT_NAME -f $BASE_PATH/create-managed-deployment.yaml --all-traffic
    

Testen des Endpunkts

GILT FÜRAzure CLI ML-Erweiterung v2 (aktuell)

Sobald die Bereitstellung abgeschlossen ist, verwenden Sie den folgenden Befehl, um eine Bewertungsanfrage an den bereitgestellten Endpunkt zu stellen.

Tipp

Die Datei /cli/endpoints/online/triton/single-model/triton_densenet_scoring.py im azureml-examples Repo wird für die Bewertung verwendet. Das an den Endpunkt übermittelte Bild muss vorverarbeitet werden, um die Anforderungen an Größe, Typ und Format zu erfüllen, und nachverarbeitet werden, um das vorhergesagte Label anzuzeigen. Die triton_densenet_scoring.py verwendet die tritonclient.http-Bibliothek zur Kommunikation mit dem Triton-Inferenzserver. Diese Datei wird auf der Clientseite ausgeführt.

  1. Um die Endpunktbewertungsuri zu erhalten, verwenden Sie den folgenden Befehl:

    scoring_uri=$(az ml online-endpoint show -n $ENDPOINT_NAME --query scoring_uri -o tsv)
    scoring_uri=${scoring_uri%/*}
    
  2. Führen Sie den folgenden Befehl aus, um einen Authentifizierungsschlüssel abzurufen:

    auth_token=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME --query accessToken -o tsv)
    
  3. Um Daten mit dem Endpunkt zu bewerten, verwenden Sie den folgenden Befehl. Er übermittelt das Bild eines Pfaus (https://aka.ms/peacock-pic) an den Endpunkt:

    python $BASE_PATH/triton_densenet_scoring.py --base_url=$scoring_uri --token=$auth_token --image_path $BASE_PATH/data/peacock.jpg
    

    Die Antwort des Skripts ähnelt dem folgenden Text:

    Is server ready - True
    Is model ready - True
    /azureml-examples/cli/endpoints/online/triton/single-model/densenet_labels.txt
    84 : PEACOCK
    

Löschen des Endpunkts und des Modells

GILT FÜRAzure CLI ML-Erweiterung v2 (aktuell)

  1. Wenn Sie mit dem Endpunkt fertig sind, verwenden Sie den folgenden Befehl, um ihn zu löschen:

    az ml online-endpoint delete -n $ENDPOINT_NAME --yes
    
  2. Führen Sie den folgenden Befehl aus, um Ihr Modell zu archivieren:

    az ml model archive --name $MODEL_NAME --version $MODEL_VERSION
    

Nächste Schritte

Weitere Informationen finden Sie in den folgenden Artikeln: