Krachtige prestaties met Triton Inference Server

VAN TOEPASSING OP:Azure CLI ml extension v2 (current)Python SDK azure-ai-ml v2 (current)

Meer informatie over het gebruik van NVIDIA Triton Inference Server in Azure Machine Learning met online-eindpunten.

Triton is multi-framework, opensource-software die is geoptimaliseerd voor deductie. Het ondersteunt populaire machine learning-frameworks zoals TensorFlow, ONNX Runtime, PyTorch, NVIDIA TensorRT en meer. Deze kan worden gebruikt voor uw CPU- of GPU-workloads.

Er zijn voornamelijk twee benaderingen die u kunt gebruiken om Triton-modellen te gebruiken bij het implementeren ervan naar een online-eindpunt: implementatie zonder code of implementatie met volledige code (Bring Your Own Container).

  • Implementatie zonder code voor Triton-modellen is een eenvoudige manier om ze te implementeren, omdat u Triton-modellen alleen hoeft te implementeren.
  • Implementatie van volledige code (Bring Your Own Container) voor Triton-modellen is geavanceerder om ze te implementeren, omdat u volledige controle hebt over het aanpassen van de configuraties die beschikbaar zijn voor triton-deductieserver.

Voor beide opties voert de Triton-deductieserver deductie uit op basis van het Triton-model zoals gedefinieerd door NVIDIA. Ensemblemodellen kunnen bijvoorbeeld worden gebruikt voor geavanceerdere scenario's.

Triton wordt ondersteund in zowel beheerde online-eindpunten als Kubernetes Online-eindpunten.

In dit artikel leert u hoe u een model implementeert met behulp van implementatie zonder code voor Triton naar een beheerd online-eindpunt. Er wordt informatie gegeven over het gebruik van de CLI (opdrachtregel), Python SDK v2 en Azure Machine Learning-studio. Als u de configuratie van de Triton-deductieserver verder wilt aanpassen, raadpleegt u Een aangepaste container gebruiken om een model te implementeren en het BYOC-voorbeeld voor Triton (implementatiedefinitie en end-to-end script).

Notitie

Het gebruik van de NVIDIA Triton Inference Server-container is onderhevig aan de LICENTIEovereenkomst van NVIDIA AI Enterprise Software en kan gedurende 90 dagen worden gebruikt zonder een enterprise-productabonnement. Zie NVIDIA AI Enterprise op Azure Machine Learning voor meer informatie.

Vereisten

Voordat u de stappen in dit artikel volgt, moet u ervoor zorgen dat u over de volgende vereisten beschikt:

  • Een werkende Python 3.8-omgeving (of hoger).

  • U moet extra Python-pakketten hebben geïnstalleerd voor scoren en deze mogelijk installeren met de onderstaande code. Deze omvatten:

    • Numpy - Een bibliotheek voor matrix- en numerieke computing
    • Triton Inference Server-client : vereenvoudigt aanvragen naar de Triton-deductieserver
    • Pillow - Een bibliotheek voor afbeeldingsbewerkingen
    • Gevent - Een netwerkbibliotheek die wordt gebruikt bij het maken van verbinding met de Triton-server
pip install numpy
pip install tritonclient[http]
pip install pillow
pip install gevent
  • Toegang tot VM's uit de NCv3-serie voor uw Azure-abonnement.

    Belangrijk

    Mogelijk moet u een quotumverhoging aanvragen voor uw abonnement voordat u deze reeks virtuele machines kunt gebruiken. Zie NCv3-serie voor meer informatie.

NVIDIA Triton Inference Server vereist een specifieke structuur van de modelopslagplaats, waarbij er een map is voor elk model en submappen voor de modelversie. De inhoud van elke submap van de modelversie wordt bepaald door het type model en de vereisten van de back-end die het model ondersteunt. Alle structuur van de modelopslagplaats weergeven https://github.com/triton-inference-server/server/blob/main/docs/user_guide/model_repository.md#model-files

De informatie in dit document is gebaseerd op het gebruik van een model dat is opgeslagen in ONNX-indeling, dus de mapstructuur van de modelopslagplaats is <model-repository>/<model-name>/1/model.onnx. In het bijzonder voert dit model afbeeldingsidentificatie uit.

De informatie in dit artikel is gebaseerd op codevoorbeelden in de opslagplaats azureml-examples . Als u de opdrachten lokaal wilt uitvoeren zonder YAML en andere bestanden te hoeven kopiëren/plakken, kloont u de opslagplaats en wijzigt u vervolgens mappen in de cli map in de opslagplaats:

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

Als u de standaardinstellingen voor de Azure CLI nog niet hebt ingesteld, slaat u de standaardinstellingen op. Gebruik de volgende opdrachten om te voorkomen dat de waarden voor uw abonnement, werkruimte en resourcegroep meerdere keren worden doorgegeven. Vervang de volgende parameters door waarden voor uw specifieke configuratie:

  • Vervang <subscription> door de id van uw Azure-abonnement.
  • Vervang door <workspace> de naam van uw Azure Machine Learning-werkruimte.
  • Vervang door <resource-group> de Azure-resourcegroep die uw werkruimte bevat.
  • Vervang door <location> de Azure-regio die uw werkruimte bevat.

Tip

U kunt zien wat de huidige standaardwaarden zijn met behulp van de az configure -l opdracht.

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

De implementatieconfiguratie definiëren

VAN TOEPASSING OP:Azure CLI ml-extensie v2 (huidige)

In deze sectie wordt beschreven hoe u kunt implementeren naar een beheerd online-eindpunt met behulp van de Azure CLI met de Machine Learning-extensie (v2).

Belangrijk

Testen via lokale eindpunten wordt momenteel niet ondersteund voor triton-implementatie zonder code.

  1. Gebruik de volgende opdracht om een BASE_PATH omgevingsvariabele in te stellen om te voorkomen dat u typt in een pad voor meerdere opdrachten. Deze variabele verwijst naar de map waarin het model en de bijbehorende YAML-configuratiebestanden zich bevinden:

    BASE_PATH=endpoints/online/triton/single-model
    
  2. Gebruik de volgende opdracht om de naam in te stellen van het eindpunt dat wordt gemaakt. In dit voorbeeld wordt een willekeurige naam gemaakt voor het eindpunt:

    export ENDPOINT_NAME=triton-single-endpt-`echo $RANDOM`
    
  3. Maak een YAML-configuratiebestand voor uw eindpunt. In het volgende voorbeeld worden de naam en verificatiemodus van het eindpunt geconfigureerd. De opslagplaats die u in de volgende opdrachten hebt gebruikt, bevindt zich in /cli/endpoints/online/triton/single-model/create-managed-endpoint.yml de opslagplaats azureml-examples die u eerder hebt gekloond:

    create-managed-endpoint.yaml

    $schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
    name: my-endpoint
    auth_mode: aml_token
    
  4. Maak een YAML-configuratiebestand voor de implementatie. In het volgende voorbeeld wordt een implementatie met de naam blauw geconfigureerd voor het eindpunt dat in de vorige stap is gedefinieerd. De opslagplaats die u in de volgende opdrachten hebt gebruikt, bevindt zich in /cli/endpoints/online/triton/single-model/create-managed-deployment.yml de opslagplaats azureml-examples die u eerder hebt gekloond:

    Belangrijk

    Voor een juiste werking van Triton no-code-deployment (NCD) is instelling typetriton_model​ vereist, type: triton_model​. Zie HET YAML-schema van het CLI-model (v2) voor meer informatie.

    Deze implementatie maakt gebruik van een Standard_NC6s_v3 VM. Mogelijk moet u een quotumverhoging aanvragen voor uw abonnement voordat u deze VIRTUELE machine kunt gebruiken. Zie NCv3-serie voor meer informatie.

    $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
    

Implementeren op Azure

VAN TOEPASSING OP:Azure CLI ml-extensie v2 (huidige)

  1. Gebruik de volgende opdracht om een nieuw eindpunt te maken met behulp van de YAML-configuratie:

    az ml online-endpoint create -n $ENDPOINT_NAME -f $BASE_PATH/create-managed-endpoint.yaml
    
  2. Gebruik de volgende opdracht om de implementatie te maken met behulp van de YAML-configuratie:

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

Het eindpunt testen

VAN TOEPASSING OP:Azure CLI ml-extensie v2 (huidige)

Zodra de implementatie is voltooid, gebruikt u de volgende opdracht om een scoreaanvraag uit te voeren voor het geïmplementeerde eindpunt.

Tip

Het bestand /cli/endpoints/online/triton/single-model/triton_densenet_scoring.py in de opslagplaats azureml-examples wordt gebruikt voor het scoren. De afbeelding die aan het eindpunt wordt doorgegeven, moet vooraf worden verwerkt om te voldoen aan de grootte, het type en de indelingsvereisten en na verwerking om het voorspelde label weer te geven. De triton_densenet_scoring.py bibliotheek gebruikt de tritonclient.http bibliotheek om te communiceren met de Triton-deductieserver. Dit bestand wordt uitgevoerd aan de clientzijde.

  1. Gebruik de volgende opdracht om de score-URI voor eindpunten op te halen:

    scoring_uri=$(az ml online-endpoint show -n $ENDPOINT_NAME --query scoring_uri -o tsv)
    scoring_uri=${scoring_uri%/*}
    
  2. Gebruik de volgende opdracht om een verificatiesleutel op te halen:

    auth_token=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME --query accessToken -o tsv)
    
  3. Gebruik de volgende opdracht om gegevens te scoren met het eindpunt. De afbeelding van een peacock (https://aka.ms/peacock-pic) wordt verzonden naar het eindpunt:

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

    Het antwoord van het script is vergelijkbaar met de volgende tekst:

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

Het eindpunt en model verwijderen

VAN TOEPASSING OP:Azure CLI ml-extensie v2 (huidige)

  1. Wanneer u klaar bent met het eindpunt, gebruikt u de volgende opdracht om het te verwijderen:

    az ml online-endpoint delete -n $ENDPOINT_NAME --yes
    
  2. Gebruik de volgende opdracht om uw model te archiveren:

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

Volgende stappen

Lees voor meer informatie de volgende artikelen: