vLLM 0.22.1에서 2× Radeon AI PRO R9700 (RDNA4/gfx1201) 구동하기 — 긴 문맥 디코딩 절벽 현상 해결법 (그리고 FP8을 파고들며 배운 점)
2× Radeon AI PRO R9700 (RDNA4/gfx1201) on vLLM 0.22.1 — how we fixed the long-context decode cliff (and what we learned chasing FP8)
핵심 요약
vLLM에서 R9700 듀얼 구성 시 발생하는 긴 문맥 디코딩 성능 저하를 AITER Unified Attention으로 해결한 사례 공유.
- 성능 최적화 — AITER Unified Attention을 통해 긴 문맥 디코딩 성능을 약 3배 향상함
- 버전 호환성 — vLLM 0.22.1에서 gfx1201 지원을 위한 간단한 패치 및 설정법 제시
- FP8의 한계 — RDNA4 환경에서 FP8 KV 캐시는 성능상 이점이 없어 bf16 사용을 권장함
- 하이브리드 모델 대응 — TP=2 구성 시 Gated-DeltaNet 커널 관련 레이아웃 오류 수정 필요
vLLM에서 R9700 여러 개 돌리는 (점점 늘어나는 것 같은) 클럽 사람들을 위해 우리 세팅 공유한다. u/AustinM731한테 진짜 고맙다. 그 사람이 쓴 AITER Unified Attention 글이 우리가 찾은 것 중에 제일 도움 됐거든. 그래서 (a) 이게 진짜 된다는 거 확인해주고, (b) 우리 결과랑 그 사람 결과가 어디가 같고 어디가 다른지 공유하고, (c) 우리처럼 삽질하면서 일주일 날리는 사람 없게 하려고 글 쓴다.
장비 세팅
- GPUs: 2× AMD Radeon AI PRO R9700 (gfx1201 / RDNA4, 각각 32 GB), TP=2
- Board/CPU: ASRock X870E, Ryzen, 60 GB RAM
- OS: Fedora 44 Server, kernel 7.0.11 (아이들 상태에서 100W 먹는 버그는 7.0에서 고쳐짐 — 우린 이제 상관없음)
- Model: Qwen3.6-35B-A3B-FP8 (35B 하이브리드 Gated-DeltaNet + attention MoE, 활성 파라미터 ~3B), 네이티브 262K 컨텍스트
- Serving: MTP speculative decoding (n=3), AITER Unified Attention, bf16 KV cache, TunableOp,
--enable-chunked-prefill
정확한 버전 (참고용)
GPU arch : gfx1201 (RDNA4) ×2, TP=2
OS / kernel : Fedora Linux 44 (Server), kernel 7.0.11-200.fc44
vLLM : 0.22.1
ROCm / HIP : 7.2.x (torch.version.hip = 7.2.53211)
PyTorch : 2.10.0 (+git8514f05)
Triton : 3.6.0
AITER : present (gfx1201 gate relaxed; see below)
base image : vllm/vllm-openai-rocm:v0.22.1 (we run a committed image with 2 one-line patches)
runtime : podman + systemd (--user), --ipc=host, NCCL_PROTO=Simple, ROCR_VISIBLE_DEVICES=0,1
버전 관련 팁: vLLM은 업데이트가 빨라서 릴리즈마다 gfx1201 게이트가 바뀐다. 0.22.1 버전에는 AITER unified-attention 백엔드가 이미 들어와 있음 (그냥 CDNA 전용으로 막혀있을 뿐). 다른 사람들이 썼던 0.19/0.20 이미지에서는 직접 빌드해야 했거든. 그러니까 vLLM 버전에 따라 패치해야 할 부분이 달라지니까, 성능 비교할 때 자기 버전 꼭 밝히는 게 좋다.
진짜 중요한 거: 긴 컨텍스트 디코딩의 절벽 현상
한참 동안 우리는 ~8K 컨텍스트에서만 벤치마크 돌리면서 (~100+ tok/s) 잘 나온다고 좋아했거든. 근데 컨텍스트를 깊게 파보니까 디코딩 속도가 그냥 절벽으로 떨어지더라:
| context | ROCm prefill-decode attn (before) |
|---|---|
| ~8K | ~100 tok/s |
| ~21K | 56 |
| ~79K | 14 |
이 7배 가까운 떡락은 정상적인 메모리 대역폭 감소가 아님. gfx1201에서 최적화 안 된 ROCm 어텐션 경로가 제대로 스케일링이 안 돼서 그런 거임. 해결책은 u/AustinM731이 찾은 그대로임: ()을 쓰는 거.


