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 엔터프라이즈를 참조하세요.
필수 조건
이 문서의 단계를 수행하기 전에 다음과 같은 필수 구성 요소가 있는지 확인합니다.
Azure CLI 및 Azure CLI에 대한
ml
확장. 자세한 내용은 CLI(v2) 설치, 설정 및 사용을 참조하세요.Important
이 문서의 CLI 예제에서는 Bash(또는 호환) 셸을 사용한다고 가정합니다. 예를 들어 Linux 시스템 또는 Linux용 Windows 하위 시스템에서 이러한 예제를 사용합니다.
Azure Machine Learning 작업 영역 없는 경우 CLI(v2) 설치, 설정 및 사용의 단계를 사용하여 새로 만듭니다.
작동하는 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의 경우 로컬 엔드포인트를 통한 테스트는 현재 지원되지 않습니다.
여러 명령에 대한 경로를 입력하지 않으려면 다음 명령을 사용하여
BASE_PATH
환경 변수를 설정합니다. 이 변수는 모델 및 관련 YAML 구성 파일이 있는 디렉터리를 가리킵니다.BASE_PATH=endpoints/online/triton/single-model
다음 명령을 사용하여 만들 엔드포인트의 이름을 설정합니다. 다음 예제에서는 엔드포인트에 대한 임의의 이름을 만듭니다.
export ENDPOINT_NAME=triton-single-endpt-`echo $RANDOM`
엔드포인트에 대한 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
배포에 대한 YAML 구성 파일을 만듭니다. 다음 예제에서는 이전 단계에서 정의한 엔드포인트에 blue라는 배포를 구성합니다. 다음 명령에 사용되는 항목은 이전에 복제한 azureml-examples 리포지토리의
/cli/endpoints/online/triton/single-model/create-managed-deployment.yml
에 있습니다.Important
Triton NCD(코드 없는 배포)가 작동하려면
type
을triton_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(현재)
YAML 구성을 사용하여 새 엔드포인트를 만들려면 다음 명령을 사용합니다.
az ml online-endpoint create -n $ENDPOINT_NAME -f $BASE_PATH/create-managed-endpoint.yaml
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.py
는 tritonclient.http
라이브러리를 사용하여 Triton Inference Server와 통신합니다. 이 파일은 클라이언트 쪽에서 실행됩니다.
엔드포인트 채점 URI를 가져오려면 다음 명령을 사용합니다.
scoring_uri=$(az ml online-endpoint show -n $ENDPOINT_NAME --query scoring_uri -o tsv) scoring_uri=${scoring_uri%/*}
인증 키를 가져오려면 다음 명령을 사용합니다.
auth_token=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME --query accessToken -o tsv)
엔드포인트를 사용하여 데이터의 점수를 매기려면 다음 명령을 사용합니다. 공작(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(현재)
엔드포인트 사용이 완료되면 다음 명령을 사용하여 엔드포인트를 삭제합니다.
az ml online-endpoint delete -n $ENDPOINT_NAME --yes
다음 명령을 사용하여 모델을 보관합니다.
az ml model archive --name $MODEL_NAME --version $MODEL_VERSION
다음 단계
자세한 내용은 다음 문서를 검토하세요.