TL;DR
작성자는 2개의 RTX3090과 1개의 RTX3060, 128GB RAM 환경에서 140GB가 넘는 DeepSeek-V4-Flash-0731 4-bit MoE 모델을 llama.cpp로 실행하며 Expert 캐시 교체 방식을 실험했습니다. VRAM으로 이동한 Expert의 RAM 캐시를 해제하고 필요할 때 SSD에서 다시 읽도록 두 패치를 적용한 뒤 dflash drafter와 캐시 예산을 조정해 생성 속도를 7토큰에서 낮은 20토큰대까지 높였지만, 프롬프트 처리는 60토큰/초 아래에 머물렀습니다. 긴 프롬프트에 AD-IQ2_M을 별도로 사용하자 프롬프트 처리 단계는 약 200토큰/초까지 빨라졌으나 모델 간 캐시를 재구축해야 해 30K토큰 이상의 입력에서만 전체 이득이 나타났습니다. 두 브랜치와 실행 명령은 GitHub에 공개됐습니다.
커뮤니티 반응
작성자는 두 개의 llama.cpp 브랜치와 실행 명령을 공개해 다른 사용자가 동일한 Expert 캐시 교체 구조를 시험하거나 더 나은 하드웨어에서 재현할 수 있게 했습니다. 게시글에서 확인되는 반응은 주로 실험 아이디어와 구현을 공유하는 데 초점이 있으며, 제안한 프롬프트 처리 전용 모델 방식은 캐시 재구축 비용 때문에 조건부 효과만 보였습니다.
주요 논점
RAM과 VRAM에 같은 Expert 캐시를 중복 보관하지 않고 필요할 때만 SSD에서 읽는 방식은 4-bit MoE 모델을 제한된 메모리에서 실행하는 현실적인 최적화로 평가됩니다. 작성자의 패치와 캐시 예산 조정 뒤 생성 속도가 7토큰에서 낮은 20토큰대까지 오른 수치가 근거입니다.
긴 프롬프트 처리에 더 작은 양자화 모델을 일시적으로 사용하는 방식은 프롬프트 처리 단계와 토큰 생성 단계의 병목이 다를 때 유효할 수 있습니다. AD-IQ2_M이 일부 설정에서 약 200토큰/초를 기록했으며, 30K토큰 이상에서는 전체 처리 시간이 개선됐습니다.
프롬프트 처리 모델과 원래 생성 모델 사이에서 Expert ID만 넘기는 방식은 실제 활성 캐시를 보존하지 못해 디코딩 초기에 큰 비용을 만듭니다. 그 결과 처음 약 1,000토큰의 생성 속도가 낮아지고, 짧은 프롬프트에서는 프롬프트 처리 모델을 교체하는 이득이 사라졌습니다.
합의점 vs 논쟁점
합의점
- 4-bit 양자화 모델은 작성자의 128GB RAM과 GPU 메모리를 합친 용량보다 컸기 때문에 SSD 접근이 병목으로 작용했습니다. Expert 배치만 조정하는 것으로는 SSD에서 발생하는 캐시 미스를 없애지 못했습니다. 모델 크기와 RAM·VRAM·SSD의 실제 구성을 함께 측정해야 속도 차이를 해석할 수 있습니다.
- RAM과 VRAM에 Expert 캐시를 동시에 유지하면 사용 가능한 메모리가 줄어들고 교체 효율이 떨어집니다. VRAM으로 이동한 Expert의 RAM 캐시를 해제하고, 다시 필요할 때 SSD에서 읽어 RAM에 고정하는 방식이 작성자의 실험에서 더 높은 생성 속도로 이어졌습니다. 다만 결과는 캐시 예산과 하드웨어 구성에 따라 달라집니다.
논쟁점
- 프롬프트 처리에 낮은 양자화 모델을 사용한 뒤 높은 양자화 모델로 디코딩을 이어가는 방식은 긴 입력에서만 이점이 나타났습니다. AD-IQ2_M에서 만든 KV 캐시를 원래 모델이 그대로 활용하지 못하고 Expert 캐시를 다시 구성해야 했기 때문입니다. 따라서 낮은 품질의 초기 캐시가 긴 디코딩 과정에서 회복된다는 전제를 실제 품질 평가 없이 일반화하기는 어렵습니다.
- 프롬프트 처리를 원격 서비스에서 수행하고 KV 캐시를 로컬 디코딩으로 이어가는 구상은 비용과 네트워크 전송량을 줄일 가능성이 있지만, 게시글에서는 구현이나 측정 결과가 제시되지 않았습니다. 원격 처리 후 로컬에서 캐시를 호환하는 방법도 확인되지 않았습니다. 현재는 후속 실험 아이디어에 해당합니다.
실용적 조언
- DeepSeek-V4-Flash-0731의 대형 양자화를 시험할 때는 GPU 수와 모델별 메모리뿐 아니라 PCIe 채널, RAM 구성, SSD 읽기 성능, 컨텍스트 길이를 함께 기록해야 합니다. 게시글의 환경은 2개의 RTX3090과 1개의 RTX3060, 128GB DDR5, 156K 컨텍스트였으며 이 조건에서 SSD 접근이 주요 병목으로 나타났습니다.
- llama.cpp에서 Expert 캐시를 사용할 때는 GGML_CUDA_MOE_CACHE_BUDGET_MB, GGML_CUDA_MOE_CACHE_BUDGET_MB_DEVICES, GGML_CUDA_MOE_CACHE_MLOCK, GGML_CUDA_MOE_CACHE_ELITE_PCT 같은 설정을 하드웨어에 맞춰 조정해야 합니다. 작성자는 캐시 예산을 40000MB로 두고 특정 장치 예산을 11800MB로 설정했으며, mlock과 Expert 수요 감쇠 값도 함께 지정했습니다. 동일한 수치를 그대로 적용하기보다 캐시 통계와 생성 속도를 함께 비교해야 합니다.
- 긴 입력에서만 별도 프롬프트 처리 모델을 활성화하도록 최소 토큰 수를 설정하는 편이 적합합니다. 게시글의 두 번째 브랜치는 --prompt-processing-min-tokens 8192와 AD-IQ2_M을 사용했지만, 30K 미만 입력에서는 모델 교체와 초기 캐시 재구축 비용이 이득을 상쇄했습니다. 실제 적용 전에는 프롬프트 길이별 처리 속도와 디코딩 첫 1,000토큰의 속도를 분리해 측정해야 합니다.
섹션별 상세
sudo 'ulimit -l unlimited && \
GGML_CUDA_MOE_CACHE_RESERVE_MB=512 \
GGML_CUDA_MOE_CACHE_ADMIT_AFTER=1 GGML_CUDA_MOE_CACHE_INSERTS=256 \
GGML_CUDA_MOE_CACHE_QUEUE_MB=2048 \
GGML_CUDA_MOE_CACHE_MODE=on \
GGML_CUDA_MOE_CACHE_BUDGET_MB=40000 \
GGML_CUDA_MOE_CACHE_BUDGET_MB_DEVICES=0:11800 \
GGML_CUDA_MOE_CACHE_STATS=1024 \
GGML_CUDA_MOE_CACHE_MLOCK=1 \
GGML_CUDA_MOE_CACHE_ELITE_PCT=60 \
GGML_CUDA_MOE_CACHE_DEMAND_DECAY=4096 \
./llama.cpp/build/bin/llama-server \
--spec-type draft-dspark \
-c 167936 --parallel 1 \
--split-mode layer \
-b 4096 -ub 4096 --flash-attn on \
--moe-cache auto'첫 번째 moe-cache-ousemma 브랜치에서 Expert 캐시 예산과 메모리 잠금 정책을 설정하고 llama.cpp 서버를 실행하는 명령입니다.
sudo 'ulimit -l unlimited && \
LLAMA_EXPERT_SWAP_NO_PRELOAD=0 \
LLAMA_EXPERT_SWAP_PREFETCH=1 \
LLAMA_EXPERT_SWAP_MLOCK=1 \
/home/ous/infra/llama.cpp/build/bin/llama-server \
--prompt-processing-model /home/.cache/huggingface/hub/models--AtomicChat--DeepSeek-V4-Flash-0731-GGUF/snapshots/5f8e5b74544ad821d71aedf658c2b8acdecd4b2b/AD-IQ2_M/DeepSeek-V4-Flash-0731-AD-IQ2_M-00001-of-00004.gguf \
--prompt-processing-min-tokens 8192 \
--moe-cache auto \
--prompt-processing-gpu-moe 0'긴 프롬프트를 처리할 때만 AtomicChat의 AD-IQ2_M 양자화 모델을 사용하도록 설정한 두 번째 브랜치의 핵심 명령입니다.
용어 해설
- Mixture of Experts
- — 하나의 거대한 모델을 여러 Expert로 나누고 토큰마다 일부 Expert만 선택해 계산하는 구조입니다. 선택된 Expert의 가중치를 VRAM에 올리고 나머지를 RAM이나 SSD에서 교체하면 제한된 메모리에서도 모델을 실행할 수 있지만, 교체 비용이 성능을 좌우합니다.
- 커널 페이지 캐시(Kernel Page Cache)
- — 운영체제가 파일에서 읽은 데이터를 메모리에 임시 보관해 이후 접근을 빠르게 만드는 계층입니다. 모델 Expert를 RAM에 고정한다고 해도 캐시 정책과 메모리 잠금 상태에 따라 SSD 재읽기가 발생할 수 있어 대형 양자화 모델의 토큰 생성 속도에 영향을 줍니다.
- 추측 디코딩(Speculative Decoding)
- — 작은 초안 모델이 다음 토큰 후보를 먼저 만들고 큰 모델이 이를 검증해 한 번에 여러 토큰을 처리하는 추론 방식입니다. 글에서는 dflash drafter를 사용해 Expert 교체로 낮아진 생성 속도를 보완했으며, 1,000토큰 이상 생성할 때 초당 토큰 수가 낮은 20대까지 올라갔습니다.
- 메모리 잠금(mlock)
- — 프로세스의 메모리 페이지가 운영체제에 의해 디스크로 교체되지 않도록 고정하는 기능입니다. 글의 패치는 VRAM으로 승격된 Expert의 RAM 캐시를 잠금 해제하고, VRAM에서 내려온 Expert를 필요할 때 SSD에서 읽은 뒤 다시 잠가 RAM과 VRAM에 같은 Expert가 중복 보관되지 않게 합니다.
- 양자화(Quantization)
- — 모델 가중치를 더 적은 비트로 표현해 저장 공간과 메모리 사용량을 줄이는 기법입니다. 글에서는 원본 Expert를 많이 보존하는 4-bit 계열과 더 작은 3-bit 및 IQ_2M 양자화를 서로 다른 추론 단계에 배치해 메모리와 속도를 조정했습니다.
언급된 도구
DeepSeek-V4-Flash-0731 GGUF 모델을 실행하고 MoE Expert 캐시 교체, 프롬프트 처리 모델 전환, dflash 기반 추측 디코딩을 적용하는 추론 프레임워크입니다.
언급된 리소스
AI 요약 · 북마크 · 개인 피드 설정 — 무료
출처 · 인용 안내
인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.