취미가 좋다

[ Server ] Model Configuration 본문

Data Engineer/triton inference server

[ Server ] Model Configuration

benlee73 2021. 6. 23. 17:41

https://github.com/triton-inference-server/server/blob/main/docs/model_configuration.md

Model Configuration

repository에 있는 각 모델들은 configuration 을 무조건 포함해야한다.

config.pbtxt 파일로 저장되고 가장 기본적이고 필수적인 정보가 포함된 양식은 아래와 같다.

  platform: "tensorrt_plan"
  max_batch_size: 8
  input [
    {
      name: "input0"
      data_type: TYPE_FP32
      dims: [ 16 ]
    },
    {
      name: "input1"
      data_type: TYPE_FP32
      dims: [ 16 ]
    }
  ]
  output [
    {
      name: "output0"
      data_type: TYPE_FP32
      dims: [ 16 ]
    }
  ]

platform and/or backend, max_batch_size, input, output properties 는 항상 포함되어야 하고, 나머지 properties 는 옵션이다.

위의 경우는 두 개의 input 과 하나의 output을 가지는 모델이다.

 

Name

name property 가 지정되어 있지 않으면, 모델 repository 디렉토리와 같은 이름을 가진다.

지정되더라도 모델 repository 디렉토리와 무조건 같은 이름을 가져야 한다.

 

Maximum Batch Size

triton 이 지원하는 여러 batching 이 사용하는 최대 batch size 이다.

모델의 batch dimension이 첫 번재 dimension이고, 모델의 모든 inputs outputs이 batch dimension을 가진다.

1보다 크거나 같아야 하고, batching을 지원하지 않는 모델에 대해서는 0으로 설정한다.

 

Inputs and Outputs

각 모델의 inputs, outputs 는 name, datatype, shape 가 반드시 지정되어야 한다.

name은 보통 input0, input1... output0, output1... 식으로 지정한다.

datatype 과 shape 는 모델에 따라 달리 지정된다. 

 

input output shape는 dims property 와 max_batch_size 의 조합으로 결정된다.

max_batch_size가 1 이상이라면 [-1] + dims 가 되고, 0이라면 그냥 dims 가 된다.

위의 경우 max_batch_size 가 8 이므로, input output shape 는 모두 [-1, 16] 가 된다.

 

모델의 dims를 -1로 설정하여 [4,-1]의 dimensions 를 가질 수 있다.

그리고 triton에서 두 번째 dimension을 4로 설정하여 [4,4]로 만든다면, 앞으로 추론에 있어서 [4,4]의 고정된 입력만 받을 수 있다.

만약 다른 shape 의 입력이 들어온다면 reshape property가 사용되어야 한다.

 

 


 

Auto-Generated Model Configuration

특정 경우 --strict-model-config=false 옵션을 주고 triton을 시작시키면, triton이 자동으로 configuration file을 생성한다.

생성되는 파일은 위의 필수적인 부분만 채워서 작성된다.

특히 TensorRT, TensorFlow saved-model, ONNX model 은 triton이 자동으로 세팅을 해주므로 configuration file이 필요하지 않는다. 그외의 모델은 configuration file이 필수다.

 

--strict-model-config=false 옵션을 사용하면, model configuration endpoint 방식(curl)을 사용해서 파일을 생성한다.

curl을 통해 JSON 파일을 얻고 그러부터 파일을 작성하게 된다.

주고싶은 옵션이 있다면 config.pbtxt 를 수정해야한다.

 

 

Datatypes

 

Model Config TensorRT TensorFlow ONNX Runtime PyTorch API NumPy
TYPE_BOOL kBOOL DT_BOOL BOOL kBool BOOL bool
TYPE_UINT8   DT_UINT8 UINT8 kByte UINT8 uint8
TYPE_UINT16   DT_UINT16 UINT16   UINT16 uint16
TYPE_UINT32   DT_UINT32 UINT32   UINT32 uint32
TYPE_UINT64   DT_UINT64 UINT64   UINT64 uint64
TYPE_INT8 kINT8 DT_INT8 INT8 kChar INT8 int8
TYPE_INT16   DT_INT16 INT16 kShort INT16 int16
TYPE_INT32 kINT32 DT_INT32 INT32 kInt INT32 int32
TYPE_INT64   DT_INT64 INT64 kLong INT64 int64
TYPE_FP16 kHALF DT_HALF FLOAT16   FP16 float16
TYPE_FP32 kFLOAT DT_FLOAT FLOAT kFloat FP32 float32
TYPE_FP64   DT_DOUBLE DOUBLE kDouble FP64 float64
TYPE_STRING   DT_STRING STRING   BYTES dtype(object)

 

Reshape

inference API 에서 받은 input output shape 가 예상한 입출력 모양과 다를 때 사용된다.

입출력 모두 일반적으로 아래와 같이 작성된다.

  input [
    {
      name: "in"
      dims: [ 1 ]
      reshape: { shape: [ ] }
    }

Shape Tensors

 

Version Policy

 

Instance Groups

triton은 한 모델에게 여러 instance를 제공하여, 여러 inference 요청을 동시에 처리할 수 있다.

ModelInstanceGroup property로 실행 인스턴스 수와, 그 인스턴스를 띄울 자원을 지정할 수 있다.

기본적으로 시스템에서 사용 가능한 각 gpu 마다, 모델의 단일 실행 인스턴스가 생성된다.

instance group을 통해 모든 gpu 혹은 특정 gpu에 여러 실행 인스턴스를 띄울 수 있다.

코드는 아래와 같이 작성하여, 각 gpu에 2개의 인스턴스를 띄울 수 있다.

gpu 뿐만 아니라 cpu도 지정이 가능하다.

  instance_group [
    {
      count: 2
      kind: KIND_GPU
    }
  ]

 

Scheduling And Batching

triton은 여러 inference requests 를 배치로 묶고 한번에 처리하여, inferencing throuphput을 크게 증가시킬 수 있다.

여러 경우 개별적인 inference requests 를 배치로 묶지 않아서, batching에 의한 throughput 이득을 챙기지 못한다.

 

Default Scheduler (뿌리는 역할)

configuration에서 scheduling_choice 가 지정되지 않을 때 사용된다.

모든 모델 인스턴스에 inference requests 를 분배한다.

Dynamic Batcher (묶는 역할)

dynamic batching은 requests 를 서버가 묶는 triton의 특징이다.

이는 throughput 향상을 가져오고, stateless 모델을 사용해야만 한다.

이렇게 만든 배치가 모든 모델 인스턴스에 분배된다.

 

dynamic batching은 model configuration에서 각 모델별로 독립적으로 설정이 가능하다.

동적으로 주로 생성할 배치 사이즈, 다른 요청과 결합되도록 스케줄러에서 기다릴 수 있는 최대 시간, 큐 properties 등을 설정할 수 있다.

 

Preferred Batch Sizes

dynamic batcher가 만들려고 시도할 배치 사이즈를 말한다.

아래 코드의 경우 4, 8로 설정하였다.

batcher는 inference할 수 있는 모델 인스턴스가 생성되면, scheduler에 있는 요청들로 배치를 묶는다.

요청이 온 순서대로 배치를 채우며, preferred_batch_size 중 가능한 큰 배치로 묶는다.

만약 다 불가능하다면, 가장 큰 batch size보다는 작지만, 그래도 가장 큰 사이즈로 묶어서 보낸다.

 

 

Delayed Batching

dynamic batcher는 request를 배치로 묶기 위해, 바로 보내지 않고 조금 delay를 줄 수 있다.

아래 코드의 경우 100ms 시간을 지연시킬 수 있는 최대 값으로 지정하였다.

batcher 는 배치를 구성하는 요청 중 max_queue_delay_microseconds property 를 넘는 요청이 없다면, 계속 딜레이를 줄 수 있다.

만약 딜레이 중 preferred_batch_size를 만족하는 배치가 만들어지면, inference를 위해 즉시 전송된다.

최대 딜레이 시간을 채우면, 배치 사이즈가 만족스럽지 않더라도 보내게 된다.

  dynamic_batching {
    preferred_batch_size: [ 4, 8 ]
    max_queue_delay_microseconds: 100
  }

 

Preserve Ordering

preserve_ordering property는 모든 응답(responses)들이 요청(requests)와 같은 순서로 반환되도록 한다.

 

Priority Levels

기본적으로 dynamic batcher는 한 모델에 대해 요청을 쌓아두는 하나의 queue만 가진다.

그래서 요청은 순서대로, 한번에 처리된다.

priority_levels property는 우선순위를 부여하여, 높은 우선순위를 가진 요청이 먼저 배치에 쌓이도록 한다.

같은 수준의 우선순위끼리는 요청된 순서대로 처리한다.

우선순위를 지정하지 않은 요청은 default_priority_level 로 스케줄된다.

 

Queue Policy

priority_levels 이 설정되지 않았다면, default_queue_policy에 따라 하나의 queue만 사용된다.

priority_levels  가 설정되었다면, default_queue_policy and priority_queue_policy 에 따라 ModelQueuePolicy가 결정된다.

 

ModelQueuePolicy는 max_queue_size, timeout_action, default_timeout_microseconds and allow_timeout_override 를 지정할 수 있도록 한다.

 

Sequence Batcher

요청을 배치로 묶는 다는 점이 dynamic batcher와 같다.

하지만 inference 요청들의 sequence가 같은 모델 인스턴스로 들어가야하는 stateful 모델을 사용한다는 점이 다르다.

ModelSequenceBatching property를 통해 sequence batching을 설정한다.

이 설정은 sequence의 시작, 끝, 준비, 관계 ID를 정할 수 있다.

 

Ensemble Scheduler

ensemble model 과 사용되고, ModelEnsembleScheduling property를 통해 설정된다.

모델간 tensor의 흐름을 지정할 수 있다.

 

'Data Engineer > triton inference server' 카테고리의 다른 글

Triton Inference Server Backend  (0) 2021.06.24
[ Server ] Trace  (0) 2021.06.24
[ Server ] Performance Analyzer  (0) 2021.06.24
[ Server ] Metrics  (0) 2021.06.24
[ Server ] Architecture  (0) 2021.06.24
Comments