원문 캡처 · cqegbert.substack.com
원문 캡처 · cqegbert.substack.com

게임과 AR·VR에서 GPU를 최적화해 온 캐머런 에그버트(Cameron Egbert)가 RTX 3090에서 Qwen3 모델을 시험해 그래픽 최적화 경험이 LLM 추론에도 어떻게 적용되는지 살폈다. llama.cpp로 측정한 결과, 양자화와 Flash Attention은 조건에 따라 처리량이나 메모리 사용량을 개선했지만 추측 디코딩은 모델과 작업에 따라 오히려 느려졌다.

그래픽 최적화와 추론의 공통점

에그버트는 오픈소스 Qwen3 모델을 GGUF 형식으로 실행해 가중치 양자화, Flash Attention, KV 캐시 압축, 추측 디코딩을 시험했다. 주된 벤치마크 대상은 Qwen3-8B였고, 추측 디코딩에는 Qwen3-0.6B와 Qwen3-14B도 사용했다. 주 GPU는 RTX 3090 24GB였으며, 일부 실험에는 RTX 5080 Laptop GPU도 참여했다.

그래픽 작업처럼 추론 최적화에서도 병목이 연산량인지 메모리 대역폭인지 파악하고, 불필요한 데이터 이동을 줄인 뒤 실제로 개선됐는지 측정하는 것이 중요하다는 설명이다. 특히 프롬프트를 처리하는 프리필과 토큰을 하나씩 생성하는 디코드는 서로 다른 작업이다. 프리필은 많은 토큰을 묶어 처리하는 반면, 디코드는 이전 토큰에 의존하며 모델 가중치와 KV 캐시 데이터를 반복해서 읽는다. 따라서 토큰 처리량 하나만으로 성능을 판단하면 병목을 놓칠 수 있다.

양자화와 긴 문맥의 메모리 부담

RTX 3090에서 Qwen3-8B를 비교했을 때 Q4_K_M은 초당 110.5토큰, Q8_0은 78.6토큰을 생성했다. Q4_K_M의 처리량은 41% 높았고, WikiText-2에서 측정한 혼란도(perplexity)는 Q8_0의 8.457에서 8.736으로 약 3.3% 나빠졌다. 혼란도는 낮을수록 좋지만, 사람에게 답변이 유용하거나 진실한지를 직접 평가하는 지표는 아니다.

IQ3_XXS는 3.13GiB로 시험한 양자화 모델 중 가장 빨랐으며 초당 121.6토큰을 기록했다. 다만 혼란도가 더 나빠져 속도나 메모리가 특히 중요한 경우에 고려할 수 있지만 품질 손실을 살펴야 한다. 반대로 Q3_K_M은 Q4_K_M보다 파일 크기가 작았는데도 더 느렸다. 파일 크기뿐 아니라 역양자화 커널과 메모리 배치도 성능에 영향을 줄 수 있다는 점을 보여준다. 이 실험에서는 Q4_K_M을 속도와 품질의 기본 선택지로, Q5_K_M을 더 보수적인 선택지로 제안했다.

Flash Attention은 어텐션 계산을 타일 단위로 처리해 중간 데이터를 메모리에 쓰고 다시 읽는 양을 줄이는 기법이다. Qwen3-8B Q4_K_M을 사용한 시험에서 문맥 길이가 4K일 때 디코드 처리량은 15% 개선됐고, 32K에서는 두 배가 됐다. 프리필은 32K에서 3.5배 빨라졌다. 긴 문맥의 비용을 없애지는 않지만, 문맥이 길수록 효과가 커졌다.

KV 캐시는 생성 과정에서 이전 토큰의 키와 값 정보를 저장하며 문맥 길이에 따라 커진다. 40K 문맥에서 q8_0 KV 캐시는 f16보다 VRAM을 2.61GiB, q4_0은 4.05GiB 덜 사용했다. 하지만 q4_0은 VRAM을 37.7% 줄이는 대신 디코드 속도를 초당 64.9토큰에서 47.6토큰으로 낮췄다. 따라서 이 시험에서는 KV 캐시 양자화가 단일 요청의 최고 속도를 높이는 방법이라기보다 긴 문맥이나 동시 요청을 수용하기 위한 용량 최적화로 나타났다.

추측 디코딩은 손익분기 조건이 중요하다

추측 디코딩은 작은 초안 모델이 여러 토큰을 미리 예측하고 큰 대상 모델이 이를 한꺼번에 검증해, 순차적인 생성 단계를 줄이는 방식이다. Qwen3-8B Q4_K_M을 대상으로 Qwen3-0.6B Q8_0을 초안 모델로 쓴 시험에서는 이 기법이 느려졌다. 온도 0에서 기본 디코드는 초당 117.7토큰이었지만, 가장 빠른 추측 디코딩도 54.3토큰에 그쳤다. 초안 길이가 8일 때는 40.0토큰이었다. 초안 모델을 노트북의 RTX 5080으로 옮긴 분할 GPU 시험은 초당 20.6토큰으로 더 느렸다.

같은 GPU에서 추측 디코딩을 사용하자 RTX 3090 메모리 사용량도 5604MiB에서 6978MiB로 약 1.34GiB 늘었다. 기술 문서 작성 프롬프트에서 초안 토큰 수용률은 초안 길이 4일 때 약 40%, 길이 8일 때 22%였다. 초안 모델을 추가로 실행하는 비용에 비해 대상 모델이 받아들이는 예측이 적어 성능이 떨어진 것으로 분석했다.

다만 반복적인 구조화 출력에서는 ngram 캐시 방식이 기본 초당 116.8토큰에서 157.6토큰으로, 1.35배 빨라졌다. 더 느린 대상 모델인 Qwen3-14B Q4_K_M에서는 초안 모델 기반 추측 디코딩이 초당 33.4토큰에서 39.9토큰으로 개선됐다. 이 결과는 초안 생성과 검증, 스케줄링에 드는 비용보다 받아들인 토큰으로 절약하는 작업이 클 때만 이득이 난다는 점을 보여준다.

이번 결과는 RTX 3090과 llama.cpp CUDA 백엔드에서 특정 Qwen3 모델과 프롬프트 조건으로 얻은 것이다. 에그버트는 양자화는 가중치 데이터 이동량, Flash Attention은 어텐션 메모리 트래픽, KV 캐시 양자화는 메모리 용량, 추측 디코딩은 순차 디코드 병목을 각각 겨냥한다고 정리했다. 최적화 기법마다 효과가 나타나는 조건이 다르므로 먼저 작업의 병목을 확인해야 한다.