Generative AI

NVIDIA 양자화 기술과 TensorRT-LLM을 이용한 서비스 최적화

Reading Time: 6 minutes

이 글은 최신 LLM 서빙 환경에서 직면한 효율성과 ROI 문제를 해결하기 위해 NVIDIA TensorRT-LLM을 도입한 연구 사례를 다룹니다. Kakao가 개발한 Kanana-Flex 모델을 기반으로, 모델 최적화와 GPU 성능 극대화를 통해 추론 속도와 처리 효율을 향상시키는 방법론을 구체적으로 설명합니다.

최신 LLM 서빙 한계와 MoE 최적화 과제

최신 LLM을 실제 서비스에 적용하면서 가장 큰 고민 중 하나는 투자 대비 수익(ROI)입니다. 고성능 GPU로 모델을 학습할 때와 달리, 서빙 단계에서는 효율이 급격히 떨어지기 때문이죠. 특히 최근 각광받는 MoE(Mixture-of-Experts) 모델은 전문가 네트워크 간의 통신 병목과 동적 라우팅 처리로 인해 가속화가 쉽지 않습니다. 이 때문에 최신 GPU를 사용하더라도 처리량(throughput)과 지연 시간(latency) 요구사항을 동시에 충족하기 어렵습니다. 이 복잡한 문제를 해결하기 위해 NVIDIA는 Hopper 아키텍처의 성능을 극대화하는 TensorRT-LLM을 제공합니다. TensorRT-LLM은 MoE 모델의 동적 라우팅을 최적화하고, 커널 퓨전과 양자화를 통해 실제 서비스 워크로드에 맞는 추론 속도를 극대화합니다.
이를 통해 효율적인 고성능 서빙이 가능해지고, 결과적으로 ROI 문제를 크게 개선할 수 있습니다.

LLM 기반 서비스 최적화를 위한 NVIDIA 기술 스택 

NVIDIA TensorRT-LLM

NVIDIA TensorRT-LLM은 오픈소스 라이브러리로, 거대 언어 모델(LLM)의 추론 성능을 GPU 환경에서 극대화합니다. 최신 LLM(GPT, Llama, Mistral 등)과 다양한 구조(디코더, 인코더-디코더)를 손쉽게 배포·구동할 수 있으며, TensorRT 딥러닝 컴파일러, 고성능 GPU 커널, 메모리 최적화 기술로 기존 대비 최대 8배까지 속도를 높입니다. 또한 멀티 GPU, 멀티 노드를 지원해 대규모 병렬화와 확장에 유리합니다. BF16, FP16, INT8, FP8, MXFP4 등 다양한 정밀도의 양자화와 GPU 메모리 사용율 절감, 낮은 지연 시간, 높은 처리량을 제공합니다. 파이썬 API로 별도 CUDA나 C++ 지식 없이도 쉽게 모델을 최적화하고 활용할 수 있습니다. NVIDIA TensorRT-LLM은 현재 실시간 챗봇, 요약, 검색 등 다양한 기업용·연구용 AI 서비스에 적용되고 있습니다.

보다 자세한 내용은 여기에서 확인할 수 있습니다.

NVIDIA MoE 아키텍처 최적화 기술

MoE 아키텍처의 최적화는 크게 라우팅(Routing), Grouped GEMM (General Matrix Multiplication), 그리고 병렬화 전략, XQA (eXended Query Attention) 최적화로 나눌 수 있습니다. 라우팅 단계에서 핵심 과제는 토큰을 Top-K expert로 빠르게 분배하는 것입니다. 이를 위해 병렬 리덕션 (Parallel Reduction) 기반 알고리즘과 공유 메모리 최적화를 적용해 저지연 시나리오를 지원합니다. 토큰 수에 따라 싱글 블록, 클러스터, 멀티 패스 변형을 사용해 효율성을 극대화하며, 커널을 리팩토링하면 새로운 라우팅 방식을 통합하기가 용이해집니다. Grouped GEMM은 expert 연산을 함께 묶어 GPU에서 효율적인 병렬 실행을 가능하게 하며, 파이널라이즈 퓨전 (Finalize Fusion)과 같은 기법을 통해 메모리 접근을 추가로 줄일 수 있습니다. Grouped GEMM 에서 Hopper 아키텍처의 주요 기능으로는 TMA(Tensor Memory Accelerator)와 워프 스페셜라이제이션(Warp Specialization)이 있으며, 이를 통해 Tensor 코어 연산과 메모리 연산을 효율적으로 겹쳐서 처리할 수 있습니다. 마지막으로, TP (Tensor Parallelism), EP (Expert Parallelism), DEP (Data & Expert Parallelism)과 같은 병렬화 전략을 통해 대규모 모델의 확장성과 성능을 확보할 수 있습니다.

NVIDIA 멀티헤드 어텐션 커널 최적화 기술

XQA는 생성 단계에서 고성능 추론을 위해 최적화된 멀티헤드 어텐션 커널입니다. 기존의 멀티헤드 어텐션의 MQA(Multi-Query Attention)과 GQA(Grouped-Query Attention) 구현은 L2 대역폭 병목, FP8에서 FP32로의 변환 오버헤드, 그리고 Flash Attention과 같은 one-pass 알고리즘을 사용하지 않는 등의 한계를 가지고 있었습니다. 

XQA는 이러한 문제들을 DRAM 대역폭 극대화, 빠른 JIT 컴파일, 자원 효율성 향상을 통해 해결합니다. XQA의 핵심 최적화는 연산 워크로드를 Q(Query) 헤드가 아닌 K(Key)와 V(Value) 헤드를 기준으로 분할한다는 점입니다. 

이를 통해 K/V 데이터를 한 번만 로드하면 되며, 기존 커널들처럼 Q 헤드마다 반복해서 로드할 필요가 없습니다. 두 번째 핵심 최적화는 수학 연산에 Tensor 코어를 활용해 계산 성능을 크게 향상시킨 것입니다.

TensorRT-Model-Optimizer

추가적으로 H200 GPU의 리소스를 최대한 활용해 추론 병목 현상을 해소하고 처리량을 극대화하기 위해 FP8 양자화를 사용할 수 있습니다. FP8을 사용하면 모델 가중치와 K/V 캐시의 메모리 사용량을 절반으로 줄여, 더 높은 배치사이즈와 더 많은 동시 사용자 서빙이 가능해지고, GPU 활용률과 ROI를 극대화할 수 있습니다. NVIDIA는 FP8 양자화를 위한 도구로 NVIDIA TensorRT-Model-Optimizer를 제공하고 있습니다. 

NVIDIA TensorRT-Model-Optimizer는 딥러닝 모델을 NVIDIA GPU 환경에 최적화하는 도구입니다.
PyTorch 및 ONNX 기반 모델을 위해 트레이닝 후 양자화(INT8, FP8, INT4 등)와 희소성 같은 기술을 적용해 추론 속도와 효율을 크게 높여줍니다.

TensorRT-LLM이나 TensorRT 런타임에서 손쉽게 배포 가능한 최적화된 체크포인트를 생성하며, Python API 기반으로 여러 최적화 기법을 손쉽게 적용할 수 있습니다. 최신 Blackwell, Hopper, Ampere, Ada Lovelace GPU 아키텍처를 지원하며, 메모리 절감과 품질 유지에 효과적인 솔루션입니다.

보다 자세한 내용은 여기에서 확인할 수 있습니다.

Kakao MoE 모델 TensoRT-LLM FP8 양자화 서빙

TensorRT-LLM과 TensorRT-Model-Optimizer을 활용한 FP8 최적화 과정은 크게 두 단계로 나뉩니다.

  1. FP8 양자화 변환: TensorRT-Model-Optimizer를 사용해 모델 가중치와 샘플 데이터 셋으로 Tensor별 스케일링 팩터를 계산하고 양자화된 모델 체크포인트를 생성합니다. Huggingface 모델 레파지토리의 FP8 체크포인트는 block-wise 기반으로 되어 있기 때문에, 이를 FP8 tensor-wise 포맷으로 변환해야 합니다. 아래는 TensorRT-Model-Optimizer를 사용해서 Huggingface 레파지토리에 있는 MoE 모델을 FP8 양자화하는 예시입니다. 
#TensorRT-Model-Optimizer github 리포지토리 clone
git clone https://github.com/NVIDIA/TensorRT-Model-Optimizer.git
#TensorRT-Model-Optimizer python package 설치
pip install -U "nvidia-modelopt[all]"
#BF16 MoE 모델을 불러와서 FP8 tensor-wise 양자화 수행
cd TensorRT-Model-Optimizer/examples/llm_ptq
./scripts/huggingface_example.sh --model ./Kanana-Flex-30B-A3B  --quant fp8 --export_fmt hf
  1. 엔진 빌드: TensoRT-LLM을 사용해 양자화된 체크포인트를 실제 GPU에서 실행 가능한 고성능 추론 엔진으로 빌드합니다. TensorRT-LLM은 trtllm-serve를 통해 손쉽게 OpenAI API와 호환 가능한 서빙을 제공합니다. 아래 예시를 통해 H200 8 GPU에서 FP8 tensor-wise 포맷으로 양자화된 모델을 로드하고 Pytorch 백엔드로 빌드 후 서빙할 수 있습니다. 
trtllm-serve serve ./Kanana-Flex-30B-A3B_fp8 --backend pytorch --max_batch_size 128 --host 0.0.0.0 --port 13121 --max_num_tokens 8192 --max_seq_len 8192 --tp_size 8 --ep_size 8 --kv_cache_free_gpu_memory_fraction 0.8 --num_postprocess_workers 4 --extra_llm_api_options ./extra_config.yaml

서빙시 사용된 extra_config.yaml 파일로 런치 오버헤드를 줄이기 위해 CUDA Graph 지원 옵션과 오버랩 스케줄러(Overlap Scheduler)를 사용해서 GPU자원을 효율적으로 사용하는 옵션을 아래와 같이 사용했습니다. 

pytorch_backend_config: 
    use_cuda_graph: true 
    disable_overlap_scheduler: false

LLM 서빙을 위한 성능 최적화는 처리량과 지연 시간을 동시에 개선해야 하는 과제가 있습니다. 현재 LLM 서빙에 가장 널리 사용되는 추론 백엔드 플랫폼인 SGLang, vLLM과 NVIDIA TensorRT-LLM의 성능을 벤치마크 데이터를 통해 심층적으로 비교 분석합니다.

어떤 플랫폼이 더 많은 요청을 빠르게 처리하는지, 그리고 FP8과 같은 최신 최적화 기술이 성능에 어떤 영향을 미치는지 구체적인 수치를 통해 확인해 보겠습니다. 

성능 평가는 아래 핵심 지표를 중심으로 이루어집니다. 

  • 처리량(Throughput, req/s): 초당 요청 처리수로, 높을수록 좋습니다. 
  • 첫 번째 토큰 생성 시간(p99 TTFT, ms): 99%의 요청에 대해 첫 토큰이 생성되기까지 걸리는 시간으로, 낮을수록 좋습니다.
  • 출력 토큰 생성 시간(p99 TPOT, ms): 99%의 요청에 대해 모델이 토큰을 생성하는 속도를 나타내고, 낮을수록 좋습니다.
  • 토큰 간 지연 시간(p99 ITL, ms): 99%의 요청에 대해 토큰과 토큰 사이의 지연 시간으로, 낮을수록 좋습니다.

성능 측정 결과

각 플랫폼의 BF16 데이터 타입 기준의 성능을 보여줍니다. 

플랫폼Throughput (req/s)p99 TTFT (ms)
SGLang12.9821179.18
TensorRT-LLM24.628151.78
TensorRT-LLM34.9915175.59
TensorRT-LLM48.987791.68
vLLM54.2087767.66
vLLM67.549631.17
표 1. Kanana-Flex-30B-A3B 모델의 각 플랫폼의 버전별 처리량과 지연 시간 
그림 1. Kanana-Flex-30B-A3B 모델의 각 플랫폼의 버전별 처리량
BF16 데이터 타입, 4k 입력 토큰, 256 출력 토큰, 32 동시 요청
각 플랫폼 버전 10.4.6, 20.20.0rc3, 30.21.0rc0, 40.21.0rc1, 50.9.0, 60.9.1

이미지 제공: Kakao

TensorRT-LLM 4는 8.98 req/s 처리량과 7791.68ms 첫 번째 토큰 생성 시간(TTFT, Time to First Token)에서 모두 우수한 성능을 보여줍니다. H200의 하드웨어 성능을 극대화시키기 위해서 FP8 양자화를 적용했을 때의 BF16대비 향상율을 보여줍니다. FP8은 연산 속도와 메모리 효율을 높이는 핵심 최적화 기법입니다.

플랫폼처리량 향상율p99 TPOT 향상율p99 ITL 향상율TTFT 향상율
SGLang 121.0%–37.9 %5.5%-9.7% 
TensorRT-LLM 236.9%32.2%12.5%29.5% 
VLLM 30.6%0.8%0.3%16.3%
표 2. FP8에서의 각 플랫폼의 버전별 처리량과 지연 시간 향상치
각 플랫폼 버전 10.4.6, 20.21.0rc1, 30.9.1

플랫폼별 FP8 성능 향상치를 비교해보면, TensorRT-LLM이 처리량과 지연 시간 모두에서 가장 뛰어난 결과를 보여주었습니다. 서비스의 목표는 컴퓨팅 리소스의 ROI를 극대화하는 것인데, 높은 처리량과 낮은 지연 시간을 동시에 달성한 TensorRT-LLM은 이러한 요구를 충족시키는 최적의 결과를 제시했습니다. 

이러한 결과를 얻기 위해서는 몇 가지 절차가 필요합니다. Huggingface의 block-wise FP8 모델을 그대로 TensorRT-LLM에 적용할 경우 기대만큼의 성능 향상을 얻기 어렵습니다. Hopper 아키텍처는 FP8 tensor-wise 구조에 최적화되어 있으므로, tensor-wise FP8 양자화 변환을 거쳐야 최적의 성능을 발휘할 수 있습니다. 아래는 TensorRT-Model-Optimizer의 FP8 양자화 기술을 통해 변환된 성능을 보여줍니다.

모델 (데이터타입)처리량 (req/s)p99 TTFT (ms)토큰 처리량  (tokens/s)
Kanana-Flex-30B-A3B (BF16)8.988619.0835061.5
Kanana-Flex-30B-A3B (FP81)6.169768.8128206.9
Kanana-Flex-30B-A3B (FP82)10.955712.8951592.8
표 3. TensorRT-LLM에서의 BF16, FP8 block-wise, FP8 tensor-wise 포맷 변환에서의 성능
FP8과 BF16 데이터 타입, 4k 입력 토큰, 256 출력 토큰, 32 동시 요청
1FP8 Block-wise 포맷, 2BF8 tensor-wise 포맷

Kanana-Flex-30B-A3B (FP82) 처리량이 10.95 req/s로 BF16 대비 43% 향상율을 가지고, TTFT는 5713ms로 BF16 대비 34%의 시간을 단축시켰습니다. 특히 H200 GPU 환경에서는 FP8 tensor-wise 포맷이 FP8 block-wise 대비 더 높은 처리량과 낮은 지연 시간을 보여주고 있습니다.

FP8 캘리브레이션

모델의 가중치와 활성화 Tensor는 각기 다른 값의 분포와 범위를 가집니다. 만약 모든 Tensor에 동일한 스케일링 팩터를 적용한다면, 값의 분포가 넓은 Tensor에서는 정밀도 손실이 크거나 오버플로우/언더플로우가 발생해 정확도가 심각하게 저하될 수 있습니다.

FP8 Tensor별 양자화 (Tensor-wise quantization)은 이러한 문제를 해결합니다. 각 Tensor(가중치, 활성화 등)가 가진 고유의 값 범위를 분석 Tensor마다 독립적인 스케일링 팩터를 적용하는 방식입니다. 이를 통해 8비트라는 제한된 표현 범위 내에서 각 Tensor의 정보를 최대한 보존해 정확도 손실을 최소화할 수 있습니다. 

아래는 TensorRT-Model-Optimizer에서 제공하는 PTQ(Post-Training Quantization)을 수행하는 예시입니다. 캘리브레이션에 사용된 데이터셋은 실제 use case 에 맞는 약 1,000개의  문장 정도로 충분히 좋은 정확도를 보여줍니다.

#
cd TensorRT-Model-Optimizer/examples/llm_ptq
python hf_ptq.py --pyt_ckpt_path=./Kanana-Flex-30B-A3B_fp8  --export_path=./Kanana-Flex-30B-A3B_fp8-ptq --qformat=fp8 --export_fmt=hf
그림 2. 데이터 타입별 정확도 비교 , 이미지 제공: Kakao

FP8 Tensor-wise 양자화 모델은 기존 BF16 모델과 비교했을 때 다국어 및 한국어의 IF(Instruction Following) 능력 측정 테스트와 NR(Non-reasoning) 능력 측정 테스트에서 FP8 Tensor-wise 모델 83.17점, BF16 모델 81.67점으로 평균적으로1.5점 더 높은 점수를 기록했습니다. 이는 FP8 Tensor-wise 양자화 기술은 모델 경량화와 추론 속도를 높이는 기술적 이점을 넘어서 정확도까지 향상시킬 수 있음을 보여줬습니다. 

결론

Kakao는 MoE 아키텍처 기반 서비스의 서빙 효율을 높이기 위한 기술적 접근법을 모색해 왔습니다. MoE 모델은 전문가 네트워크 간의 통신 오버헤드와 동적 라우팅 과정에서 발생하는 지연 시간이 커서, 실제 상용 서비스로의 확장이 쉽지 않았습니다.

이를 해결하기 위해 NVIDIA TensorRT-LLM을 도입했습니다. TensorRT-LLM은 MoE 전용 최적화 커널과 FP8 양자화 기술을 통해 서비스 수준의 성능 요구를 충족시켰으며, TensorRT Model Optimizer의 캘리브레이션 기능을 활용해 양자화로 인한 정확도 손실을 최소화하면서 GPU 활용률과 전체 처리량을 크게 개선했습니다.

이번 기술적 경험을 바탕으로 Kakao는 앞으로 해당 기술을 실제 서비스에 적용해, 사용자에게 더 빠르고 안정적인 고품질 AI 서비스를 제공할 수 있을 것으로 기대하고 있습니다.

Discuss (0)

Tags