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 Learning 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 Learning 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 Learning.
Wymagania wstępne
Przed wykonaniem kroków opisanych w tym artykule upewnij się, że masz następujące wymagania wstępne:
Interfejs wiersza polecenia platformy
ml
Azure i rozszerzenie interfejsu wiersza polecenia platformy Azure. Aby uzyskać więcej informacji, zobacz Instalowanie, konfigurowanie i używanie interfejsu wiersza polecenia (wersja 2).Ważne
W przykładach interfejsu wiersza polecenia w tym artykule założono, że używasz powłoki Bash (lub zgodnej). Na przykład z systemu Linux lub Podsystem Windows dla systemu Linux.
Obszar roboczy usługi Azure Machine Learning. Jeśli go nie masz, wykonaj kroki opisane w temacie Instalowanie, konfigurowanie i używanie interfejsu wiersza polecenia (wersja 2), aby go utworzyć.
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 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 przedstawiono sposób wdrażania w zarządzanym punkcie końcowym online przy użyciu interfejsu wiersza polecenia platformy Azure z rozszerzeniem Usługi 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.
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
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`
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
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 .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. 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 ml w wersji 2 (bieżąca)
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
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. Biblioteka triton_densenet_scoring.py
używa biblioteki tritonclient.http
do komunikowania się z serwerem wnioskowania Triton. Ten plik jest uruchamiany po stronie klienta.
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%/*}
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)
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 ml w wersji 2 (bieżąca)
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
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:
- Wdrażanie modeli za pomocą interfejsu REST
- Tworzenie i używanie zarządzanych punktów końcowych online w programie Studio
- Bezpieczne wdrażanie punktów końcowych online
- Jak automatycznie skalować zarządzane punkty końcowe online
- Wyświetlanie kosztów zarządzanego punktu końcowego online usługi Azure Machine Learning
- Uzyskiwanie dostępu do zasobów platformy Azure przy użyciu zarządzanego punktu końcowego online i tożsamości zarządzanej
- Rozwiązywanie problemów z wdrażaniem zarządzanych punktów końcowych online