들어가며: LLM 서빙의 병목, 메모리

LLM(대규모 언어 모델) 서빙 인프라를 운영하다 보면 GPU 메모리가 전쟁터라는 말을 자주 듣습니다. 특히 최근 주목받는 Kimi K2.6이나 GLM 5.2 같은 모델들은 수십억 개의 파라미터와 긴 컨텍스트를 처리해야 하기 때문에, 단순히 모델 가중치만 올려둔다고 끝이 아닙니다.

Cloudflare의 Workers AI 플랫폼은 전 세계 데이터 센터의 GPU에서 이런 대형 모델들을 서빙하고 있습니다. 이번에 공개된 사례에서는 단순히 '빠르게' 만드는 것을 넘어, **'더 많은 요청을 같은 하드웨어에 수용'**하는 데 초점을 맞췄습니다. 핵심은 세 가지입니다.

  1. KV 캐시 양자화 (FP8)
  2. 모델 가중치 압축 (INT4)
  3. 공유 캐시 보호 (무결성 검증)

이 글에서는 각 기법이 왜 필요하고, 실제 성능 지표로 어떻게 검증됐는지 살펴보겠습니다.

Cloudflare data center GPU servers running large language model inference for Workers AI platform Development Concept Image

본론 1: KV 캐시를 FP8로 줄여 2배 많은 컨텍스트 확보

왜 KV 캐시가 문제인가?

모델이 텍스트를 생성할 때, 이미 처리한 토큰의 Attention Key(K)와 Value(V)를 KV 캐시라는 구조에 저장합니다. 이 캐시 덕분에 긴 대화에서 매번 전체 문맥을 다시 읽지 않아도 됩니다. 문제는 이 캐시가 GPU 메모리의 상당 부분을 차지한다는 점입니다.

기본적으로 KV 캐시는 16비트 정밀도(BF16)로 저장됩니다. Cloudflare는 이를 8비트 부동소수점(FP8, e4m3)으로 바꿔 캐시 크기를 절반으로 줄였습니다. Kimi K2.6 기준으로, 메모리에 보관할 수 있는 컨텍스트가 약 68만 6천 토큰에서 137만 토큰으로 2배 늘어났습니다.

성능 영향: 단순 속도가 아니라 '수용량'의 문제

# 개념 코드: KV 캐시 데이터 타입 변환 예시
import torch

# 기존 BF16 캐시 (메모리 사용량 2배)
k_cache_bf16 = torch.randn(4096, 128, dtype=torch.bfloat16)

# FP8로 변환 (메모리 사용량 절반)
from torchao.quantization import quantize_
quantize_(k_cache_bf16, fp8_e4m3)

print(f"BF16 메모리: {k_cache_bf16.element_size() * k_cache_bf16.nelement() / 1024**2:.2f} MB")
print(f"FP8 메모리: {k_cache_bf16.element_size() // 2 * k_cache_bf16.nelement() / 1024**2:.2f} MB")

아래 표는 Kimi K2.6 디코딩(생성) 단계에서 H200 GPU의 동시 요청 수에 따른 처리량을 비교한 것입니다. 중요한 포인트는 BF16이 단일 요청에서 소폭 빠르지만, 32개 동시 요청에서 메모리 한계에 도달한다는 점입니다.

동시 요청 수BF16 KV 캐시 (tok/s)FP8 KV 캐시 (tok/s)
1137125
8731689
161,1061,028
321,5581,489
64OOM2,192

FP8은 BF16의 최대 처리량(1,558 tok/s)보다 약 41% 높은 2,192 tok/s를 기록했고, 토큰당 비용은 약 30% 절감됐습니다. **핵심은 '더 빠른 속도'가 아니라 '더 많은 요청 수용'**이라는 점입니다.

정확도는 동일한가?

벤치마크BF16 KVFP8 KV
GSM8K94.2494.09
ARC-Easy89.0689.14
ARC-Challenge66.7267.49
MMLU89.1189.04
MMLU-Pro80.2979.29
Tool-call 정확도92.2%92.6%

벤치마크 결과 FP8과 BF16은 사실상 동일한 정확도를 보여줍니다. 실무에서 적용해도 모델 품질 저하 없이 메모리 효율을 높일 수 있는 셈입니다.

Diagram showing KV cache quantization process reducing memory usage for Kimi and GLM models Technical Structure Concept

본론 2: 모델 가중치 INT4 압축과 캐시 보호

가중치 압축: 705GB → 421GB

KV 캐시 다음으로 메모리를 차지하는 것은 모델 가중치입니다. GLM 5.2의 경우, Cloudflare는 가중치를 8비트 부동소수점(FP8)에서 4비트 정수(INT4)로 압축했습니다. 체크포인트 크기가 705GB에서 421GB로 약 40% 줄었고, 8-way 텐서 병렬 배포 기준 GPU당 메모리 사용량이 약 88GB에서 52GB로 감소했습니다.

# 개념 코드: FP8 vs INT4 가중치 메모리 비교
model_size_params = 400_000_000_000  # 400B 파라미터 가정

fp8_bytes = model_size_params * 1  # 8bit = 1byte
int4_bytes = model_size_params * 0.5  # 4bit = 0.5byte

print(f"FP8 모델 크기: {fp8_bytes / 1024**3:.1f} GB")
print(f"INT4 모델 크기: {int4_bytes / 1024**3:.1f} GB")

디코딩 단계에서는 가중치를 GPU 메모리에서 스트리밍하며 토큰을 생성하므로, 메모리 대역폭이 곧 속도입니다. INT4로 압축하면 읽어야 할 데이터가 줄어들어 단일 요청 기준 처리량이 55% 향상됩니다.

동시 요청 수GLM FP8 (tok/s)GLM INT4 (tok/s)INT4 이득
16092+55%
8425513+21%
16683825+21%
329941,267+27%
641,6721,933+16%

단, 프리필(Prefill) 단계는 연산량이 많아 INT4가 오히려 느립니다. FP8은 초당 10,160 토큰, INT4는 8,660 토큰입니다. 이 때문에 Cloudflare는 **프리필과 디코드를 분리(Disaggregation)**해서 각각 유리한 방식을 적용합니다.

공유 캐시 보호: 10억분의 1 확률도 용납할 수 없다

양자화와 압축 덕분에 수백 개의 요청이 같은 GPU 메모리를 공유하게 됐습니다. 효율성은 좋지만, 캐시 페이지를 잘못 참조하면 다른 사용자의 데이터가 섞일 수 있는 위험이 생깁니다. Cloudflare는 이를 방지하기 위해 KV 캐시 무결성 검증을 구현했습니다.

  • 모든 물리적 캐시 페이지에는 재할당 시 변경되는 태그를 부여합니다.
  • 서버는 각 요청이 사용할 페이지와 태그 매핑을 기록합니다.
  • 디코딩 전에 매핑을 확인하고, 불일치가 발견되면 해당 요청을 중단합니다.

이 검증의 성능 비용은 매우 낮습니다.

동시성처리량 변화p95 지연시간 변화
1-0.53%+0.42%
4-0.79%+0.63%
8-0.43%+0.80%

비용이 1% 미만이기 때문에, 기본적으로 활성화해도 서비스 품질에 영향을 주지 않습니다.

Cloud infrastructure visualization showing optimized model serving with FP8 and INT4 compression Algorithm Concept Visual

결론: 실무 적용을 위한 관점과 다음 단계

한국 개발 생태계에서의 적용 맥락

국내에서도 LLM 서빙에 GPU를 사용하는 스타트업과 대기업이 늘고 있습니다. 하지만 대부분은 단순히 GPU를 추가하는 방식으로 확장하고 있습니다. 이번 Cloudflare 사례는 **'소프트웨어 최적화로 하드웨어 효율을 극대화'**하는 접근법을 보여줍니다. 특히 한국의 클라우드 비용이 높은 상황에서, KV 캐시 양자화와 가중치 압축은 즉시 비용 절감 효과를 기대할 수 있는 전략입니다.

이 기술의 한계 또는 주의사항

  • 정확도 미세 변화: FP8과 INT4 모두 벤치마크에서 유의미한 차이가 없지만, 특정 도메인(예: 의료, 법률)에서는 미세한 차이가 민감할 수 있습니다.
  • 프리필/디코드 분리 필요: INT4는 디코드에만 유리하므로, 아키텍처를 분리하지 않으면 오히려 성능이 저하될 수 있습니다.
  • 하드웨어 의존성: FP8 e4m3 변환은 최신 GPU(H100, H200 등)에서만 효율적으로 지원됩니다.

다음 단계 학습 방향

  1. SGLang 프레임워크 학습: 이번 최적화의 기반이 된 오픈소스 서빙 프레임워크입니다.
  2. 양자화 기법 심화: INT4, FP8 외에도 NVFP4, AWQ 등 다양한 기법을 비교해보세요.
  3. 비용 모델링: 동일한 하드웨어에서 처리량이 2배가 되면 비용이 어떻게 변하는지 직접 계산해보는 것을 추천합니다.

함께 보면 좋은 글


본 포스팅은 Cloudflare 블로그 원문을 기반으로 재구성되었습니다.

본 콘텐츠는 신뢰할 수 있는 출처를 바탕으로 AI 도구를 활용하여 초안이 작성되었으며, 편집자의 검토를 거쳐 발행되었습니다. 전문가의 조언을 대체하지 않습니다.