Triton Inference Server 의 기본 Architecture

2022. 1. 7. 05:07·Production

Triton Inference Server 의 github 내 documentation 을 읽고 정리한 글입니다.

 

 

GitHub - triton-inference-server/server: The Triton Inference Server provides an optimized cloud and edge inferencing solution.

The Triton Inference Server provides an optimized cloud and edge inferencing solution. - GitHub - triton-inference-server/server: The Triton Inference Server provides an optimized cloud and edge i...

github.com

 

architecture

Triton 은 서버 실행 시부터 다음 순서로 요소들을 거쳐, 클라이언트의 추론 요청을 처리한다.

 

 

 

 

아키텍처 내 주요 구성 요소는 다음과 같다.

 

  1. model repository/code
    추론 가능한 모델의 파일 기반 저장소
    model repository 에 모델 파일 저장 후 서버 실행 시 모델 업로드
  1. inference request
    HTTP/REST 혹은 gRPC, C API 기반 추론 요청
    클라이언트에서 추론 요청 시 서버에 전달 및 모델 별 스케줄러로 라우팅
  1. per-model sheduler queues
    각 모델의 스케줄러는 선택적으로 배치 단위 처리 후 모델의 타입에 따라 프레임워크 백엔드로 요청 전달
  1. framework backend/code
    프레임워크 백엔드에서 입력에 대해 추론 실행
  2. inference response
    추론 결과를 클라이언트에 응답으로 반환

 

concurrent model execution

Triton 는 시스템 내 여러 모델 혹은 한 모델의 여러 인스턴스에서 병렬적으로 추론 실행이 가능하다. 아래와 같이 2개의 요청이 동시에 들어올 때, Triton 은 요청들을 GPU에 즉시 스케줄링하고, GPU의 하드웨어 스케줄러는 추론을 위해 두 요청에 대한 연산을 시작한다. CPU로 추론을 실행하는 경우에는, Triton 이 아닌 운영체제에 의해 CPU의 스레드에 대한 스케줄링이 이루어지는 것을 제외하면 Triton 과 유사하게 실행된다.

 

 

 

 

만약 아래와 같이 같은 모델에 대해 여러 요청이 들어올 경우, Triton 은 하나의 GPU 에 요청 실행을 순차적으로 스케줄링한다.

 

 

 

 

Triton 은 instance group 이라고 부르는 model configuration 옵션을 제공하는데, 이를 통해 각 모델에서 얼마나 많은 병렬 실행을 할 수 있는지 정할 수 있다. 여기서 병렬 실행은 instance 라고 불리며, 기본적으로 Triton 은 모델 당 하나의 instance 를 부여한다. 따라서 위의 그림과 같이 각 모델에서는 동시에 하나의 실행만 가능하며, instance-group 설정을 통해 모델에서 동시에 실행가능한 인스턴스의 수를 늘릴 수 있다.

 

예를 들면 model1 에 대해 3개의 instance 를 설정한 경우, 아래와 같이 model1 에 대한 3개의 추론 요청은 동시에 실행된다. 그리고 4번째 추론 요청은, 3개의 추론 요청 중 첫번째 요청이 완료될 때 실행이 되도록 대기한다.

 

 

 

 

아래와 같이 model repository 아래에 config.pbtxt 파일로 instance group 지정 시, 모델 별로 instance 몇 개까지 허용할지 지정할 수 있다.

 

instance_group [
    {
      count: 1
      kind: KIND_GPU
      gpus: [ 0 ]
    },
    {
      count: 2
      kind: KIND_GPU
      gpus: [ 1, 2 ]
    }
  ]

 

model and scheduler

Triton 은 각 모델에 대해 독립적으로 선택되는 여러 scheduling/batching algorithm 을 제공한다. stateless/stateful/ensemble 모델 타입 별로 다른 scheduler 를 제공하며, model configuration 파일으 작성할 때 스케줄러를 선택할 수 있다.

(현재 stateless model 만 사용중이므로, 여기선 stateless model 만을 다룬다.)

 

stateless model

stateless model 은 추론 요청 간 state 를 공유하지 않는 모델로, 모델에서 실행되는 각 추론은 해당 모델에서 실행되는 다른 추론과는 독립적으로 실행된다. stateless model 의 예로는 image classification 과 object detection 등에 사용되는 CNN 이 있으며, 이러한 stateless model 은 default scheduler 나 dynamic batcher 등을 사용한다.

RNN 의 경우, 내부에서 공유되는 메모리 (e.g. RNN 내에서 cell 을 통해 전파되는 입력값) 가 추론 요청 간 공유되지 않는 경우엔 stateless model 로 간주한다. 이 경우에는default scheduler 가 사용되지만, 보통 여러 추론 요청의 배치 단위 구성을 기대하지 않으므로, dynamic batcher 를 사용하지 않는다.

(RNN 은 배치 단위로 구성하더라도, 배치 단위를 병렬적으로 처리하지 못하고 샘플 단위로 순차적으로 처리해야하므로 배치로 구성하지 않는 것으로 생각한다.)

 

default scheduler

default scheduler 는 model configuration 에 따라 모든 모델의 instance 로 추론 요청을 분산한다.

 

dynamic batcher

dynamic batcher 는 서버 내에서 추론 요청을 동적으로 배치 단위로 조합하는 dynamic batching 을 구현하며, 생성된 배치들은 모든 모델의 instance 에 분산된다. dynamic batcher 는 stateless model 에서만 사용가능하다.

dynamic batching 은 model configuration 내에서 ModelDynamicBatching 속성으로 독립적으로 설정할 수 있다. preferred batch size, maximum queue delay time 과 queue size, priorites, time-outs 등을 지정할 수 있다.

아래와 같이 model configuration 에서 dynamic batching 을 설정한다.

 

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

 

 

출처

https://github.com/triton-inference-server/server/blob/main/docs/architecture.md#concurrent-model-execution

 

'Production' 카테고리의 다른 글

도커를 이용한 스프링부트 어플리케이션 배포  (0) 2021.11.30
'Production' 카테고리의 다른 글
  • 도커를 이용한 스프링부트 어플리케이션 배포
밀러 (miller)
밀러 (miller)
  • 밀러 (miller)
    밀러의 데브로그
    밀러 (miller)
  • 글쓰기 관리
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Java
      • Node.js
      • Production
      • Books
      • Computer Science
      • TIL
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
    • LinkedIn
  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
밀러 (miller)
Triton Inference Server 의 기본 Architecture
상단으로

티스토리툴바