Udostępnij przez


Obsługa wysokiej wydajności za pomocą serwera wnioskowania Triton

DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure w wersji 2 (current)Zestaw PYTHON SDK azure-ai-ml v2 (bieżąca)

W tym artykule opisano sposób używania serwera wnioskowania NVIDIA Triton w usłudze Azure Machine Learning z punktami końcowymi online.

Triton to wieloramowe oprogramowanie open source zoptymalizowane do wnioskowania. Obsługuje ona popularne struktury uczenia maszynowego, takie jak TensorFlow, ONNX Runtime, PyTorch i NVIDIA TensorRT. Można go używać na potrzeby obciążeń procesora CPU lub procesora GPU.

Istnieją dwa główne podejścia, które można wykonać, aby użyć modeli Triton podczas wdrażania ich w punktach końcowych online: wdrożenie bez kodu lub wdrożenie pełnego kodu (Bring Your Own Container).

  • Wdrożenie bez kodu dla modeli Triton jest prostym sposobem ich wdrożenia, ponieważ wystarczy wdrożyć tylko modele Triton.
  • Wdrożenie pełnego kodu dla modeli Triton to bardziej zaawansowany sposób ich wdrażania, ponieważ masz pełną kontrolę nad dostosowywaniem konfiguracji dostępnych dla serwera wnioskowania Triton.

W przypadku obu opcji serwer Triton Inference Server wykonuje wnioskowanie na podstawie modelu Triton zdefiniowanego przez firmę NVIDIA. Na przykład modele grupowe mogą być używane w bardziej zaawansowanych scenariuszach.

Triton jest obsługiwany zarówno w zarządzanych punktach końcowych online, jak i w punktach końcowych online platformy Kubernetes.

W tym artykule dowiesz się, jak wdrożyć model przy użyciu wdrożenia bez kodu dla Triton do zarządzanego punktu końcowego online. Informacje dotyczące korzystania z interfejsu wiersza polecenia platformy Azure, zestawu Python SDK w wersji 2 i usługi Azure Machine Learning Studio. Jeśli chcesz dalsze dostosowywanie bezpośrednio przy użyciu konfiguracji serwera Triton Inference Server, zobacz Używanie niestandardowego kontenera do wdrażania modelu i przykład BYOC dla serwera Triton (definicja wdrożenia i kompleksowy skrypt).

Uwaga

Korzystanie z kontenera serwera NVIDIA Triton Inference Server podlega umowie licencyjnej NVIDIA AI Enterprise Software i może być używane przez 90 dni bez subskrypcji produktu enterprise. Aby uzyskać więcej informacji, zobacz NVIDIA AI Enterprise w usłudze Azure Machine Learning.

Wymagania wstępne

  • Działające środowisko języka Python w wersji 3.8 lub nowszej.

  • Aby oceniać, musisz mieć zainstalowane dodatkowe pakiety języka Python. Można je zainstalować przy użyciu następującego kodu. To na przykład:

    • Numpy. Biblioteka do obliczeń numerycznych i tablic.
    • Klient serwera wnioskowania Triton. Ułatwia żądania do serwera wnioskowania Triton.
    • Poduszka. Biblioteka operacji na obrazach.
    • Gevent. Biblioteka sieci używana do nawiązywania połączenia z serwerem Triton.
    pip install numpy
    pip install tritonclient[http]
    pip install pillow
    pip install gevent
    
  • Dostęp do maszyn wirtualnych serii NCv3 dla subskrypcji platformy Azure.

    Ważne

    Może być konieczne zażądanie zwiększenia limitu przydziału dla subskrypcji, zanim będzie można użyć tej serii maszyn wirtualnych. Aby uzyskać więcej informacji, zobacz seria NCv3.

  • Serwer wnioskowania NVIDIA Triton wymaga określonej struktury repozytorium modeli, w której istnieje katalog dla każdego modelu i podkatalogów dla wersji modelu. Zawartość każdego podkatalogu wersji modelu jest określana przez typ modelu i wymagania zaplecza obsługującego model. Aby uzyskać informacje o strukturze wszystkich modeli, zobacz Pliki modelu.

    Informacje przedstawione w tym dokumencie są oparte na użyciu modelu przechowywanego w formacie ONNX, więc struktura katalogów repozytorium modeli to <model-repository>/<model-name>/1/model.onnx. W szczególności ten model wykonuje identyfikację obrazu.

Informacje przedstawione w tym artykule są oparte na przykładach kodu zawartych w repozytorium azureml-examples . Aby uruchomić polecenia lokalnie bez konieczności kopiowania/wklejania kodu YAML i innych plików, sklonuj repozytorium, a następnie zmień katalogi na cli katalog w repozytorium:

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

Jeśli nie ustawiono jeszcze ustawień domyślnych dla interfejsu wiersza polecenia platformy Azure, zapisz ustawienia domyślne. Aby uniknąć wielokrotnego przekazywania wartości dla subskrypcji, obszaru roboczego i grupy zasobów, użyj następujących poleceń. Zastąp następujące parametry wartościami dla określonej konfiguracji:

  • Zamień wartość <subscription> na identyfikator swojej subskrypcji platformy Azure.
  • Zastąp <workspace> ciąg nazwą obszaru roboczego usługi Azure Machine Learning.
  • Zastąp element <resource-group> grupą zasobów platformy Azure zawierającą obszar roboczy.
  • Zastąp element <location> regionem platformy Azure zawierającym obszar roboczy.

Napiwek

Bieżące wartości domyślne można zobaczyć za pomocą az configure -l polecenia .

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

Definiowanie konfiguracji wdrożenia

DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure ml w wersji 2 (bieżąca)

W tej sekcji opisano sposób wdrażania w zarządzanym punkcie końcowym online przy użyciu Azure CLI z rozszerzeniem Machine Learning (wersja 2).

Ważne

W przypadku wdrożenia rozwiązania Triton no-code testowanie za pośrednictwem lokalnych punktów końcowych nie jest obecnie obsługiwane.

  1. Aby uniknąć wpisywania w ścieżce dla wielu poleceń, użyj następującego polecenia, aby ustawić zmienną środowiskową BASE_PATH . Ta zmienna wskazuje katalog, w którym znajduje się model i skojarzone pliki konfiguracji YAML:

    BASE_PATH=endpoints/online/triton/single-model
    
  2. Użyj następującego polecenia, aby ustawić nazwę punktu końcowego, który zostanie utworzony. W tym przykładzie dla punktu końcowego jest tworzona losowa nazwa:

    export ENDPOINT_NAME=triton-single-endpt-`echo $RANDOM`
    
  3. Utwórz plik konfiguracji YAML dla punktu końcowego. W poniższym przykładzie skonfigurowana jest nazwa i tryb uwierzytelniania punktu końcowego. Plik używany w następujących poleceniach znajduje się w sklonowanym wcześniej repozytorium azureml-examples: /cli/endpoints/online/triton/single-model/create-managed-endpoint.yml

    create-managed-endpoint.yaml

    $schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
    name: my-endpoint
    auth_mode: aml_token
    
  4. Utwórz plik konfiguracji YAML dla wdrożenia. W poniższym przykładzie skonfigurowano wdrożenie o nazwie blue do punktu końcowego zdefiniowanego w poprzednim kroku. Plik używany w poniższych poleceniach znajduje się pod /cli/endpoints/online/triton/single-model/create-managed-deployment.yml w repozytorium azureml-examples, które sklonowałeś wcześniej.

    Ważne

    Aby wdrożenie Triton no-code-deployment działało, należy ustawić type na triton_model​: type: triton_model​. Aby uzyskać więcej informacji, zobacz Schemat YAML modelu interfejsu wiersza polecenia (wersja 2).

    To wdrożenie używa maszyny wirtualnej Standard_NC6s_v3. Aby można było użyć tej maszyny wirtualnej, może być konieczne zażądanie zwiększenia limitu przydziału dla subskrypcji. Aby uzyskać więcej informacji, zobacz seria NCv3.

    $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_NC4AS_T4_V3
    

Wdróż na platformie Azure

DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure ml w wersji 2 (bieżąca)

  1. Aby utworzyć punkt końcowy przy użyciu konfiguracji YAML, użyj następującego polecenia:

    az ml online-endpoint create -n $ENDPOINT_NAME -f $BASE_PATH/create-managed-endpoint.yaml
    
  2. Aby utworzyć wdrożenie przy użyciu konfiguracji YAML, użyj następującego polecenia:

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

Testowanie punktu końcowego

DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure ml w wersji 2 (bieżąca)

Po zakończeniu wdrażania użyj następującego polecenia, aby wysłać żądanie oceniania do wdrożonego punktu końcowego.

Napiwek

Plik /cli/endpoints/online/triton/single-model/triton_densenet_scoring.py w repozytorium azureml-examples jest używany do oceniania. Obraz przekazany do punktu końcowego wymaga wstępnego przetwarzania w celu spełnienia wymagań dotyczących rozmiaru, typu i formatu oraz przetwarzania końcowego w celu wyświetlenia przewidywanej etykiety. Plik triton_densenet_scoring.py używa tritonclient.http biblioteki do komunikowania się z serwerem wnioskowania Triton. Ten plik jest uruchamiany po stronie klienta.

  1. Aby uzyskać identyfikator URI oceniania punktu końcowego, użyj następującego polecenia:

    scoring_uri=$(az ml online-endpoint show -n $ENDPOINT_NAME --query scoring_uri -o tsv)
    scoring_uri=${scoring_uri%/*}
    
  2. Aby uzyskać klucz uwierzytelniania, użyj następującego polecenia:

    auth_token=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME --query accessToken -o tsv)
    
  3. Aby ocenić dane za pomocą punktu końcowego, użyj następującego polecenia. Przesyła obraz pawia do punktu końcowego:

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

    Odpowiedź skryptu jest podobna do następującej odpowiedzi:

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

Usuwanie punktu końcowego i modelu

DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure ml w wersji 2 (bieżąca)

  1. Gdy skończysz z punktem końcowym, użyj następującego polecenia, aby go usunąć:

    az ml online-endpoint delete -n $ENDPOINT_NAME --yes
    
  2. Użyj następującego polecenia, aby zarchiwizować model:

    az ml model archive --name sample-densenet-onnx-model --version 1
    

Następne kroki

Aby dowiedzieć się więcej, zapoznaj się z następującymi artykułami: