Reddit

Running Qwen3.8-Flash-Next locally on a 12GB VRAM card

12GB VRAM 카드에서 Qwen3.8-Flash-Next 로컬 구동하기 — RTX 4070 + 64GB RAM으로 177B MoE를 20 tok/s로

Qwen4 아키텍처 프리뷰인 177B MoE 모델 Qwen3.8-Flash-Next를 RTX 4070 12GB + 64GB RAM 환경에서 초당 20토큰 이상으로 디코딩한 실전 가이드입니다. 핵심은 51B n-gram 테이블을 RAM에 올리지 않고 mmap으로 SSD에서 지연 페이징하는 3계층 메모리 배치이며, AtomicChat의 샤드 분리 퀀트와 llama.cpp master의 동적 레이어 오프로드가 성능을 좌우합니다.

본문

Qwen3.8-Flash-Next(Qwen4 아키텍처의 qwen4exp 프리뷰)는 125B-A6B MoE에 51B n-gram 룩업 테이블과 4B MTP 헤드를 더한 총 177B 파라미터 모델입니다. 저자는 이 모델이 12GB VRAM + 64GB RAM이라는 일반적인 데스크톱 사양에서 실행 가능한 이유를 테이블의 특성에서 찾습니다. n-gram 테이블은 일반적인 가중치가 아니라 3토큰 해시 룩업용 거대 임베딩으로, 토큰당 36GB 주소 공간 중 약 2.7KB만 읽기 때문에 — 1,300만 분의 1의 읽기 비율 — NVMe가 100µs 미만으로 응답할 수 있어 RAM에 상주할 필요가 없습니다. 반면 MoE expert는 토큰당 약 2.5GB의 활성 가중치를 읽어 디스크에서 직접 읽는 것은 불가능합니다. 이 비대칭성이 VRAM(dense + 일부 expert 레이어 + KV), 시스템 RAM(나머지 46개 MoE 레이어), SSD(n-gram 테이블 전체)라는 세 계층 배치를 가능하게 합니다.

퀀트 선택과 메모리 장부

사용된 파일은 AtomicChat의 AD-4.27bpw-Q4_K_M-M64(88 GiB, 가중치 약 52 GiB + n-gram 테이블 35.8 GiB)입니다. 이 빌드의 결정적 장점은 테이블이 per_layer_token_embd.weight라는 단일 텐서로 샤드 2에 분리되어 있다는 점으로, mmap을 통한 SSD 오프로드 경로가 깔끔해집니다. Unsloth 퀀트는 테이블이 가중치 샤드에 인터리브되어 전체 파일을 상주시키거나 리패킹이 필요합니다. 품질 측면에서도 imatrix 튜닝으로 KLD 0.0842, bf16 대비 top-1 일치율 89.5%를 기록해 동급 크기의 Unsloth 빌드를 크게 앞섭니다. 저자가 제시한 휴리스틱은 '파일 크기 × 0.75 = RAM+VRAM에 있어야 할 백본'인데, 이산 GPU에서는 VRAM이 RAM 예산을 보조하므로 88 GiB 파일을 VRAM 10 GiB + RAM 45.6 GiB + SSD 32.4 GiB로 분산한 것이 실측 장부입니다.

빌드와 실행 플래그

아키텍처 지원, lazy tensor reading, fused MoE 커널이 모두 upstream llama.cpp master(b78a39a2f)에 머지되어 표준 CUDA 빌드(sm89)만으로 동작합니다. 핵심 플래그는 --fit on --fit-target 512(GPU에 dense/attention과 가능한 한 많은 expert 레이어를 자동 배치, 512MiB 여유 확보), -b 4096 -ub 2048(약 45GiB의 CPU expert 가중치를 단일 패스로 스트리밍해 프리필 303~385 tok/s 달성), --lazy-mode on(테이블을 프리페치 없이 온디맨드 폴트인), -ctk q8_0 -ctv q8_0(KV 캐시 양자화로 64k 컨텍스트를 VRAM에 배치)입니다. 이 글의 특이점은 다른 모델과 달리 mmap을 켜두는 것이 오프로드 메커니즘이라는 점으로, --no-mmap --mlock은 64GB 환경에서 즉사라고 명시합니다. 샘플링은 Qwen thinking-mode 기본값(temp 1.0 / top-p 0.95 / top-k 20)을 따릅니다.

벤치마크: 20 tok/s 장벽 돌파

RTX 4070 12GB + DDR5-5600 환경에서 6태스크 고유 프롬프트 코퍼스(16k 컨텍스트) 기준, plain master는 평균 19.35 tok/s로 이전 Gold(18.86) 대비 +2.6%, ik_llama base(18.00) 대비 +7.5%를 기록해 새 Gold 기준으로 승격되었습니다. 특히 ik_llama의 MTP 구성(16.01~16.15)보다 빨라 ik_llama 유지 필요성이 사라졌습니다. Daniel Han의 PR #28243과 컴팩트 1.78GB shared-Q4_K_M 드래프트 헤드를 조합하면 절약된 VRAM으로 -ncmoe 45(GPU에 MoE 레이어 3개)가 가능해져 평균 20.65 tok/s, SQL/코드에서 최대 22.4 tok/s로 모든 태스크에서 20 tok/s를 넘습니다. 드래프트 수용률은 77~96%입니다. 비전 티어(mmproj-F16)는 18.2~18.6 tok/s입니다.

실패 사례와 주의점

콜드 스타트 시 첫 생성은 NVMe 페이지인 과도기로 10~14 tok/s에서 시작해 약 1,000토큰 후 정상 상태로 수렴하므로 콜드 수치로 판단하면 안 됩니다. CPU 파워 거버너가 가장 큰 레버로, powersave에서 6.5 tok/s이던 것이 performance로 전환만으로 12.2 tok/s가 되었고, 스레드는 -t 10이 최적이었습니다. -ot 'exps=CPU' 오버라이드나 -ngl 99 단독 사용, 테이블 이저 프리페치는 모두 실패로 기록되었습니다. n-gram 스페큘레이션(--spec-type ngram-mod)은 반복 콘텐츠에서 +20~90% 버스트(측정 최대 18.9→35.9 t/s)를 주지만 신규 텍스트에는 효과가 없어, 범용으로는 신경망 MTP가 +7~10%의 일관된 이득을 줍니다. 또한 64GB 환경에서는 zram 스왑이 필수이며, MTP 효과는 RAM 대역폭 의존적이라 DDR5-5600 기준 결과라는 점을 명시합니다. 131k q8_0 KV는 CUDA 세그폴트가 발생해 업스트림 리포트 대상으로 남겼습니다.

Reddit 반응

  • @u/DisastrousAd2612 — DDR5가 큰 차이를 만든다고 지적합니다. 본인은 3090 + 64GB DDR4 환경에서 GPU가 더 좋음에도 20 t/s를 안정적으로 못 낸다며, 활성 expert만 VRAM에 올릴 수 있다면 이후 속도는 RAM 속도가 병목이라고 분석했습니다.
  • @u/Stratbasher_ — 인상적이라며 직접 시도해보겠다고 합니다. 20 t/s면 밤새 돌리는 작업에 겨우 실용적이라고 평가했습니다.
  • @u/asssuber — RTX 3060 12GB + 96GB RAM으로 구성을 시도 중이며, 컨텍스트 상황과 AtomicChat 퀀트가 Unsloth보다 나은 이유를 질문했습니다.
  • @u/niacolhealth — 51B n-gram 테이블이 Mixtral 8x7B 전체보다 큰데 이제 그저 오프로드되는 부속물이 되었다는 점에 놀라움을 표했습니다.
  • @u/UNO10100f — 4070 12GB + 32GB DDR4-3200에서 80~100k 컨텍스트로 약 10 t/s가 나온다고 보고하며, 16GB VRAM 두 번째 GPU를 주문했으니 효과를 공유하겠다고 했습니다.

원문: carteakey.dev / 번역·요약: Trawling