MLOPS/SERVING

Triton Server Concurrent Model Execution

개발허재 2022. 4. 28. 10:08

Triton 아키텍처를 사용하면 동일한 시스템에서 여러 모델 및/또는 동일한 모델의 여러 인스턴스를 병렬로 실행할 수 있습니다. 

시스템에는 GPU가 0개, 1개 또는 여러 개 있을 수 있습니다. 

다음 그림은 두 가지 모델이 있는 예를 보여줍니다. 

Triton이 현재 어떤 요청도 처리하지 않는다고 가정하고 두 요청이 동시에 도착하면(각 모델마다 하나씩) Triton은 즉시 두 요청을 GPU에 예약하고 GPU의 하드웨어 스케줄러는 두 계산을 병렬로 작업하기 시작합니다. 

시스템의 CPU에서 실행되는 모델은 각 모델의 CPU 스레드 실행 일정이 시스템의 OS에 의해 처리된다는 점을 제외하고는 Triton에 의해 유사하게 처리됩니다.

기본적으로 동일한 모델에 대한 여러 요청이 동시에 도착하면 Triton은 다음 그림과 같이 GPU에서 한 번에 하나씩만 예약하여 실행을 직렬화합니다.


Triton은 각 모델이 허용되어야 하는 해당 모델의 병렬 실행 수를 지정할 수 있도록 하는 instance-group이라는 모델 구성 옵션을 제공합니다. 

활성화된 각 병렬 실행을 인스턴스 라고 합니다 .

기본적으로 Triton은 시스템에서 사용 가능한 각 GPU에 대해 각 모델에 단일 인스턴스를 제공합니다. 

모델 설정에서 instance_group 필드를 이용하여 모델의 실행 인스턴스 수를 변경할 수 있다. 

다음 그림은 model1이 3개의 인스턴스를 허용하도록 구성된 경우의 모델 실행을 보여줍니다.

그림과 같이 처음 세 개의 model1 추론 요청은 즉시 병렬로 실행됩니다. 네 번째 model1 추론 요청은 시작하기 전에 처음 세 가지 실행 중 하나가 완료될 때까지 기다려야 합니다.

 

 


"/data/model_repo/densenet_onnx/config.pbtxt" 28L, 472C                                                             24,15         Bot
platform: "onnxruntime_onnx"
max_batch_size : 0
input [
  {
    name: "data_0"
    data_type: TYPE_FP32
    format: FORMAT_NCHW
    dims: [ 3, 224, 224 ]
    reshape { shape: [ 1, 3, 224, 224 ] }
  }
]
output [
  {
    name: "fc6_1"
    data_type: TYPE_FP32
    dims: [ 1000 ]
    reshape { shape: [ 1, 1000, 1, 1 ] }
    label_filename: "densenet_labels.txt"
  }
]
instance_group [
    {
      count: 10
      kind: KIND_GPU
      gpus: [0]
    }
]

위와 같이, 컨피그 파일에 인스턴스 그룹을 추가하여 모델을 10개 띄우는 설정을 해준다.

I0428 00:52:15.993110 519 onnxruntime.cc:2058] TRITONBACKEND_ModelInitialize: densenet_onnx (version 1)
I0428 00:52:15.993637 519 tensorflow.cc:2270] TRITONBACKEND_ModelInitialize: simple_dyna_sequence (version 1)
I0428 00:52:15.993996 519 model_repository_manager.cc:1183] successfully loaded 'inception_graphdef' version 1
I0428 00:52:15.994225 519 tensorflow.cc:2270] TRITONBACKEND_ModelInitialize: simple (version 1)
I0428 00:52:15.994729 519 tensorflow.cc:2270] TRITONBACKEND_ModelInitialize: simple_identity (version 1)
I0428 00:52:15.995170 519 tensorflow.cc:2270] TRITONBACKEND_ModelInitialize: simple_int8 (version 1)
I0428 00:52:15.995553 519 tensorflow.cc:2270] TRITONBACKEND_ModelInitialize: simple_sequence (version 1)
I0428 00:52:15.996055 519 tensorflow.cc:2270] TRITONBACKEND_ModelInitialize: simple_string (version 1)

I0428 00:52:15.996511 519 tensorflow.cc:2319] TRITONBACKEND_ModelInstanceInitialize: simple_dyna_sequence_0_0 (CPU device 0)
I0428 00:52:16.002312 519 onnxruntime.cc:2101] TRITONBACKEND_ModelInstanceInitialize: densenet_onnx_0_0 (GPU device 0)
I0428 00:52:17.395424 519 tensorflow.cc:2319] TRITONBACKEND_ModelInstanceInitialize: simple_sequence_0 (CPU device 0)
I0428 00:52:17.402247 519 tensorflow.cc:2319] TRITONBACKEND_ModelInstanceInitialize: simple_dyna_sequence_0_1 (CPU device 0)

I0428 00:52:17.402521 519 model_repository_manager.cc:1183] successfully loaded 'simple_sequence' version 1
...
I0428 00:52:17.410573 519 model_repository_manager.cc:1183] successfully loaded 'simple_dyna_sequence' version 1
...
I0428 00:52:17.432025 519 onnxruntime.cc:2101] TRITONBACKEND_ModelInstanceInitialize: densenet_onnx_0_1 (GPU device 0)
I0428 00:52:17.628018 519 onnxruntime.cc:2101] TRITONBACKEND_ModelInstanceInitialize: densenet_onnx_0_2 (GPU device 0)
I0428 00:52:17.817427 519 onnxruntime.cc:2101] TRITONBACKEND_ModelInstanceInitialize: densenet_onnx_0_3 (GPU device 0)
I0428 00:52:18.033580 519 onnxruntime.cc:2101] TRITONBACKEND_ModelInstanceInitialize: densenet_onnx_0_4 (GPU device 0)
I0428 00:52:18.225237 519 onnxruntime.cc:2101] TRITONBACKEND_ModelInstanceInitialize: densenet_onnx_0_5 (GPU device 0)
I0428 00:52:18.415590 519 onnxruntime.cc:2101] TRITONBACKEND_ModelInstanceInitialize: densenet_onnx_0_6 (GPU device 0)
I0428 00:52:18.605373 519 onnxruntime.cc:2101] TRITONBACKEND_ModelInstanceInitialize: densenet_onnx_0_7 (GPU device 0)
I0428 00:52:18.797521 519 onnxruntime.cc:2101] TRITONBACKEND_ModelInstanceInitialize: densenet_onnx_0_8 (GPU device 0)
I0428 00:52:18.984962 519 onnxruntime.cc:2101] TRITONBACKEND_ModelInstanceInitialize: densenet_onnx_0_9 (GPU device 0)
I0428 00:52:19.172663 519 model_repository_manager.cc:1183] successfully loaded 'densenet_onnx' version 1

위 코드블럭은 tritonserver --model-repository=/models/ 명령어로 모델을 로드하는 과정이다.

먼저, 각 모델들을 이니셜라이즈해준다.

다음, 인스턴스그룹을 컨피그 파일에 설정한 모델들의 인스턴스이니셜라이즈를 해준다. 인스턴스그룹을 설정하지 않은 모델들은 인스턴스이니셜라이즈를 하지않고 로드가 된다.

그리고, 순차적으로 인스턴스그룹을 컨피그 파일에 설정한 모델을 로드한다.