소개: 주말에 TensorRT-LLM을 빌드할 가치가 있는 이유
LLM이 느리게 작동하는 동안 GPU 사용률이 60%에 머무르는 것을 본 적이 있다면, 활용할 수 있는 성능이 남아 있다는 것을 알 것입니다. TensorRT-LLM은 융합 커널, 페이지드 어텐션, 양자화 및 그래프 수준 최적화를 통해 이러한 여유 공간을 처리량으로 전환하여 지연 시간을 줄이고 초당 토큰 수를 늘립니다. 이 사용 방법 가이드에서는 설치에서 엔진 빌드, 서비스 제공에 이르기까지 모든 과정을 다루므로 NVIDIA GPU에서 더 빠르고 저렴한 추론을 자신 있게 배포할 수 있습니다.
이 튜토리얼은 실용적이고 솔루션 지향적인 스타일로 작성되었습니다. 복사 가능한 명령어, 일반적인 문제점 및 FP16 대 INT8, 배치, KV 캐시 전략에 대한 의사 결정 지점과 함께 질문 주도형 구조를 사용합니다. 또한 적절한 경우 더 자세한 내용을 위해 공식 리소스를 참조합니다.
학습 내용
- 엔진 빌드를 위해 Hugging Face 또는 체크포인트에서 모델을 준비하는 방법
- FP16/INT8 엔진을 빌드하고 성능을 조정하는 방법
- Python/C++ 및 HTTP 서비스를 통해 추론을 실행하는 방법
이 가이드의 대상
- NVIDIA GPU에 LLM을 배포하는 ML 엔지니어
- 프로덕션 환경에서 비용/지연 시간을 최적화하는 실무자
- PyTorch Transformers에서 고도로 최적화된 추론으로 이동하는 빌더
- TensorRT-LLM이란 무엇이며 언제 사용해야 할까요?
TensorRT-LLM은 Transformer 모델을 고도로 최적화된 GPU "엔진"으로 컴파일하는 추론 스택입니다. 원시 PyTorch 또는 일반 런타임과 비교할 때 일반적으로 다음과 같은 이점을 얻을 수 있습니다.
- 페이지드 KV 캐시 및 양자화를 통한 더 나은 메모리 효율성
NVIDIA GPU에서 실행하고 프로덕션급 성능을 중요하게 생각하는 경우 사용하십시오. 특히 디코더 전용 LLM(예: Llama, Mistral, Phi, BLOOM)과 챗봇, RAG 및 높은 QPS API 서비스와 같은 시나리오에 유용합니다.
- 최신 컴퓨팅 기능을 갖춘 NVIDIA GPU(예: Ampere, Ada, Hopper)
- 일치하는 CUDA 및 TensorRT 버전과 적절한 드라이버
- 소스에서 컴파일하는 경우 Python 3.8+ 및 빌드 도구
버전 정보: 설치하기 전에 항상 호환되는 CUDA/TensorRT 버전 및 기능에 대한 공식 TensorRT 지원 매트릭스 및 릴리스 노트를 확인하십시오.
빠른 시작 옵션
- 컨테이너화: 사전 설치된 CUDA/TensorRT가 포함된 NVIDIA의 컨테이너를 사용하십시오. 버전 불일치를 피하는 가장 빠른 방법입니다.
- 네이티브 설치: 기본 TensorRT에 대한 공식 빠른 시작을 따르고 그 위에 TensorRT-LLM을 계층화하십시오.
- 모델 준비 (Hugging Face → TensorRT-LLM)
일반적인 소스
- Hugging Face: Llama/Mistral/BLOOM 변형
준비 체크리스트
- 모델 아키텍처가 TensorRT-LLM에서 지원되는지 확인하십시오.
- 모델 가중치 및 토크나이저를 다운로드하십시오.
- 필요한 경우 safetensors를 예상 형식으로 변환하거나 프로젝트의 스크립트를 통해 ONNX로 내보냅니다.
팁: 공식 빠른 시작에는 모델을 가져오고 올바른 중간 형식으로 변환하는 스크립트가 포함되어 있는 경우가 많습니다. BLOOM 예제가 포함된 튜토리얼 스타일 연습은 Hugging Face LLM을 TensorRT-LLM으로 변환하는 Dell의 가이드를 참조하십시오.
- TensorRT-LLM 엔진 빌드 (워크플로의 핵심)
알아야 할 개념
- 엔진: 추론을 위해 로드하는 컴파일된 하드웨어 최적화 아티팩트입니다.
- 정밀도: 강력한 기준선을 위한 FP16/BF16; 정확도가 유지되는 경우 더 높은 처리량을 위한 INT8 또는 FP8.
- KV 캐시: 페이지드 KV 캐시는 메모리 조각화를 줄이고 긴 컨텍스트 성능을 향상시킵니다.
개략적인 단계
- 최대 배치, 시퀀스 길이, 정밀도, 양자화 및 GPU 아키텍처를 정의하는 빌드 구성을 정의합니다.
참조: 공식 문서 및 구성을 사용하여 엔진을 빌드합니다. Hugging Face Text Generation Inference (TGI)를 통해 서비스를 제공하려는 경우 GPU 아키텍처 및 구성별로 엔진을 미리 컴파일하는 TRT-LLM 백엔드 노트를 참조하십시오.
시작 의사 결정 트리
- 첫 번째 빌드: FP16, 중간 최대 시퀀스 길이(예: 4K–8K), 적당한 배치(예: 4–8). 정확성을 확인합니다.
- 확장: 페이지드 KV 캐시를 활성화합니다. 최대 배치/빔 크기를 늘립니다. FP8 또는 INT8을 실험합니다.
- 프로덕션: 지연 시간/QPS SLO를 충족하는 구성을 고정합니다. 시나리오별로 별도의 엔진을 만듭니다(짧은 프롬프트 대 긴 컨텍스트).
- 추론 실행: Python, C++ 및 HTTP
세 가지 일반적인 경로가 있습니다.
- Python: 빠른 프로토타이핑, 파이프라인 및 노트북에 이상적입니다.
- C++: 최대 성능, 네이티브 서비스로의 통합.
- HTTP 서비스: 확장 가능한 배포를 위해 TRT-LLM 백엔드가 있는 TGI 또는 런타임의 서비스 예제를 사용합니다.
Hugging Face TGI 백엔드
- 정확한 GPU/정밀도 설정을 위해 엔진을 미리 컴파일합니다.
- TRT-LLM 백엔드를 사용하여 TGI를 시작하고 엔진 디렉터리를 가리킵니다.
- /generate 또는 openai 호환 경로를 통해 요청을 보내고 복제본으로 확장합니다.
- 정밀도: FP16은 신뢰할 수 있는 기준선입니다. INT8/FP8은 지연 시간을 더 줄일 수 있지만 품질을 확인하십시오.
- 배치: 동적 배치 및 요청 통합은 처리량을 크게 증가시킵니다. 테일 지연 시간을 측정하십시오.
- 페이지드 KV 캐시: 긴 프롬프트 및 스트리밍에 필수적입니다. 메모리 압력을 줄입니다.
- 최대 길이: 더 큰 최대 시퀀스 길이는 엔진 크기를 늘리고 클럭을 줄일 수 있습니다. 용도에 맞는 엔진을 빌드하십시오.
실용적인 팁
- 실제 프롬프트로 벤치마킹: 프리필 대 디코드 단계를 별도로 측정합니다.
- 토크나이저 처리량이 중요합니다. 프레임워크가 지원하는 경우 GPU에서 수행하십시오.
- CUDA 그래프/융합 커널을 주시하십시오. CPU 오버헤드 및 커널 시작 지연 시간을 줄입니다.
- 다중 GPU의 경우: 모델 크기 및 지연 시간 요구 사항에 따라 텐서 병렬 또는 파이프라인 병렬을 선호합니다.
- 첫 번째 토큰까지의 시간(TTFT) 및 요청당 엔드 투 엔드 지연 시간
- 최대 QPS에서 GPU 사용률 및 메모리 여유 공간
- 정확도: 양자화하는 경우 BLEU/perplexity 또는 작업별 평가
일관된 시드 및 프롬프트 세트를 사용하여 기준선(PyTorch 대 TensorRT-LLM)에서 정확성 및 델타를 검증합니다.
- 일치하지 않는 버전: 공식 지원 매트릭스에 따라 CUDA, 드라이버 및 TensorRT 버전을 정렬합니다.
- 장치에 유효하지 않은 엔진: GPU 아키텍처에 맞게 엔진을 다시 빌드하십시오.
- 빌드 중 OOM: 최대 시퀀스 길이 또는 배치를 줄입니다. 페이지드 KV를 활성화합니다. 양자화를 고려하십시오.
- INT8로 인한 정확도 저하: 도메인 대표 데이터를 기준으로 보정합니다. 텐서별 양자화를 시도하고 레이어별 감도를 확인하십시오.
- 높은 처리량에도 불구하고 느린 TTFT: 페이지드 KV 캐시를 조정하고 CUDA 그래프를 활성화하고 토크나이저 병목 현상을 확인합니다.
- 예제 워크플로: Hugging Face 모델에서 프로덕션으로
시나리오: A100에서 짧은 지연 시간의 채팅 모델을 원합니다.
- 모델 선택: 7B–13B Llama/Mistral 변형.
- 준비: 가중치 및 토크나이저를 다운로드합니다. 아키텍처가 지원되는지 확인합니다.
- 첫 번째 엔진: FP16, 최대 입력 4K, 최대 출력 1K, 배치 4; 페이지드 KV 켜기.
- 유효성 검사: 출력을 PyTorch 기준선과 비교합니다.
- 최적화: INT8 또는 FP8을 시도합니다. TTFT 및 처리량을 측정합니다. 서버 모드의 경우 배치를 늘립니다.
- 서비스: TGI TRT-LLM 백엔드를 사용합니다. 로드 밸런서 뒤에서 복제본을 확장합니다. 스트리밍을 추가합니다.
- GPU당 처리량: 대상 컨텍스트에서 초당 토큰 수를 측정합니다. 이를 사용하여 QPS 용량을 계산합니다.
- 1M 토큰당 가격: 더 빠른 디코딩과 더 높은 배치 사용률을 통해 TRT-LLM은 일반적으로 토큰당 비용을 낮춥니다.
- 적절한 크기의 엔진: 짧은 형식과 긴 형식을 위한 별도의 엔진을 빌드하여 헤드룸 낭비를 최소화합니다.
- 가이드 내부의 FAQ
Q: 모든 GPU 유형에 대해 엔진을 다시 빌드해야 합니까?
A: 예. 엔진은 하드웨어에 따라 다릅니다. 배포할 각 GPU 아키텍처에 대해 빌드하십시오.
Q: INT8이 품질에 얼마나 영향을 미칩니까?
A: 모델과 작업에 따라 다릅니다. 좋은 보정 데이터를 사용하면 많은 모델이 FP16에 가까운 품질을 유지하면서 상당한 속도 향상을 제공합니다.
Q: 긴 컨텍스트(예: 32K)를 실행할 수 있습니까?
A: 예, 그러나 메모리를 신중하게 계획하십시오. 페이지드 KV 캐시를 사용하고 블록 크기를 조정합니다. 더 긴 컨텍스트는 엔진 공간을 늘리고 디코드 비용을 증가시킵니다.
Q: TGI가 필요합니까?
A: 아니요. Python/C++을 직접 실행할 수 있습니다. TGI는 자동 확장 및 로깅 기능을 갖춘 프로덕션급 HTTP API에 편리합니다.
워크플로 가속화를 위해 주목할 가치
프롬프트를 자주 반복하거나 엔진 간에 출력을 비교하거나 실험을 문서화하는 경우 빠른 재시도, 코드 블록 실행 및 웹 스니펫을 지원하는 병렬 AI 도우미를 사용하면 루프 속도를 높일 수 있습니다. 그런데 Sider.AI는 엔지니어를 위해 조정된 데스크톱 경험을 제공합니다. 벤치마크를 캡처하고, 프롬프트를 테스트하고, TensorRT-LLM 파이프라인을 최적화하는 동안 노트를 정리하는 데 유용합니다. 다음 단계 체크리스트
- 지원 매트릭스에서 CUDA/TensorRT 호환성을 확인하십시오.
- 엔진 빌드 가이드를 따르고 FP16을 먼저 선택하십시오.
- TGI를 통해 서비스를 제공하는 경우 엔진을 미리 컴파일하고 TRT-LLM 백엔드를 구성하십시오.
- 선택적으로 BLOOM과 같은 Hugging Face 모델에 대한 튜토리얼 스타일 연습을 검토하십시오.
주요 내용
- TensorRT-LLM은 Transformer를 GPU 네이티브 엔진으로 컴파일하여 최대 처리량과 더 낮은 지연 시간을 제공합니다.
- FP16으로 시작하고 페이지드 KV 캐시를 활성화하고 측정합니다. 그런 다음 더 빠른 속도를 위해 INT8/FP8을 탐색하십시오.
- 엔진은 GPU 및 구성에 따라 다릅니다. 배포 대상별로 빌드하십시오.
- 프로덕션의 경우 엔진을 강력한 서비스 계층(예: TGI)과 페어링하고 TTFT, 처리량 및 품질을 모니터링하십시오.
FAQ
Q1:TensorRT-LLM을 올바르게 설치하고 설정하려면 어떻게 해야 합니까?
일치하는 CUDA/TensorRT가 있는 컨테이너를 사용하거나 공식 빠른 시작 및 지원 매트릭스를 따라 버전 드리프트를 방지하십시오. 엔진을 컴파일하기 전에 GPU 드라이버 및 빌드 도구를 확인하십시오.
Q2:Hugging Face 모델과 함께 TensorRT-LLM을 사용하는 방법은 무엇입니까?
모델 및 토크나이저를 다운로드하고 지원을 확인하고 필요에 따라 변환한 후 엔진을 빌드하십시오. TGI로 서비스를 제공하는 경우 GPU에 대한 엔진을 컴파일하고 백엔드를 엔진 디렉터리로 가리키십시오.
Q3:TensorRT-LLM에 FP16, FP8 또는 INT8을 선택해야 합니까?
안정성을 위해 FP16으로 시작한 다음 FP8/INT8을 시도하여 처리량을 늘리십시오. 양자화 후 항상 작업 정확도를 확인하십시오.
Q4:HTTP를 통해 TensorRT-LLM을 서비스할 수 있습니까?
A: 예. Python/C++을 직접 사용하거나 스트리밍을 통해 확장 가능하고 프로덕션 준비가 완료된 API를 위해 Hugging Face TGI의 TRT-LLM 백엔드를 통해 서비스를 제공할 수 있습니다.
Q5:TensorRT-LLM을 사용할 때 일반적인 성능 병목 현상은 무엇입니까?
토크나이저 오버헤드, 최적이 아닌 배치 및 페이지드 KV 캐시 부족이 일반적인 문제입니다. 배치 크기를 조정하고 CUDA 그래프를 활성화하고 TTFT 대 전체 초당 토큰 수를 모니터링하십시오.