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)

Dowiedz się, jak używać serwera NVIDIA Triton Inference Server w usłudze Azure Machine Edukacja z punktami końcowymi online.

Triton to wieloplatplatowe oprogramowanie typu open source zoptymalizowane pod kątem wnioskowania. Obsługuje ona popularne platformy uczenia maszynowego, takie jak TensorFlow, ONNX Runtime, PyTorch, NVIDIA TensorRT i inne. Może być używany na potrzeby obciążeń procesora CPU lub procesora GPU.

Istnieją głównie dwa podejścia, które można wykorzystać podczas wdrażania modeli Triton w punkcie końcowym 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 (Bring your own container) dla modeli Triton jest bardziej zaawansowanym sposobem ich wdrażania, ponieważ masz pełną kontrolę nad dostosowywaniem konfiguracji dostępnych dla serwera wnioskowania Triton.

W przypadku obu opcji serwer wnioskowania Triton będzie wykonywać 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 tritona w zarządzanym punkcie końcowym online. Informacje są udostępniane przy użyciu interfejsu wiersza polecenia (wiersza polecenia), zestawu Python SDK w wersji 2 i usługi Azure Machine Edukacja Studio. Jeśli chcesz dostosować dalej bezpośrednio przy użyciu konfiguracji serwera wnioskowania Triton, zapoznaj się z tematem Używanie niestandardowego kontenera do wdrażania modelu i przykładu BYOC dla tritonu (definicja wdrożenia i skrypt end-to-end).

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

Wymagania wstępne

Przed wykonaniem kroków opisanych w tym artykule upewnij się, że masz następujące 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 i zainstalować je przy użyciu poniższego kodu. To na przykład:

    • Numpy — tablica i biblioteka obliczeniowa liczbowa
    • Klient serwera wnioskowania Triton — ułatwia żądania do serwera wnioskowania Triton
    • Pillow — biblioteka do obsługi obrazów
    • Gevent — biblioteka sieci używana podczas 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 wyświetlić całą strukturę repozytorium modeli https://github.com/triton-inference-server/server/blob/main/docs/user_guide/model_repository.md#model-files

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 Edukacja.
  • 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 w wersji 2 (bieżąca)

W tej sekcji przedstawiono sposób wdrażania w zarządzanym punkcie końcowym online przy użyciu interfejsu wiersza polecenia platformy Azure z rozszerzeniem machine Edukacja (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. Element używany w poniższych poleceniach znajduje się /cli/endpoints/online/triton/single-model/create-managed-endpoint.yml w sklonowanym wcześniej repozytorium azureml-examples:

    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. Poniższy przykład umożliwia skonfigurowanie wdrożenia o nazwie blue do punktu końcowego zdefiniowanego w poprzednim kroku. Element używany w poniższych poleceniach znajduje się /cli/endpoints/online/triton/single-model/create-managed-deployment.yml w sklonowanym wcześniej repozytorium azureml-examples:

    Ważne

    Aby wdrożenie triton no-code-deployment (NCD) działało, wymagane type: triton_model​jest ustawienie .typetriton_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. Może być konieczne zażądanie zwiększenia limitu przydziału dla subskrypcji, zanim będzie można użyć tej maszyny wirtualnej. 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_NC6s_v3
    

Wdróż na platformie Azure

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

  1. Aby utworzyć nowy 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 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. Biblioteka triton_densenet_scoring.py używa biblioteki tritonclient.http 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 (https://aka.ms/peacock-pic) 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ącego tekstu:

    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 w wersji 2 (bieżąca)

  1. Po zakończeniu pracy 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 $MODEL_NAME --version $MODEL_VERSION
    

Następne kroki

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