NVIDIA에서 개발한 오픈 소스 대규모 언어 모델 추론 최적화 라이브러리로, TensorRT 기술을 통해 GPU 추론에 최첨단 성능 최적화를 제공합니다.
TensorRT-LLM 프로젝트 상세 소개
프로젝트 개요
TensorRT-LLM은 NVIDIA가 개발한 오픈소스 라이브러리로, NVIDIA GPU에서 대규모 언어 모델(LLM)의 추론 성능을 최적화하는 데 특화되어 있습니다. 이 라이브러리는 대규모 언어 모델을 정의하기 위한 사용하기 쉬운 Python API를 제공하며, NVIDIA GPU에서 효율적인 추론을 실행하기 위한 최첨단 최적화 기술을 지원합니다.
핵심 특성
1. 고급 최적화 기술
TensorRT-LLM은 다음과 같은 다양한 고급 최적화 기능을 제공합니다:
- 커스텀 어텐션 커널: 특별히 최적화된 어텐션 메커니즘 구현
- 인플라이트 배치(Inflight Batching): 실시간으로 길이가 다른 입력 시퀀스 처리
- 페이지드 KV 캐시(Paged KV Cache): 효율적인 키-값 캐시 관리
- 추측 디코딩(Speculative Decoding): 여러 토큰을 예측하여 생성 속도 가속화
- 다양한 양자화 지원: FP8, FP4, INT4 AWQ, INT8 SmoothQuant 등
2. 양자화 기술 상세 설명
TensorRT-LLM은 업계 최고의 통합 양자화 툴킷을 제공하여 NVIDIA 하드웨어에서 딥러닝/생성형 AI 배포를 크게 가속화하는 동시에 모델 정확도를 유지합니다.
주요 양자화 방법:
- FP8: 대규모 배치 추론 시나리오(배치 크기 ≥16)에서 일반적으로 최상의 성능과 정확도를 제공합니다.
- INT8 SmoothQuant: 가중치 스무딩 및 INT8 채널 양자화, 활성화 범위 텐서 레벨 스케일링
- INT4 AWQ: 가중치 재조정 및 블록 레벨 양자화를 INT4로 수행하며, 소규모 배치 추론 시나리오(배치 크기 ≤4)에 권장됩니다.
- W4A8 AWQ: 가중치를 INT4로 양자화하고 활성화를 INT8로 양자화합니다.
성능 향상:
벤치마크 테스트에 따르면, 양자화 기술은 상당한 성능 향상을 가져올 수 있습니다:
- FP8 양자화: FP16 기준 대비 Llama 3 8B 모델은 1.45배, 70B 모델은 1.81배 가속됩니다.
- INT4 AWQ: 배치 크기가 1인 시나리오에서 70B 모델은 최대 2.66배의 성능 향상을 얻을 수 있습니다.
- 메모리 최적화: 모든 양자화 버전의 Llama 3 70B 모델은 단일 NVIDIA H100 GPU에서 실행될 수 있으며, FP16 정밀도는 최소 두 개의 GPU가 필요합니다.
3. 다중 GPU 및 다중 노드 지원
TensorRT-LLM은 전처리 및 후처리 단계와 다중 GPU 다중 노드 통신 프리미티브를 포함하여, 간단한 오픈소스 모델 정의 API를 통해 획기적인 LLM 추론 성능을 구현합니다.
4. 광범위한 하드웨어 지원
TensorRT-LLM은 NVIDIA Hopper, NVIDIA Ada Lovelace 및 NVIDIA Ampere 아키텍처 기반 GPU를 지원합니다. 특히:
- H100 GPU: FP8 형식의 자동 변환 및 최적화된 커널을 지원합니다.
- H200 GPU: Llama2-13B에서 초당 약 12,000 토큰의 성능을 달성할 수 있습니다.
- RTX 시리즈: 소비자용 GPU의 대규모 모델 추론을 지원합니다.
설치 및 사용
Docker 설치 (권장)
# 사전 빌드된 Docker 컨테이너 실행
docker run --ipc host --gpus all -it nvcr.io/nvidia/tensorrt-llm/release
LLM API 사용 예시
from tensorrt_llm import BuildConfig, SamplingParams
from tensorrt_llm._tensorrt_engine import LLM
def main():
build_config = BuildConfig()
build_config.max_batch_size = 256
build_config.max_num_tokens = 1024
# HuggingFace 모델 이름, 로컬 HF 모델 경로 또는 TensorRT 모델 옵티마이저 양자화 체크포인트 지원
llm = LLM(model="TinyLlama/TinyLlama-1.1B-Chat-v1.0",
build_config=build_config)
# 예시 프롬프트
prompts = [
"Hello, my name is",
"The capital of France is",
"The future of AI is",
]
# 샘플링 파라미터 생성
sampling_params = SamplingParams(temperature=0.8, top_p=0.95)
for output in llm.generate(prompts, sampling_params):
print(f"Prompt: {output.prompt!r}, Generated text: {output.outputs[0].text!r}")
온라인 서비스 배포
# OpenAI 호환 서버 시작
trtllm-serve --model TinyLlama/TinyLlama-1.1B-Chat-v1.0 --port 8000
양자화 워크플로우
기본 양자화 명령
# FP8 양자화
python quantize.py --model_dir $MODEL_PATH --qformat fp8 --kv_cache_dtype fp8 --output_dir $OUTPUT_PATH
# INT4 AWQ 양자화
python quantize.py --model_dir $MODEL_PATH --qformat int4_awq --awq_block_size 64 --tp_size 4 --output_dir $OUTPUT_PATH
# INT8 SmoothQuant 양자화
python quantize.py --model_dir $MODEL_PATH --qformat int8_sq --kv_cache_dtype int8 --output_dir $OUTPUT_PATH
# 자동 양자화 (다양한 방법 조합)
python quantize.py --model_dir $MODEL_PATH --autoq_format fp8,int4_awq,w4a8_awq --output_dir $OUTPUT_PATH --auto_quantize_bits 5 --tp_size 2
지원 모델
TensorRT-LLM은 다음을 포함하되 이에 국한되지 않는 수많은 인기 LLM 아키텍처를 지원합니다:
- Llama 시리즈: Llama 2, Llama 3, Llama 3.1, Llama 3.3
- Falcon 시리즈: Falcon-180B 포함
- GPT 시리즈: ChatGPT 관련 아키텍처
- Gemma 시리즈: Google의 오픈소스 모델
- Mixtral 시리즈: 혼합 전문가 모델
- DeepSeek 시리즈: DeepSeek R1 포함
- CodeLlama: 코드 생성 전용 모델
생태계 통합
NVIDIA 생태계
- NVIDIA NeMo: 생성형 AI 애플리케이션 구축, 맞춤화 및 배포를 위한 엔드투엔드 프레임워크
- Triton Inference Server: 프로덕션급 추론 서버
- NVIDIA Dynamo: 데이터센터 규모의 분산 추론 서비스 프레임워크
타사 통합
- HuggingFace Hub: 사전 양자화된 모델 제공
- LlamaIndex: RAG 애플리케이션 개발
- SageMaker LMI: AWS 관리형 추론
성능 벤치마크
성능 향상 예시:
- CPU 플랫폼 대비: 추론 속도 최대 36배 향상
- RTX 무최적화 대비: Windows RTX 플랫폼에서 대규모 언어 모델 속도 최대 4배 향상
- Falcon-180B: 단일 H200 GPU에서 INT4 AWQ를 사용하여 추론 구현
- Llama-70B: A100 대비 6.7배 속도 향상
모범 사례 제안
양자화 방법 선택
다양한 시나리오에 따라 적절한 양자화 방법을 선택합니다:
소규모 배치 추론 (배치 크기 ≤4):
- 가중치 양자화 방법(예: INT4 AWQ) 사용을 권장합니다.
- 주로 메모리 대역폭 제한을 고려합니다.
대규모 배치 추론 (배치 크기 ≥16):
- FP8 양자화를 우선적으로 선택하며, 일반적으로 최상의 성능과 정확도를 제공합니다.
- 결과가 만족스럽지 않으면 INT8 SmoothQuant를 시도한 다음 AWQ 및/또는 GPTQ를 시도할 수 있습니다.
특정 도메인 애플리케이션:
- 코드 완성(code completion)과 같이 고도로 특화된 애플리케이션의 경우, 도메인 관련 데이터셋으로 보정(calibration)하는 것을 권장합니다.
기술적 장점
- 사용 편의성: 고급 Python API를 제공하여 LLM 정의 및 최적화 프로세스를 간소화합니다.
- 성능: 커널 퓨전, 양자화, 런타임 최적화 등 모든 주요 최적화 기술을 포함합니다.
- 확장성: 단일 GPU부터 다중 노드에 이르는 다양한 배포 시나리오를 지원합니다.
- 호환성: PyTorch와 깊이 통합되어 주요 추론 생태계를 지원합니다.
- 오픈소스: 완전한 오픈소스로, 커뮤니티 주도의 지속적인 발전을 이룹니다.
미래 발전
TensorRT-LLM은 오픈소스 모듈형 모델 정의 API를 통해 사용 편의성과 확장성을 높여, 새로운 아키텍처 및 향상된 기능을 정의, 최적화 및 실행할 수 있도록 하며, LLM의 발전에 따라 쉽게 맞춤화할 수 있습니다.
프로젝트의 지속적인 발전 방향은 다음과 같습니다:
- 더 많은 모델 아키텍처 지원
- 더욱 진보된 양자화 기술
- 더 나은 다중 노드 확장성
- 더욱 긴밀한 생태계 통합