Triton 추론 서버를 사용한 모델 배포 - Amazon SageMaker

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Triton 추론 서버를 사용한 모델 배포

Triton Inference Server는 AI 추론 작업을 간소화하는 오픈 소스 방식의 추론 서빙 소프트웨어입니다. Triton을 사용하면 TensorRT ,,, , TensorFlow PyTorch ONNXOpen , VINOPython, RAPIDS FIL등을 포함하여 여러 딥 러닝 및 기계 학습 프레임워크로 구축된 모든 모델을 배포할 수 있습니다.

SageMaker Triton 컨테이너는 SageMaker 호스팅 플랫폼에 Triton 추론 서버를 배포하여 프로덕션 환경에서 훈련된 모델을 제공하는 데 도움이 됩니다. 가 SageMaker 작동하는 다양한 모드를 지원합니다. 에서 사용할 수 있는 Triton 추론 서버 컨테이너 목록은 Triton 추론 컨테이너(SM 지원만 해당)를 SageMaker참조하세요. NVIDIA

노트북 예제의 경우 end-to-end amazon-sagemaker-examples 리포지토리를 살펴보는 것이 좋습니다.

호스팅 모드

다음 SageMaker 호스팅 모드는 Triton 컨테이너에서 지원됩니다.

  • 단일 모델 엔드포인트

    • 의 SageMaker기본 작동 모드입니다. 이 모드에서 Triton 컨테이너는 단일 모델 또는 단일 앙상블 모델을 로드할 수 있습니다.

    • 모델의 이름은 CreateModel SageMaker API 호출의 일부인 컨테이너 환경의 속성으로 전달되어야 합니다. 모델 이름을 전달하는 데 사용되는 환경 변수는 SAGEMAKER_TRITON_DEFAULT_MODEL_NAME입니다.

  • 앙상블이 적용된 단일 모델 엔드포인트

    • Triton Inference Server는 파이프라인 또는 모델의 DAG (디렉션된 비순환 그래프)인 앙상블을 지원합니다. 앙상블은 기술적으로 여러 모델로 구성되지만 기본 단일 모델 엔드포인트 모드에서 SageMaker 는 앙상블을 로드할 기본 모델(파이프라인을 나타내는 메타 모델)로 적절하게 취급할 수 있으며 이후 연결된 모델을 로드할 수 있습니다.

    • 모델을 로드하려면 해당 앙상블 적합의 모델 이름을 사용해야 합니다. CreateModel SageMaker API 호출의 일부인 컨테이너 환경의 속성으로 전달되어야 합니다. 모델 이름을 전달하는 데 사용되는 환경 변수는 SAGEMAKER_TRITON_DEFAULT_MODEL_NAME입니다.

  • 다중 모델 엔드포인트

    • 이 모드에서는 단일 엔드포인트에서 여러 모델을 제공할 수 SageMaker 있습니다. 환경 변수를 CreateModel SageMaker API 호출의 일부인 컨테이너 환경의 속성‘MultiModel’: true으로 지정하여 이 모드를 사용할 수 있습니다.

    • 기본 설정은 인스턴스 시작 시 아무 모델도 로드되지 않는 것입니다. 특정 모델에 대해 추론 요청을 실행하려면 해당 모델의 *.tar.gz 파일을 InvokeEndpoint SageMaker API 호출 TargetModel 속성에 대한 인수로 지정합니다.

  • 앙상블이 적용된 다중 모델 엔드포인트

    • 이 모드에서는 다중 모델 엔드포인트에 대해 설명된 대로 SageMaker 작동합니다. 그러나 SageMaker Triton 컨테이너는 여러 앙상블 모델을 로드할 수 있습니다. 즉, 여러 모델 파이프라인이 동일한 인스턴스에서 실행될 수 있습니다. 는 모든 앙상블을 하나의 모델로 SageMaker 취급하고, 해당 *.tar.gz 아카이브를 로 지정하여 각 모델의 적절한 앙상블을 호출할 수 있습니다TargetModel.

    • 메모리 LOADUNLOAD가 동적으로 이루어지는 동안 메모리를 더 잘 관리하려면, 앙상블 크기를 되도록 작게 유지하는 것이 좋습니다.

추론 페이로드 유형

Triton은 네트워크를 통한 추론 페이로드 전송 시 jsonbinary+json(또는 바이너리로 인코딩된 json) 두 가지 방법을 지원합니다. 두 경우 모두 JSON페이로드에는 데이터 유형, 모양 및 실제 추론 요청 텐서가 포함됩니다. 요청 텐서는 반드시 바이너리 텐서여야 합니다.

binary+json 형식을 사용할 경우, Triton이 바이너리 페이로드를 올바르게 파싱할 수 있도록 헤더에 요청 메타데이터의 길이를 지정해두어야 합니다. SageMaker Triton 컨테이너에서는 사용자 지정 Content-Type 헤더인 를 사용하여 이 작업을 수행합니다application/vnd.sagemaker-triton.binary+json;json-header-size={}. 이는 에서 사용자 지정 Inference-Header-Content-Length 헤더가 허용되지 않기 때문에 독립 실행형 Triton 추론 서버에서 헤더를 사용하는 것과 다릅니다 SageMaker.

config.pbtxt를 사용하여 모델 구성 설정하기

의 Triton 추론 서버의 경우 SageMaker각 모델에는 모델에 대해 최소한 다음 구성을 지정하는 config.pbtxt 파일이 포함되어야 합니다.

  • name: 외부에서 실행되는 모델의 경우 선택 사항이지만 항상 의 Triton에서 실행할 모델의 이름을 제공하는 SageMaker것이 좋습니다 SageMaker.

  • platform 및/또는 backend: 모델 유형을 지정하려면 백엔드 설정이 필수적입니다. 일부 백엔드에는 tensorflow_savedmodel 또는 tensorflow_graphdef와 같은 추가적인 분류가 적용됩니다. 이러한 옵션은 backend 키뿐만 아니라 platform 키의 일부로서도 지정될 수 있습니다. 가장 일반적인 백엔드는 tensorrt, onnxruntime, tensorflow, pytorch, python, dali, filopenvino입니다.

  • input: name, data_typedims(모양)를 입력의 세 가지 속성으로 지정합니다.

  • output: name, data_typedims(모양)를 출력의 세 가지 속성으로 지정합니다.

  • max_batch_size: Triton이 모델에 사용하게 되어 있는 최대 배치 크기를 나타내는 1보다 크거나 같은 값으로 배치 크기를 설정합니다.

구성에 대한 자세한 내용은 Triton의 GitHub 리포지토리를 config.pbtxt참조하세요. Triton은 모델의 세부적 동작을 조정할 수 있는 몇 가지 구성을 제공합니다. 가장 일반적이고 중요한 구성 옵션은 다음과 같습니다.

  • instance_groups: 인스턴스 그룹은 특정 모델의 숫자와 위치 값을 지정할 수 있도록 해줍니다. 여기에는 count, kindgpus(kindKIND_GPU일 경우 사용됨) 속성이 포함됩니다. count 속성은 작업자 수와 동일한 값입니다. 일반적인 모델 서빙의 경우, 모든 작업자는 각자의 모델 사본을 가지게 됩니다. 마찬가지로, Triton에서는 count 값이 디바이스당 모델 사본 수를 지정합니다. 예를 들어 instance_group 유형이 인 경우 KIND_CPUCPU에는 모델 복사본 count 수가 있습니다.

    참고

    GPU 인스턴스에서 instance_group 구성은 GPU 디바이스별로 적용됩니다. 예를 들어 모델을 로드해야 하는 GPU 디바이스를 명시적으로 지정하지 않는 한 모델 복사본 count 수는 각 GPU 디바이스에 배치됩니다.

  • dynamic_batchingsequence_batching: 동적 일괄 처리 방식은 상태 비저장 모델에서 사용되고, 시퀀스 일괄 처리 방식은 상태 저장 모델(요청을 매번 동일한 모델 인스턴스로 라우팅하려는 경우)에서 사용됩니다. 일괄 처리 스케줄러는 모델별 대기열을 활성화하므로, 일괄 처리의 구성에 따라 처리량을 늘리는 것이 가능해집니다.

  • ensemble: 앙상블 모델은 하나 이상의 모델로 구성된 일종의 파이프라인으로, 해당 모델들 간의 입력 및 출력 텐서 연결 상태를 나타냅니다. 이는 platform 값을 ensemble로 지정함으로써 구성 가능합니다. 앙상블 구성은 해당 모델 파이프라인의 표현일 뿐입니다. 에서 앙상블의 SageMaker모든 모델은 앙상블 모델의 종속 모델로 취급되며 와 같은 SageMaker 지표에 대한 단일 모델로 계산됩니다LoadedModelCount.

Amazon에 기본 Triton 지표 게시 CloudWatch

NVIDIA Triton 추론 컨테이너는 다양한 모델에 대해 포트 8002(구성 가능)의 지표GPUs를 노출하며 Triton 추론 서버에서 사용됩니다. 사용 가능한 기본 지표에 대한 자세한 내용은 Triton 추론 서버 지표 GitHub 페이지를 참조하세요. 이러한 지표는 Prometheus 형식이며, 이는 Prometheus 스크레이퍼 구성을 사용하여 스크랩할 수 있습니다.

버전 v23.07부터 SageMaker Triton 컨테이너는 몇 가지 환경 변수를 지정 CloudWatch 하여 이러한 지표를 Amazon에 게시할 수 있도록 지원합니다. Prometheus 지표를 스크레이프하기 위해 SageMaker Triton 컨테이너는 Amazon CloudWatch 에이전트를 활용합니다.

지표 수집을 위해 사용자가 지정하도록 되어 있는 필수 환경 변수는 다음과 같습니다.

환경 변수 설명 예시 값

SAGEMAKER_TRITON_ALLOW_METRICS

Triton이 자체 Prometheus 엔드포인트에 지표를 게시할 수 있도록 하려면 이 옵션을 지정합니다.

"true"

SAGEMAKER_TRITON_PUBLISH_METRICS_TO_CLOUDWATCH

Amazon 에 지표를 게시하는 데 필요한 사전 확인을 시작하려면 이 옵션을 지정합니다 CloudWatch.

"true"

SAGEMAKER_TRITON_CLOUDWATCH_LOG_GROUP

지표가 기록될 대상 로그 그룹을 가리키려면 이 옵션을 지정합니다.

“/aws/SageMaker/Endpoints/TritonMetrics/SageMakerTwoEnsemblesTest”

SAGEMAKER_TRITON_CLOUDWATCH_METRIC_NAMESPACE

확인하고자 하는 지표 네임스페이스를 가리키고 지표를 플로팅하려면 이 옵션을 지정합니다.

“/aws/SageMaker/Endpoints/TritonMetrics/SageMakerTwoEnsemblesPublicTest”

SAGEMAKER_TRITON_METRICS_PORT

이 포트를 8002 또는 다른 포트로 지정합니다. SageMaker 가 지정된 포트를 차단하지 않은 경우 해당 포트가 사용됩니다. 그 밖의 경우, 차단되지 않은 다른 포트가 자동으로 선택됩니다.

"8002"

에서 Triton으로 지표를 게시할 때는 다음 제한 SageMaker사항에 유의하세요.

  • C-API 및 Python 백엔드(v23.05 이상)를 통해 사용자 지정 지표를 생성할 수 있지만 현재 Amazon 에 게시할 수 없습니다 CloudWatch.

  • SageMaker 다중 모델 엔드포인트(MME) 모드에서 Triton은 각 모델(앙상블 모델 제외)이 자체 모델 리포지토리에 있는 것처럼 취급되기 때문에 모델 이름 조정을 활성화해야 하는 환경에서 실행됩니다. 현재는 이로 인해 지표 사용이 제한됩니다. 모델 네임스페이스가 활성화되어 있다면, Triton은 서로 다른 앙상블에 속하는 동일한 이름을 가진 두 모델 간의 지표를 따로 구분하지 않습니다. 해결 방법은, 배포되는 모든 모델에 고유한 이름을 개별적으로 지정하면 됩니다. 이렇게 하면 에서 지표를 더 쉽게 조회할 수 있습니다 CloudWatch.

환경 변수

다음 표에는 에서 Triton에 지원되는 환경 변수가 나열되어 있습니다 SageMaker.

환경 변수 설명 형식 가능한 값

SAGEMAKER_MULTI_MODEL

Triton이 SageMaker 다중 모델 엔드포인트 모드에서 작동하도록 허용합니다.

true, false

SAGEMAKER_TRITON_DEFAULT_MODEL_NAME

SageMaker 단일 모델(기본값) 모드에서 로드할 모델을 지정합니다. 앙상블 모드인 경우, 앙상블 적합의 이름을 지정합니다.

String

<model_name> config.pbtxt에 지정된 대로

SAGEMAKER_TRITON_PING_MODE

'ready' 는 SageMaker의 단일 모델 모드의 기본 모드이고 'live'는 SageMaker의 다중 모델 엔드포인트 모드의 기본 모드입니다.

String

ready, live

SAGEMAKER_TRITON_DISABLE_MODEL_NAMESPACING

SageMaker Triton 컨테이너에서는 true 기본적으로 로 설정됩니다.

true, false

SAGEMAKER_BIND_TO_PORT

에 있는 동안 기본 포트 SageMaker는 8080입니다. 다중 컨테이너 시나리오에서는 다른 포트로의 사용자 지정도 가능합니다.

String

<port_number>

SAGEMAKER_SAFE_PORT_RANGE

멀티컨테이너 모드를 사용할 때 SageMaker 플랫폼에 의해 설정됩니다.

String

<port_1><port_2>

SAGEMAKER_TRITON_ALLOW_GRPC

SageMaker 는 GRPC 현재 를 지원하지 않지만 사용자 지정 역방향 프록시 앞에 Triton을 사용하는 경우 를 활성화하도록 선택할 수 있습니다GRPC.

true, false

SAGEMAKER_TRITON_GRPC_PORT

의 기본 포트GRPC는 8001이지만 변경할 수 있습니다.

String

<port_number>

SAGEMAKER_TRITON_THREAD_COUNT

기본 HTTP 요청 핸들러 스레드 수를 설정할 수 있습니다.

String

<number>

SAGEMAKER_TRITON_LOG_VERBOSE

true 기본적으로 에서는 이지만 SageMaker이 옵션을 선택적으로 끌 수 있습니다.

true, false

SAGEMAKER_TRITON_LOG_INFO

false 기본적으로 에 있습니다 SageMaker.

true, false

SAGEMAKER_TRITON_LOG_WARNING

false 기본적으로 에 있습니다 SageMaker.

true, false

SAGEMAKER_TRITON_LOG_ERROR

false 기본적으로 에 있습니다 SageMaker.

true, false

SAGEMAKER_TRITON_SHM_DEFAULT_BYTE_SIZE

Python 백엔드의 shm 크기를 바이트 단위로 지정합니다. 기본값은 16MB이지만 늘릴 수 있습니다.

String

<number>

SAGEMAKER_TRITON_SHM_GROWTH_BYTE_SIZE

Python 백엔드의 shm 성장 크기를 바이트 단위로 지정합니다. 기본값은 1MB이지만 더 큰 단위의 증감을 위해 늘릴 수 있습니다.

String

<number>

SAGEMAKER_TRITON_TENSORFLOW_VERSION

기본값은 2입니다. Triton은 Triton v23.04 버전부터는 Tensorflow 2를 지원하지 않습니다. 이전 버전에서는 이 변수를 구성할 수 있습니다.

String

<number>

SAGEMAKER_TRITON_MODEL_LOAD_GPU_LIMIT

모델 로드에 사용되는 최대 GPU 메모리 백분율을 제한하여 나머지를 추론 요청에 사용할 수 있도록 합니다.

String

<number>

SAGEMAKER_TRITON_ALLOW_METRICS

false 기본적으로 에 있습니다 SageMaker.

true, false

SAGEMAKER_TRITON_METRICS_PORT

기본 포트는 8002입니다.

String

<number>

SAGEMAKER_TRITON_PUBLISH_METRICS_TO_CLOUDWATCH

false 기본적으로 에 있습니다 SageMaker. Triton 기본 지표true를 Amazon 로 푸시할 수 있도록 이 변수를 로 설정합니다 CloudWatch. 이 옵션이 활성화된 경우 지표가 계정에 게시될 때 발생하는 CloudWatch 비용은 사용자가 부담합니다.

true, false

SAGEMAKER_TRITON_CLOUDWATCH_LOG_GROUP

에 지표 게시를 활성화한 경우 필요합니다 CloudWatch.

String

<cloudwatch_log_group_name>

SAGEMAKER_TRITON_CLOUDWATCH_METRIC_NAMESPACE

에 지표 게시를 활성화한 경우 필요합니다 CloudWatch.

String

<cloudwatch_metric_namespace>

SAGEMAKER_TRITON_ADDITIONAL_ARGS

Triton Server를 시작할 때 별도의 인수를 추가해줍니다.

String

<additional_args>