llama.cpp + Spark GB10 + DS-V4-Flash + DSpark = 23+ tok/s
요약
llama.cpp와 DSpark를 활용하여 Spark GB10 환경에서 DeepSeek-V4-Flash 모델의 추론 성능을 최적화하는 가이드입니다. 특정 NVIDIA 드라이버 및 CUDA 설정, 펌웨어 업데이트를 통해 코드 생성 시 최대 33 tok/s의 속도를 달성하는 방법을 다룹니다.
핵심 포인트
- llama.cpp와 DSpark 조합으로 코드 생성 시 높은 토큰 생성 속도 확보
- Spark GB10 환경을 위한 NVIDIA 드라이버 및 CUDA 13.3 설치 가이드
- MOK(Machine Owner Key) 설정을 통한 보안 부팅 및 드라이버 적용 방법
- 메모리 효율을 위한 양자화 모델(UD-IQ3_XXS) 및 KV 캐시 관리 팁
수치 데이터: UD-IQ3_S: nvidia 580.173.02 + cuda 13.0.3: ~15.5 tok/s. 100K 컨텍스트에서 ~12 tok/s. nvidia 610.43.02 + cuda 13.3.1: ~18.5 tok/s. UD-IQ3_XSS + DSpark BF16: nvidia 610.43.02 + cuda 13.3.1: ~23-27 tok/s. nvidia 580.173.02 + cuda 13.0.3에서 나타나는 지속적인 성능 저하를 겪지 않으며, ~24 tok/s에서 안정화됩니다. 코드 생성 (codegen) 중에는 25-33 tok/s를 기록하며 - 제 경우에는, 코드 생성 시 일반적으로 nvidia/Qwen3.6-27B-NVFP4보다 빠릅니다. 프롬프트 처리 (Prompt processing, PP): nvidia 580.173.02 + cuda 13.0.3: PP 350-400. nvidia 610.43.02 + cuda 13.3.1: PP ~200-250. 이것이 수정 가능한지는 아직 확인하지 못했습니다. 아쉽게도 vLLM이나 SGLang보다 PP가 훨씬 느립니다. --- 설정 재현: 전제 조건: GB10에 HDMI + 키보드가 연결되어 있어야 함 - 보안 부팅 (secure boot)을 위해 필요합니다. GB10을 사용하는 모든 분은 먼저 펌웨어를 업데이트해야 합니다:
fwupdmgr refresh --force
fwupdmgr get-updates
sudo fwupdmgr update
요청 시 재부팅 (hf CLI 도구를 사용한다고 가정)
모델 + DSpark 다운로드:
hf download unsloth/DeepSeek-V4-Flash-0731-GGUF --include " UD-IQ3_XXS " --include " dspark-DeepSeek-V4-Flash-0731-BF16.gguf "
UD-IQ3_S + 400K+ bf16 KV 캐시 (KV cache)는 수용 가능하지만, DSpark가 추가 메모리를 소비하므로 코드 생성 속도를 위해 품질과 일부 KV 캐시를 희생하여 UD-IQ3_XXS로 낮춰야 합니다.
nvidia 드라이버 610.x 및 cuda 13.3.x 설치:
sudo apt install nvidia-driver-610-open nvidia-dkms-610-open cuda-toolkit-13-3
sudo mokutil --import /var/lib/shim-signed/mok/MOK.der # DKMS에서 사용하는 MOK 키를 스테이징합니다.
다음 재부팅을 위해 임시 비밀번호를 설정합니다.
sudo shutdown now # 네, 종료합니다.
여기서 GB10에 HDMI와 키보드가 연결되어 있어야 합니다. GB10 시작: mokutil --import이 비밀번호 설정을 요청합니다 -> 다음 재부팅 시, MokManager (파란 화면)가 나타납니다 -> 설정을 들어갑니다 -> "Enroll MOK" -> Continue -> Yes -> 해당 임시 비밀번호를 입력합니다 -> 재부팅합니다. 이 작업은 한 번만 수행하면 됩니다.
.bashrc에 다음 export 구문을 추가합니다 (bash 쉘 기준):
export PATH="/usr/local/cuda-13.3/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda-13.3/lib64:$LD_LIBRARY_PATH"
쉘을 닫고 다시 엽니다.
변경 사항이 적용되었는지 확인합니다: echo "$LD_LIBRARY_PATH" # "/usr/local/cuda-13.3/lib64:" + 기존의 LD_LIBRARY_PATH 내용이 출력되어야 합니다. 이러한 변경 사항은 현재 사용자에게만 적용되며, 시스템 전체에 적용되는 변경 사항이 아님에 유의하세요.
(선택 사항) llama.cpp 빌드:
sudo apt install -yqq git cmake libssl-dev
mkdir -p "${HOME:?}/git" && cd "${HOME:?}/git"
git clone https://github.com/ggml-org/llama.cpp.git
cd llama.cpp
cmake -B build -DGGML_CUDA=ON -DCMAKE_CUDA_ARCHITECTURES="121a-real" -DGGML_CUDA_FA_ALL_QUANTS=ON -DGGML_CUDA_FORCE_CUBLAS=ON -DCMAKE_BUILD_TYPE=Release -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON
cmake --build build --config Release --verbose --parallel
lama.cpp를 업데이트하고 싶을 때마다 다음을 실행합니다:
cd "${HOME:?}/git/llama.cpp"
git pull origin master
cmake --build build --config Release --verbose --parallel
서버 실행 (bash 스크립트로 복사하여 사용할 수 있습니다):
! /usr/bin/env bash
HF_MODEL_PATH="${HOME:?}/.cache/huggingface/hub/models--unsloth--DeepSeek-V4-Flash-0731-GGUF"
HF_SNAPSHOT="${HF_MODEL_PATH:?}/snapshots/$(cat "${HF_MODEL_PATH:?}/refs/main")"
"${HOME:?}/git/llama.cpp/build/bin/llama-server" \
-m "${HF_SNAPSHOT:?}/UD-IQ3_XXS/DeepSeek-V4-Flash-0731-UD-IQ3_XXS-00001-of-00004.gguf" \
-md "${HF_SNAPSHOT:?}/dspark/dspark-DeepSeek-V4-Flash-0731-BF16.gguf" \
--spec-type draft-dspark \
--spec-draft-n-max 2 \
--alias "deepseek-v4-flash" \
--host 0.0.0.0 \
--port 8888 \
--parallel 1 \
-b 4096 \
-ub 512 \
-ngl 999 \
--n-predict -1 \
-c 262144 \
--load-mode none \
--fit off \
--flash-attn on \
--no-context-shift \
--cache-type-k bf16 \
--cache-type-v bf16 \
--kv-unified \
--jinja \
--reasoning on \
--chat-template-kwargs '{"reasoning_effort": "max"}'
"${HOME:?}/git/llama.cpp/build/bin/llama-server" 경로는 필요에 따라 미리 빌드된 바이너리(prebuilt binary)로 변경하세요.
플래그(Flags) 선정 기준: https://huggingface.co/unsloth/DeepSeek-V4-Flash-0731-GGUF/blob/main/dspark/README.md#usage
--spec-draft-n-max 2 설정은 DGX Spark GB10에서 최상의 속도를 얻을 수 있는 값입니다.
--load-mode none (이전: --no-mmap)은 Nvidia Driver >=610.43.02 버전부터 지원됩니다. (선택 사항) 드라이버 업데이트 후 속도가 절반으로 떨어졌나요? 문제 해결 방법 (이 문제를 디버깅하고 pastebin에 첨부된 테스트 코드를 생성하는 데 도움을 준 OpenCode + DeepSeek-V4-Flash에 감사드립니다): https://pastebin.com/raw/cxj1CLDS - 실제 GPU 주파수를 확인합니다.
curl --proto '=https' --tlsv1.3 -sSf https://pastebin.com/raw/cxj1CLDS > /tmp/real_sm_clock.cu
if echo "62c7db31d825478b9849f66d5d77bdd9c73092f0138036eb02e331cc25fb368e /tmp/real_sm_clock.cu" | sha256sum -c; then
nvcc -O2 -arch=sm_121 -o /tmp/real_sm_clock /tmp/real_sm_clock.cu
&& /tmp/real_sm_clock;
fi
만약 1GHz 미만으로 출력된다면, 다음 단계를 따르세요:
- sudo shutdown now
- USB-C PSU를 포함하여 GB10에서 모든 케이블을 뽑습니다.
- 전원이 분리된 상태에서 전원 버튼을 30초 동안 눌러 레일(rails)의 잔류 전원을 방전시킵니다.
- 전원 케이블을 다시 연결하고 전원을 켭니다.
이렇게 하면 해결될 것입니다 - /u/lilian_moraru 님이 제출한 바이너리를 다시 실행할 수 있습니다. [link] [comments]
AI 자동 생성 콘텐츠
본 콘텐츠는 r/LocalLLaMA의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기