RTX 5070 Ti + 9800X3D에서 Qwen3.6-35B-A3B를 79 t/s로 구동하기: --n-cpu-moe 플래그가 핵심
핵심 요약
16GB GPU에서 --n-cpu-moe 설정을 최적화하여 MoE 모델 성능을 54% 향상시킨 사례 공유.
- 성능 최적화 — --n-cpu-moe 플래그를 사용하여 VRAM 활용도를 극대화하고 생성 속도를 54% 향상함.
- 하드웨어 설정 — RTX 5070 Ti와 9800X3D 조합으로 128K 컨텍스트를 효율적으로 처리함.
- Claude 활용 — Claude Opus를 사용하여 하드웨어 튜닝 및 벤치마크 과정을 자동화함.
- 메모리 관리 — -np 1 설정과 -ctk q8_0 옵션으로 VRAM 사용량을 최적화함.
소비자용 하드웨어에서 Qwen3.6-35B-A3B를 최적화하는 데 저녁 시간을 보냈습니다. 재미있는 사실: Claude Opus 4.7($20 구독)이 설정을 빌드하고, 백그라운드에서 서버를 실행하고, 벤치마크를 돌리고, llama.cpp 로그에서 VRAM 분할을 읽고, 튜닝을 반복하게 했습니다. 기본적으로 전체 과정을 자율적으로 수행했죠. 저는 하드웨어 사양과 실행하고 싶은 모델만 알려줬습니다.
일반적인 --cpu-moe 조언이 16GB GPU에서 성능의 54%를 낭비하게 만든다는 점을 공유하고자 합니다.
하드웨어
- GPU: RTX 5070 Ti (16GB GDDR7, Blackwell)
- CPU: Ryzen 9800X3D (96MB L3 V-Cache)
- RAM: 32GB DDR5
- 스택: llama.cpp b8829 (CUDA 13.1, Windows x64)
- 모델:
unsloth/Qwen3.6-35B-A3B-GGUF—UD-Q4_K_M(22.1 GB)
발견한 점 — --cpu-moe vs --n-cpu-moe N
모두가 모든 MoE 전문가를 CPU로 밀어넣는 --cpu-moe를 사용하고 있습니다. 22GB MoE 모델을 16GB GPU에서 돌릴 때 이는 VRAM의 약 1.9GB만 사용되고 나머지 12GB는 놀고 있다는 뜻입니다.
--n-cpu-moe N은 처음 N개 레이어의 전문가를 CPU에 유지하고 나머지는 GPU에 배치합니다. 40개 레이어 모델에서 N=20을 설정하면 VRAM을 제대로 활용할 수 있습니다.
벤치마크 (300토큰 생성, Q4_K_M)
|Config|Gen t/s|Prompt t/s|VRAM used|
|:-|:-|:-|:-|
|--cpu-moe (baseline)|51.2|87.9|3.5 GB|
|--n-cpu-moe 20|78.7|100.6|12.7 GB|
|--n-cpu-moe 20 + -np 1 + 128K ctx|79.3|135.8|13.2 GB|
기존 --cpu-moe 대비 생성 속도 +54%, 프롬프트 속도 +54% 향상. -np 1이 재귀 상태 메모리를 제거해주기 때문에 128K 컨텍스트로의 전환은 사실상 공짜입니다.
작동하는 시작 명령어
llama-server.exe ^
-m "Qwen3.6-35B-A3B-UD-Q4_K_M.gguf" ^
--n-cpu-moe 20 ^
-ngl 99 ^
-np 1 ^
-fa on ^
-ctk q8_0 -ctv q8_0 ^
-c 131072 ^
--temp 0.6 --top-p 0.95 --top-k 20 --min-p 0.0 ^
--presence-penalty 0.0 --repeat-penalty 1.0 ^
--reasoning-budget -1 ^
--host 0.0.0.0 --port 8080
이것은 Unsloth의 "Precise Coding" 샘플링 프리셋입니다. 일반적인 용도로는 --temp 1.0 --presence-penalty 1.5를 사용하세요.
겪었던 문제들 (정확히는 Opus가 해결해준 것들)
-np는 기본값이 auto=4 슬롯입니다. 재귀 상태(약 190MB)에 메모리를 낭비하죠. 단일 사용자 설정(OpenCode 등)에서는-np 1로 설정하세요.--fit-target은 여기서는 도움이 되지 않습니다.-ngl 99+ 으로 이미 결정론적인 제어가 가능합니다.


