특징
TensorRT-LLM은 NVIDIA가 공식으로 오픈소스화한 프로젝트입니다.
오직 NVIDIA GPU + TensorRT 런타임 환경에서만 동작합니다.
장점
- 최고 수준의 추론 성능
- 낮은 지연(latency)·높은 처리량(throughput)
- 퀀타이제이션·메모리 최적화
- FP16, INT8 변환으로 VRAM 사용량 절감
- 상용 GPU 활용 극대화
- NVIDIA 드라이버·TensorRT 직접 제어
단점
- vLLM은 pip install vllm만으로 시작할 수 있고, GPU가 없어도 CPU 모드로 바로 돌려볼 수 있습니다.
- TensorRT-LLM은 CUDA, TensorRT SDK 버전 호환성, 빌드·변환 스크립트 디버깅 등을 거쳐야 합니다.
- vLLM은 동적 배칭(dynamic batching), 토크나이저 변경, 파이프라인 훅(hook) 삽입 등 개발 중에 코드 수정만으로 바로 반영됩니다.
- TensorRT-LLM은 변환된 엔진(.plan)이 고정 그래프(graph) 형태라, 모델 구조나 토크나이저를 바꾸면 다시 변환해야 합니다.
- TensorRT-LLM 전용
- 오직 NVIDIA GPU + TensorRT 런타임 환경에서만 동작합니다.
- vLLM은 범용
- NVIDIA GPU는 물론, AMD GPU (ROCm), 심지어 CPU만 있어도 구동 가능합니다.
- 다양한 환경에서 “동작 여부 확인” → “간단 성능 테스트” → “프로덕션 전환” 워크플로우를 지원합니다.
따라서
- vLLM으로 빠르게 기능 개발하고,
- 안정화되면 TensorRT-LLM으로 전환해 최종 성능을 극대화
실습해본 경험
TensorRT-LLM설치
설치하는것 자체가 c++ compiler, NVCC, MPI등 여러 의존성설치 문제가 있었고 쉽지 않았다.
설치후에는 라마7b모델 받아서 모델변환하고 엔진빌드하고 서버띄운다음에 테스트하면 됐다.
모델변환은 아마 허깅페이스의 저장포맷(체크포인트)을 TensorRT용으로 바꾸는거고
엔진빌드는 커널단위로 컴파일하는걸 포함해서 빌드하는걸 말하는듯하다.
라마7b모델받기
이거 받을때도 허깅페이스에서 권한요청해서 메일로 승인받고서야 git clone으로 받을수 있었다. 승인은 1시간내로 금방 되긴함
mkdir -p ~/models && cd ~/models
git lfs install
git clone https://huggingface.co/meta-llama/Llama-2-7b-hf
모델변환
cd ~/workspace/TensorRT-LLM/examples/models/core/llama
python3 convert_checkpoint.py \
--model_dir ~/models/Llama-2-7b-hf \
--output_dir ~/workspace/TensorRT-LLM/trt_llama2_7b_ckpt_int8 \
--dtype float16 \
--use_weight_only \
--weight_only_precision int8 \
--per_channel \
--calib_dataset wikitext \
--calib_size 100
내 그래픽카드가 8GB짜리라서 int8로 추가로 줄이는 작업이 들어갔다.
엔진빌드
trtllm-build \
--checkpoint_dir trt_llama2_7b_ckpt_int8 \
--gemm_plugin auto \
--output_dir trt_llama2_7b_engine_int8_small \
--max_seq_len 2048 \
--max_batch_size 1 \
--paged_state enable
추론서버 띄우기
trtllm-serve serve trt_llama2_7b_engine_int8_small \
--tokenizer ~/models/Llama-2-7b-hf \
--host 0.0.0.0 \
--port 8002 \
--max_batch_size 1 \
--max_seq_len 1024
테스트
curl http://localhost:8002/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "trt_llama2_7b_engine_int8_small",
"prompt": "안녕, 너 이름이 뭐야?",
"max_tokens": 128
}'