Triton Inference Server를 사용한 고성능 서비스 제공

적용 대상:Azure CLI ml 확장 v2(현재)Python SDK azure-ai-ml v2(현재)

온라인 엔드포인트를 사용하여 Azure Machine Learning에서 NVIDIA Triton Inference Server를 사용하는 방법을 알아봅니다.

Triton은 유추하는 데 최적화된 다중 프레임워크 오픈 소스 소프트웨어입니다. TensorFlow, ONNX Runtime, PyTorch, NVIDIA TensorRT 등과 같은 인기 있는 기계 학습 프레임워크를 지원합니다. CPU 또는 GPU 워크로드에 사용할 수 있습니다.

온라인 엔드포인트에 Triton 모델을 배포할 때 Triton 모델을 활용하기 위해 취할 수 있는 방식은 주로 코드 없음 배포 또는 전체 코드(자체 컨테이너 가져오기) 배포의 두 가지입니다.

  • Triton 모델에 대한 코드 없는 배포는 배포할 Triton 모델만 가져오면 되므로 배포하는 간단한 방법입니다.
  • Triton 모델에 대한 전체 코드 배포(자체 컨테이너 가져오기)는 Triton 유추 서버에 사용할 수 있는 구성을 사용자 지정하는 데 대한 모든 권한을 가지므로 모델을 배포하는 고급 방법입니다.

두 옵션 모두 Triton 유추 서버는 NVIDIA에서 정의한 Triton 모델을 기반으로 유추를 수행합니다. 예를 들어, 앙상블 모델은 고급 시나리오에 사용될 수 있습니다.

Triton은 관리형 온라인 엔드포인트와 Kubernetes 온라인 엔드포인트 모두에서 지원됩니다.

이 문서에서는 Triton용 코드 없는 배포를 사용하여 모델을 관리형 온라인 엔드포인트에 배포하는 방법을 알아봅니다. CLI(명령줄), Python SDK v2 및 Azure Machine Learning 스튜디오를 사용하는 방법에 대한 정보가 제공됩니다. Triton 유추 서버의 구성을 사용하여 직접 추가로 사용자 지정하려면 사용자 지정 컨테이너를 사용하여 모델 배포 및 Triton에 대한 BYOC 예(배포 정의엔드투엔드 스크립트).

참고 항목

NVIDIA Triton 유추 서버 컨테이너의 사용은 NVIDIA AI 엔터프라이즈 소프트웨어 사용권 계약으로 적용되며 엔터프라이즈 제품 구독 없이 90일 동안 사용할 수 있습니다. 자세한 내용은 Azure Machine Learning의 NVIDIA AI 엔터프라이즈를 참조하세요.

필수 조건

이 문서의 단계를 수행하기 전에 다음과 같은 필수 구성 요소가 있는지 확인합니다.

  • 작동하는 Python 3.8 이상 환경

  • 채점을 위해 추가 Python 패키지가 설치되어 있어야 하며 아래 코드로 설치할 수 있습니다. 다음이 포함됩니다.

    • Numpy - 배열 및 수치 계산 라이브러리
    • Triton Inference Server Client - Triton Inference Server에 대한 요청을 지원합니다.
    • Pillow - 이미지 작업을 위한 라이브러리
    • Gevent - Triton Server에 연결할 때 사용되는 네트워킹 라이브러리
pip install numpy
pip install tritonclient[http]
pip install pillow
pip install gevent
  • Azure 구독의 NCv3 시리즈 VM에 대한 액세스

    Important

    이 시리즈의 VM을 사용하려면 먼저 구독에 대한 할당량 증가를 요청해야 할 수 있습니다. 자세한 내용은 NCv3 시리즈를 참조하세요.

NVIDIA Triton Inference Server에는 각 모델에 대한 디렉터리와 모델 버전에 대한 하위 디렉터리가 있는 특정 모델 리포지토리 구조가 필요합니다. 각 모델 버전 하위 디렉터리의 콘텐츠는 모델의 유형과 모델을 지원하는 백 엔드의 요구 사항에 따라 결정됩니다. 다음 위치에서 모든 모델 리포지토리 구조를 확인합니다. https://github.com/triton-inference-server/server/blob/main/docs/user_guide/model_repository.md#model-files

이 문서의 정보는 ONNX 형식으로 저장된 모델의 사용을 기반으로 하므로 모델 리포지토리의 디렉터리 구조는 <model-repository>/<model-name>/1/model.onnx입니다. 특히 이 모델은 이미지 식별을 수행합니다.

이 문서의 정보는 azureml-examples 리포지토리에 포함된 코드 샘플을 기반으로 합니다. YAML 및 기타 파일 복사/붙여넣기를 수행할 필요 없이 명령을 로컬로 실행하려면 리포지토리를 복제한 다음, 디렉터리를 리포지토리의 cli 디렉터리로 변경합니다.

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

Azure CLI에 대한 기본값을 아직 설정하지 않은 경우 기본 설정을 저장합니다. 구독, 작업 영역 및 리소스 그룹에 대한 값을 여러 번 전달하지 않으려면 다음 명령을 사용합니다. 다음 매개 변수를 특정 구성에 대한 값으로 바꿉니다.

  • <subscription> 를 Azure 구독 ID로 바꿉니다.
  • <workspace>을(를) Azure Machine Learning 작업 영역 이름으로 바꿉니다.
  • <resource-group>을 작업 영역이 포함된 Azure 리소스 그룹으로 바꿉니다.
  • <location>을 작업 영역이 포함된 Azure 지역으로 바꿉니다.

현재 기본값은 az configure -l 명령을 사용하여 확인할 수 있습니다.

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

배포 구성 정의

적용 대상:Azure CLI ml 확장 v2(현재)

이 섹션에서는 Machine Learning 확장(v2)에서 Azure CLI를 사용하여 관리형 온라인 엔드포인트에 배포하는 방법을 보여 줍니다.

Important

Triton no-code-deployment의 경우 로컬 엔드포인트를 통한 테스트는 현재 지원되지 않습니다.

  1. 여러 명령에 대한 경로를 입력하지 않으려면 다음 명령을 사용하여 BASE_PATH 환경 변수를 설정합니다. 이 변수는 모델 및 관련 YAML 구성 파일이 있는 디렉터리를 가리킵니다.

    BASE_PATH=endpoints/online/triton/single-model
    
  2. 다음 명령을 사용하여 만들 엔드포인트의 이름을 설정합니다. 다음 예제에서는 엔드포인트에 대한 임의의 이름을 만듭니다.

    export ENDPOINT_NAME=triton-single-endpt-`echo $RANDOM`
    
  3. 엔드포인트에 대한 YAML 구성 파일을 만듭니다. 다음 예제에서는 엔드포인트의 이름과 인증 모드를 구성합니다. 다음 명령에 사용되는 항목은 이전에 복제한 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. 배포에 대한 YAML 구성 파일을 만듭니다. 다음 예제에서는 이전 단계에서 정의한 엔드포인트에 blue라는 배포를 구성합니다. 다음 명령에 사용되는 항목은 이전에 복제한 azureml-examples 리포지토리의 /cli/endpoints/online/triton/single-model/create-managed-deployment.yml에 있습니다.

    Important

    Triton NCD(코드 없는 배포)가 작동하려면 typetriton_model​으로 설정하는 type: triton_model​이 필요합니다. 자세한 내용은 CLI(v2) 모델 YAML 스키마를 참조하세요.

    이 배포에서는 Standard_NC6s_v3 VM을 사용합니다. 이 VM을 사용하려면 먼저 구독에 대한 할당량 증가를 요청해야 할 수 있습니다. 자세한 내용은 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
    

Azure에 배포

적용 대상:Azure CLI ml 확장 v2(현재)

  1. YAML 구성을 사용하여 새 엔드포인트를 만들려면 다음 명령을 사용합니다.

    az ml online-endpoint create -n $ENDPOINT_NAME -f $BASE_PATH/create-managed-endpoint.yaml
    
  2. YAML 구성을 사용하여 배포를 만들려면 다음 명령을 사용합니다.

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

엔드포인트 테스트

적용 대상:Azure CLI ml 확장 v2(현재)

배포가 완료되면 다음 명령을 사용하여 배포된 엔드포인트에 대한 채점을 요청합니다.

azureml-examples 리포지토리의 /cli/endpoints/online/triton/single-model/triton_densenet_scoring.py 파일은 채점에 사용됩니다. 엔드포인트에 전달된 이미지에는 크기, 유형 및 형식 요구 사항을 충족하기 위한 사전 처리와 예측된 레이블을 표시하기 위한 사후 처리가 필요합니다. triton_densenet_scoring.pytritonclient.http 라이브러리를 사용하여 Triton Inference Server와 통신합니다. 이 파일은 클라이언트 쪽에서 실행됩니다.

  1. 엔드포인트 채점 URI를 가져오려면 다음 명령을 사용합니다.

    scoring_uri=$(az ml online-endpoint show -n $ENDPOINT_NAME --query scoring_uri -o tsv)
    scoring_uri=${scoring_uri%/*}
    
  2. 인증 키를 가져오려면 다음 명령을 사용합니다.

    auth_token=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME --query accessToken -o tsv)
    
  3. 엔드포인트를 사용하여 데이터의 점수를 매기려면 다음 명령을 사용합니다. 공작(https://aka.ms/peacock-pic) 이미지를 엔드포인트에 제출합니다.

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

    스크립트의 응답은 다음 텍스트와 비슷합니다.

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

엔드포인트 및 모델 삭제

적용 대상:Azure CLI ml 확장 v2(현재)

  1. 엔드포인트 사용이 완료되면 다음 명령을 사용하여 엔드포인트를 삭제합니다.

    az ml online-endpoint delete -n $ENDPOINT_NAME --yes
    
  2. 다음 명령을 사용하여 모델을 보관합니다.

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

다음 단계

자세한 내용은 다음 문서를 검토하세요.