Qwen 35B-A3B 12GB VRAM 로컬 추론 최적화 가이드

TL;DR

Qwen 35B-A3B 모델은 12GB VRAM 환경에서도 MoE 오프로딩 최적화를 통해 실용적인 수준의 추론 성능을 달성할 수 있다. -ncmoe 파라미터로 GPU 상주 MoE 블록 수를 제어하면, 32k 컨텍스트 기준 약 43.4 t/s의 생성 속도를 확보 가능하다. 단, 16k 프로필 설정 시 남은 VRAM이 37 MiB에 불과하므로 OOM 방지를 위한 정밀한 메모리 임계값 관리가 필수적이다.

문제 정의: 35B 파라미터 MoE 모델의 로컬 추론 한계

Qwen 35B-A3B와 같은 대규모 Mixture-of-Experts(MoE) 모델을 가용 VRAM이 제한적인 로컬 환경에서 구동하는 것은 메모리 병목의 대표적 사례다. 35B 파라미터 전체를 VRAM에 적재하는 것은 12GB VRAM에서 불가능하며, 필연적으로 CPU 오프로딩에 의존해야 한다.

문제는 오프로딩된 레이어를 참조할 때 발생하는 PCIe 트래픽 병목으로 인해 디코딩 속도가 급격히 저하된다는 점이다. 활성 파라미터가 3B에 불과하더라도, 라우팅된 Expert가 CPU 메모리에 위치하면 병목은 회피할 수 없다. 따라서 12GB VRAM 내에 얼마나 많은 MoE 블록을 상주시키는가가 핵심 최적화 변수가 된다.

MoE 오프로딩 최적화: ncmoe 메커니즘과 벤치마크

llama.cpp 기반 구동 시 -ncmoe 파라미터가 MoE 블록 할당의 핵심 제어 축이다. 낮은 -ncmoe 값은 더 많은 MoE 블록이 GPU에 유지되도록 강제한다.

llama.cpp 소스코드 레벨에서 -ncmoe는 라우터(Router)가 산출한 게이팅 스코어(Gating Score) 기반의 Top-K Expert 선택 시, 오프로드된 CPU 블록으로의 PCIe 트래픽을 억제하는 로직과 연동된다. 낮은 ncmoe 값은 오프로드 대상 MoE 레이어 수를 감소시켜, 라우팅 결과와 무관하게 GPU VRAM 내에서 행렬 연산을 완료할 확률을 강제하는 효과를 낸다.

RTX 3060 12GB, 32GB DDR4-3200 환경에서 Qwen3.6-35B-A3B-MTP-IQ4_XS.gguf 모델을 기준으로 측정한 llama-bench 결과는 다음과 같다.

MoE 오프로드 스윕 (q4 KV, t 11)

ncmoe tg128 (t/s) 비고
22 ~41.6
20 ~41.7
19 ~44.2
18 ~45.9 Edge
17 ~46.6 Safe
16 OOM Cliff (OOM)

ncmoe 16에서는 OOM(Out of Memory)이 발생하여 측정이 불가능하다. 이는 오프로딩 임계값을 너무 공격적으로 설정했을 때 VRAM 한계를 초과하기 때문이다. 반면 ncmoe 17은 안정적인 성능을 보장하는 세이프티 마진이다.

# llama-bench 실행 예제 (ncmoe 18, q8_0 KV 캐시)
llama-bench -m Qwen3.6-35B-A3B-MTP-IQ4_XS.gguf   -ngl 99 -ncmoe 18 -t 9 -ctk q8_0 -ctv q8_0   -p 512 -n 128

실무 패턴: 컨텍스트 크기별 프로파일 튜닝

로컬 LLM 운용 시 컨텍스트 크기와 생성 속도 간의 트레이드오프는 피할 수 없다. Qwen 35B-A3B 모델은 12GB VRAM 환경에서 목적에 맞는 두 가지 프로파일로 운용할 수 있다.

  1. 코딩용 32k 프로필 (ncmoe 20)
    대규모 코드베이스 분석이나 리팩토링 등 긴 컨텍스트가 필요한 작업에 적합하다. 프롬프트 처리 속도 ~88.9 t/s, 생성 속도 ~43.4 t/s를 기록하며, 약 273 MiB의 VRAM 여유를 남긴다. 컨텍스트 크기, 속도, VRAM 사용량 측면에서 균형 잡힌 프로파일이다.
  2. 16k 프로필 (ncmoe 19)
    프롬프트 처리 ~91.5 t/s, 생성 ~44.5 t/s로 32k 프로필보다 약간 빠르지만, 남은 VRAM은 37 MiB에 불과하다. VRAM 한계에 매우 근접해 있어 안정성 측면에서는 위험도가 높다.

국내 핀테크 기업인 토스 등에서 사내 코드 어시스턴트 도입 시 보안 규정으로 인해 클라우드 API 대신 온프레미스(On-premise) 로컬 LLM을 검토하는 사례가 적지 않다. 이 경우 12GB VRAM의 로컬 워크스테이션에서 Qwen 35B-A3B를 구동하는 것은 비용 대비 효율적인 대안이 될 수 있다.

다만, 16k 프로필처럼 VRAM 여유가 37 MiB 수준으로 떨어지는 구성은 다수의 개발자가 동시 접속하는 사내 환경에서 OOM(Out of Memory) 에러를 유발할 수 있으므로, 32k 프로필 이상의 안정적인 VRAM 여유를 확보하는 것이 운영에 유리하다.

주의사항: VRAM 임계값과 성능 급락(Cliff) 회피

프롬프트 처리(프리필) 속도 측정 시 llama-cli의 대화형 Prompt: 라인 수치보다 llama-benchpp512 측정값을 신뢰해야 한다. 대화형 인터페이스는 오버헤드가 섞여 깔끔한 측정이 어렵기 때문이다.

가장 중요한 주의사항은 -ncmoe 값의 임계점이다. ncmoe 18은 Edge, ncmoe 16은 피해야 할 Cliff로 분류된다. 오프로딩 비율을 늘리기 위해 -ncmoe를 무작정 높이면, VRAM 한계를 초과하여 OOM이 발생할 수 있다. 또한 16k 프로필에서 남은 VRAM 37 MiB라는 수치는 매우 적은 여유이므로, 실제 구동 시에는 시스템 모니터링 도구를 통해 OOM 방어선을 스스로 확인해야 한다.

결론

12GB VRAM은 Qwen 35B-A3B 모델을 운용하기에 매우 실용적인 크기처럼 느껴진다(feels like). 적절한 -ncmoe 튜닝만으로도 충분한 MoE 블록을 GPU에 상주시켜 일반 디코딩 성능을 강력하게 유지할 수 있으며, 16k/32k 수준의 유용한 컨텍스트 윈도우를 위한 메모리 여유까지 확보 가능하다.

다만, 37 MiB의 VRAM 여유나 ncmoe 16 이하의 설정은 시스템을 OOM의 위기로 몰아넣을 수 있다. 로컬 환경에서의 MoE 최적화는 단순한 VRAM 크기의 싸움이 아니라, Expert 할당 비율과 PCIe 트래픽 비용 간의 정밀한 밸런싱 게임이다.

출처: Qwen 35B-A3B is very usable with 12GB of VRAM – Reddit

댓글 남기기