tensorrt-backend
TensorRT 백엔드
TensorRT 백엔드는 직렬화된 TensorRT 엔진 모델을 TensorRT C++ API로 실행하는 데 쓰이는 Triton 백엔드예요. 쉽게 말해, TensorRT로 빌드한 최적화 엔진(plan)을 Triton 안에서 돌리게 해주는 다리 역할을 한다고 보면 돼요. Triton 백엔드가 뭔지 더 알고 싶다면 backend 저장소를, 궁금한 점이나 문제가 있다면 이슈 페이지에 질문을 남기면 돼요.
질문하기 전에 아래 내용과 메인 서버 저장소의 공식 Triton 문서를 먼저 읽어보는 걸 권해요.
커맨드라인 옵션 (명령줄 옵션)
백엔드 커맨드라인 옵션은 이 백엔드를 쓰는 모든 모델에 공통으로 적용되는 속성을 설정해요. 형식과 전체 옵션 목록은 아래처럼 지정해요.
--backend-config=tensorrt,coalesce-request-input=<boolean>,plugins="/path/plugin1.so;/path2/plugin2.so,version-compatible=true"
하나씩 살펴볼게요.
- coalesce-request-input: 요청들의 입력 중 같은 이름을 가진 것들의 메모리 주소가 서로 정렬되어 있으면, 이를 하나의 연속된 버퍼(contiguous buffer)로 취급하라고 TensorRT에 지시해요. 이 옵션은 모든 요청의 입력 텐서가 같은 메모리 영역에서 할당된 경우에만 켜야 해요. 기본값은
false예요. - execution-policy: 모델을 서로 다른 Triton 실행 정책으로 실행하도록 지시해요 (
TRITONBACKEND_ExecutionPolicy참고). 현재 받는 값은 두 가지예요.DEVICE_BLOCKING:TRITONBACKEND_EXECUTION_DEVICE_BLOCKING에 해당해요. 여러 스레드가 많은 커널을 실행하면서 생길 수 있는 CUDA 경합을 피하고 싶을 때 설정할 수 있어요.BLOCKING:TRITONBACKEND_EXECUTION_BLOCKING에 해당해요. 모델 인스턴스 사이에서 호스트 스레드 작업을 겹쳐(overlap) 실행하고 싶을 때 설정할 수 있어요.
- plugins: 모델이 의존하는 커스텀 TensorRT 플러그인을 로드하는 방법을 제공해요. 여러 플러그인을 로드해야 하면 세미콜론(
;)으로 구분해요. - version-compatible: 빌드에 쓴 TensorRT 버전과 Triton이 쓰는 엔진 버전이 달라도, 버전 호환(version-compatible) TensorRT 모델을 로드할 수 있게 해줘요. 이 모드로 로드하는 모델은 가벼운 런타임(lean runtime)을 포함하는데, 이 런타임을 Triton이 역직렬화해서 실행하기 때문이라 신뢰할 수 있는 모델만 써야 해요. 자세한 내용은 TensorRT 문서를 참고하세요. 기본값은
false예요.
TensorRT 백엔드 빌드
시스템에 맞는 TensorRT 버전이 설치되어 있어야 해요. 올바른 버전을 확인하려면 지원 매트릭스를 보세요.
$ mkdir build
$ cd build
$ cmake -DCMAKE_INSTALL_PREFIX:PATH=`pwd`/install ..
$ make install
빌드 과정에서 아래 필수 Triton 저장소가 내려와 쓰여요. 기본적으로 각 저장소의 main 브랜치/태그가 쓰이지만, 나열된 CMake 인자로 바꿀 수 있어요.
triton-inference-server/backend:-DTRITON_BACKEND_REPO_TAG=[tag]triton-inference-server/core:-DTRITON_CORE_REPO_TAG=[tag]triton-inference-server/common:-DTRITON_COMMON_REPO_TAG=[tag]
파라미터 (Parameters)
Triton은 모델의 config.pbtxt 파일에 있는 Parameters 섹션을 통해 TensorRT 모델의 실행 모드를 제어하는 몇 가지 플래그를 노출해요.
execution_context_allocation_strategy
IExecutionContext의 메모리 할당 방식을 정해요. IExecutionContext는 추론 중 내부 활성화 텐서를 위해 장치 메모리 블록이 필요한데, 그 메모리를 실행 컨텍스트가 여러 방식으로 관리하게 할 수 있어요. 현재 옵션은 STATIC(기본값)과 ON_PROFILE_CHANGE 두 가지예요.
STATIC: 모든 프로파일에서 최대 크기로 기본 정적 할당을 해요.ON_PROFILE_CHANGE: 프로파일이 선택될 때 그 프로파일에 맞춰 재할당해요.
parameters: {
key: "execution_context_allocation_strategy"
value: {
string_value: "STATIC"
}
}