2x3090 + DDR4 환경에서 Qwen3.8-Flash-Next: 전문가 캐시 PR 적용 후 디코드 속도 17 → 25-29 t/s 달성
Qwen3.8-Flash-Next on 2x3090 + DDR4: 17 → 25-29 t/s decode with the expert cache PR
핵심 요약
llama.cpp의 전문가 캐시 PR을 활용해 듀얼 3090 환경에서 Qwen3.8-Flash-Next의 디코드 속도를 크게 향상시킨 사례 공유.
- 전문가 캐시 PR — GPU 기반 LRU 캐시를 통해 VRAM 효율을 높여 디코드 속도 개선함.
- ubatch 최적화 — ubatch를 2048에서 512로 줄여 VRAM을 확보하고 캐시 슬롯을 추가함.
- 성능 향상 — 261k 컨텍스트 환경에서 디코드 속도가 17 t/s에서 최대 29 t/s까지 상승함.
- 하드웨어 설정 — 듀얼 RTX 3090과 대용량 DDR4 RAM을 조합하여 모델을 효율적으로 구동함.
다들 3090 한 장 쓰거나 통합 시스템 쓰는 것 같길래 참고하라고 수치 좀 공유함.
내 현재 세팅: 2x RTX 3090 (PCIe 3.0), 듀얼 Xeon E5-2696 v4, 188 GB 사용 가능 (192GB) DDR4-2133 LRDIMM, llama.cpp, unsloth UD-Q6_K_XL. 48개 expert 레이어 전부 호스트 RAM에 박아두고 나머지는 GPU에 올림. 261k 컨텍스트 풀로 땡기고 f16 KV 사용.
이전: 26k 프롬프트에서 디코드 약 17 t/s, 프리필 약 350 t/s, 131k 깊이에서 디코드 12 t/s.
현재: 짧거나 중간 컨텍스트에서 디코드 25-29 t/s, 131k에서 약 17 t/s, 프리필은 거의 그대로임. 파이썬 코딩 프롬프트로 측정함.
뭐가 바뀌었냐면: PR #27861, GPU 상주 LRU expert 캐시를 썼음. expert 레이어 전체를 VRAM에 처박는 대신, 레이어별로 최근에 쓴 expert만 캐싱하는 방식임. 모델이 토큰 하나 뽑을 때 고르는 expert들이 바로 직전 수십 개 토큰에서 고른 거랑 거의 겹치거든. 그래서 코드 작업할 땐 적중률 80-85% 나오고, 산문 쓸 땐 더 높음. 핵심은 캐시에 VRAM을 할당해준 거임. 그리고 ubatch를 2048에서 512로 낮추니까 GPU당 약 5GB를 확보할 수 있었음(컴퓨트 버퍼가 ubatch에 비례해서 커짐). 덕분에 풀 컨텍스트에서 레이어당 슬롯을 80개에서 135개로 늘림. 대신 긴 프롬프트에서 프리필이 좀 느려지는데, 짧은 프롬프트는 별 영향 없음.
그리고 내 환경에서 아무 효과 없거나 오히려 성능 깎아먹은 것들: 스레드 개수, poll, CPU 마스크, q8 KV, lazy PLE, 산문에서의 n-gram drafts, temp 0.7에서의 MTP(배치 검증할 때 호스트 RAM에서 expert를 다시 읽어와야 해서, greedy 방식이나 아주 깊은 컨텍스트 아니면 손해임), 스텝당 2회 이상의 캐시 업로드(PCIe 3.0 대역폭 다 잡아먹어서 적중률 개박살남).
따라 해보고 싶으면 내 포크 버전 필요 없고, 그냥 마스터 브랜치에 해당 PR만 합치면 됨:
git clone https://github.com/ggml-org/llama.cpp && cd llama.cpp
git fetch origin pull/27861/head:pr-27861 && git merge pr-27861
cmake -B build -DGGML_CUDA=ON && cmake --build build -j
LLAMA_ATTN_ROT_DISABLE=1 numactl --interleave=all build/bin/llama-server -m Qwen3.8-Flash-Next-UD-Q6_K_XL-00001-of-00006.gguf \
-ngl 99 -c 261888 --parallel 1 -fa on \
-ot "ffn_(gate|up|down)_exps\.weight=CUDA_Host,per_layer_token_embd\.weight=CPU" \
--numa distribute -t 16 -tb 44 -b 4096 -ub 512 -ctk f16 -ctv f16 \
--moe-expert-cache 135
캐시 크기는 KV랑 컴퓨트 버퍼 빼고 남는 VRAM에 맞춰서 잡으면 됨. Q6 기준으로 GPU당 슬롯 하나에 100MB 정도 잡히더라. 다음엔 UD-Q4_K_XL 테스트해 볼 예정이고, MTP도 쓸만해지면 다시 건드려 볼 생각임. Daniel PR 계속 지켜보는 중.
나랑 비슷한 세팅 쓰는 놈들이 많을 것 같진 않은데, 혹시 도움 될까 해서 올림. 시도해 볼 만한 방법이나 궁금한 거 있으면 물어봐라.
