
최종 최적화: 128K 컨텍스트의 DeepSeek-V4-Flash-0731을 RTX 3090 1대에서 ~10 tok/s에서 ~15 tok/s로
요약
단일 RTX 3090 환경에서 DeepSeek-V4-Flash-0731 모델의 128K 컨텍스트를 유지하며 추론 속도를 최적화하는 방법을 다룹니다. GPU 오프로딩, KV 캐시 양자화, CPU 전문가 배치 등 다양한 설정 조합을 통해 성능을 개선하는 가이드를 제공합니다.
핵심 포인트
- RTX 3090 1대에서 128K 컨텍스트 구현 가능
- llama.cpp를 활용한 GPU/CPU 메모리 분할 최적화
- MoE 레이어의 CPU 배치를 통한 VRAM 부족 문제 해결
- 양자화 수준에 따른 생성 속도(10~15 tok/s) 비교 분석
저는 단일 RTX 3090에서 DeepSeek-V4-Flash-0731 GGUF를 최적화하는 데 많은 시간을 할애했습니다. 각 구성에 대한 저의 절대적인 요구 사항은 다음과 같았습니다: 모델이 128,000 토큰 (tokens)의 컨텍스트 창(context window)을 유지하면서 사용 가능해야 한다는 점입니다. 저는 GPU 오프로딩 (GPU offloading), CPU 전문가 배치 (CPU expert placement), KV 캐시 양자화 (KV cache quantization), 배치 크기 (batch sizes), 메모리 매핑 (memory mapping) 및 CPU/GPU 메모리 분할의 다양한 조합을 테스트했습니다. 아래의 설정은 제 시스템에서 각 양자화 (quantization) 수준에 대해 최고의 성능을 얻을 수 있게 해주었습니다.
하드웨어 및 소프트웨어
GPU: NVIDIA GeForce RTX 3090 24GB
CPU: AMD Ryzen 9 9900X
RAM: 128GB DDR5-5600 (AMD EXPO 활성화)
메인보드: MSI X870E Gaming Plus WiFi
BIOS: 사용 가능한 최신 버전
백엔드 (Backend): llama.cpp b10291
프론트엔드 (Frontend): 텍스트 생성 웹 인터페이스
운영체제 (OS): Windows
공통 설정
다음 설정은 네 번의 테스트 동안 동일하게 유지되었습니다:
모델 로더 (Model loader): llama.cpp
GPU 레이어 (GPU Layers): 44
컨텍스트 크기 (Context size): 128,000
KV 캐시 유형 (KV cache type): q8_0
분할 모드 (Split mode): 레이어 (layer)
병렬 슬롯 (Parallel slots): 1
스레드 (Threads): 0 / 자동 (automatic)
스레드 배치 (Thread batch): 0 / 자동 (automatic)
배치 크기 (Batch size): 512
마이크로 배치 크기 (Micro batch size): 512
목표 크기 (Target size): 512 MiB
StreamingLLM: 비활성화 (disabled)
KV 오프로딩 (KV offloading): 활성화 (enabled)
no-mmap: 활성화 (enabled)
mlock: 비활성화 (disabled)
NUMA: 비활성화 (disabled)
투기적 디코딩 (Speculative decoding): 비활성화 (disabled)
저는 웹 인터페이스에서 CPU MoE 체크박스를 해제한 상태로 두었으며, --n-cpu-moe를 통해 CPU에 전문가(experts)를 배치하는 것을 명시적으로 제어했습니다. 따라서 각 양자화 단계에서 조정한 주요 매개변수는 전문가 텐서(expert tensors)가 CPU에 머물게 할 MoE 레이어의 수였습니다.
테스트 1/4 — UD-IQ4_XS — 128K ctx에서 ~10 tok/s
양자화 (Quantification): UD-IQ4_XS
전체 오프로딩 (offloading) 시 VRAM 추정치: 135,412 MiB
추가 옵션: --n-cpu-moe 38
로드 시간: 65.83초
평균 생성 속도: ~9.9 tok/s
생성 중 메모리 사용량
시스템 RAM: 약 122 / 125 GiB
전용 VRAM (dedicated VRAM): 약 23.7 / 24.0 GiB
공유 GPU 메모리 (Shared GPU Memory): 약 0.9 GiB
GPU 사용률: 약 81%
CPU 사용률: 약 59%
CPU 클럭 속도: 약 5.36 GHz
이는 테스트된 양자화 중 가장 집약적인 방식으로, 시스템 RAM과 전용 VRAM을 한계치까지 밀어붙입니다.
테스트 2/4 — UD-IQ3_S — 128K ctx에서 ~12.1 tok/s
양자화 (Quantification): UD-IQ3_S
전체 오프로딩 (offloading) 시 VRAM 추정치: 115,330 MiB
추가 옵션: --n-cpu-moe 38
로드 시간: 52.76초
평균 생성 속도: ~12.1 tok/s
생성 중 메모리 사용량
시스템 RAM: 약 105 / 125 GiB
전용 VRAM (dedicated VRAM): 약 22.1 / 24.0 GiB
GPU 사용률: 약 85%
CPU 사용률: 약 55%
CPU 클럭 속도: 약 5.35 GHz
UD-IQ3_S는 UD-IQ4_XS에 비해 RAM 사용량을 약 17 GiB 줄이면서도 생성 속도를 약 22% 향상시킵니다.
테스트 3/4 — UD-IQ3_XXS — 128K ctx에서 ~12.5 tok/s
양자화 (Quantification): UD-IQ3_XXS
전체 오프로딩 (offloading) 시 VRAM 추정치: 103,763 MiB
추가 옵션: --n-cpu-moe 37
로드 시간: 47.76초
평균 생성 속도: ~12.5 tok/s
생성 중 메모리 사용량
전용 VRAM (dedicated VRAM): 실행 중 약 22–23 GiB
GPU 활동: 생성 중단 전까지 높은 수준 유지
작업 관리자 (Task Manager) 스크린샷은 GPU 사용률과 할당된 VRAM이 급격히 떨어지는 것을 볼 수 있듯이 실행 직후에 촬영되었습니다. 따라서 표시된 14 GiB의 시스템 RAM 값은 생성 중의 메모리 사용량을 대표하지 않습니다.
이 구성에서 UD-IQ3_XXS가 UD-IQ3_S보다 약 0.4 tok/s 정도만 더 빠르다는 점은 흥미로운 부분입니다. 모델의 가중치(weight)를 줄이는 것이 디코딩 속도의 비례적인 증가로 이어지지는 않습니다.
테스트 4/4 — UD-IQ2_M — 128K ctx에서 ~14.9 tok/s
양자화 (Quantification): UD-IQ2_M
전체 오프로딩 (full offloading) 시 VRAM 추정치: 90,812 MiB
추가 옵션: --n-cpu-moe 36
로드 시간: 42.72초
평균 생성 속도: ~14.9 tok/s
생성 중 메모리 사용량:
시스템 RAM: 약 81 / 125 GiB
전용 VRAM: 약 22.6 / 24.0 GiB
GPU 사용률: 약 91%
CPU 사용률: 약 61%
CPU 클럭 속도: 약 5.27 GHz
이는 동일한 128K 컨텍스트 설정과 동일한 Q8_0 KV 캐시를 유지하면서도 15 tok/s에 육박하는 속도를 달성한, 테스트된 구성 중 가장 빠른 설정이었습니다. 가장 중요한 최적화는 다음 요소들 사이의 적절한 균형을 찾는 것이었습니다:
- 밀집된(dense) 컴포넌트 및 비전문가(non-expert) 컴포넌트를 GPU에 유지
- GPU로 오프로드된 Q8_0 KV 캐시를 유지
- 필요한 만큼의 MoE 전문가 텐서(expert tensors)만을 시스템 RAM으로 이동
- 메모리 부족(out of memory) 오류를 일으키지 않으면서 RTX 3090의 VRAM 대부분을 채움
--n-cpu-moe의 최적값은 각 양자화 크기에 따라 달라집니다:
UD-IQ4_XS: --n-cpu-moe 38
UD-IQ3_S: --n-cpu-moe 38
UD-IQ3_XXS: --n-cpu-moe 37
UD-IQ2_M: --n-cpu-moe 36
결과를 통해 양자화 크기를 줄이는 것이 완벽하게 선형적인 속도 이득을 가져오지는 않는다는 점도 확인할 수 있습니다. UD-IQ3_S와 UD-IQ3_XXS는 상당히 유사한 성능을 보이는 반면, UD-IQ2_M은 가장 큰 이득을 제공하며 UD-IQ4_XS보다 약 50% 더 높은 생성 속도에 도달합니다. 이 비교는 생성 성능과 메모리 사용량에 대해서만 다룹니다.
네 가지 양자화 (quantization) 모델 간의 품질 또는 정확도에 대한 통제된 비교는 아직 포함하지 않았습니다. submitted by /u/Ok_Ninja7526 [link] [comments]
AI 자동 생성 콘텐츠
본 콘텐츠는 r/LocalLLaMA의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기