DGX Spark llama.cpp 部署 Gemma4 31B

0 条回复
32 次浏览

前提

我这里只讨论llama.cpp方式,vllm 其他等已经有成功的案例

下面是我部署时的相关参数,大佬知道哪里有问题,希望指出来相互学习

编译最新版本的 llama.cpp

新出的模型,需要重新编译最新代码,才能支持

复制
git clone https://github.com/ggml-org/llama.cpp.git
cd ~/llama.cpp
# 彻底清理旧的、错误的编译缓存
rm -rf build
# 重新配置:关键在于指定 CUDA 指令集 sm_121 (Blackwell)
cmake -B build \
    -DGGML_CUDA=ON \
    -DGGML_CUDA_GRAPHS=ON \
    -DGGML_CUDA_FA_ALL_QUANTS=ON \
    -DCMAKE_CUDA_ARCHITECTURES=121 \
    -DCMAKE_BUILD_TYPE=Release
# 开始编译 (DGX Spark 有 20 个 CPU 核心,直接拉满)
cmake --build build --config Release -j 20

gemma-4-31B-it-BF16 满血版本

复制
#!/bin/bash
cd /home/romain
export GGML_CUDA_ENABLE_UNIFIED_MEMORY=1
exec /home/romain/llama.cpp/build/bin/llama-server \
  -m /home/romain/models/gemma4-31B/BF16/gemma-4-31B-it-BF16-00001-of-00002.gguf \
  --mmproj /home/romain/models/gemma4-31B/mmproj-BF16.gguf \
  -ngl 999 \
  --no-mmap \
  --jinja \
  -fa on \
  -c 16384 \
  --temp 1.0 \
  --top-p 0.95 \
  --top-k 64 \
  --min-p 0.0 \
  --repeat-penalty 1.0 \
  -t 8 \
  -tb 8 \
  -b 512 \
  -ub 512 \
  -np 1 \
  --cont-batching \
  -ctk q8_0 \
  -ctv q8_0 \
  --no-context-shift \
  --alias gemma-4-31B \
  --host 0.0.0.0 \
  --port 8080
复制
sudo chmod +x /usr/local/bin/start-llama-server.sh
# 清理残留进程(很重要!)
sudo pkill -9 llama-server
# 重新加载 systemd 配置
sudo systemctl daemon-reload
# 重启服务
sudo systemctl restart llama-server.service
# 实时查看日志
sudo journalctl -u llama-server -f -n 100
sudo systemctl status llama-server.service

好了结论 2.5token/s,巨牛逼我都傻眼了,其实理论值时4token/s,我这里指的是输出


gemma-4-31B-it-UD-Q4_K_XL 量化版本

复制
#!/bin/bash
# 1. 确保进入工作目录
cd /home/romain/llama.cpp
# 2. 环境变量(保留统一内存支持,这是 DGX Spark 的精髓)
export GGML_CUDA_ENABLE_UNIFIED_MEMORY=1
# 3. 启动 Server
#!/bin/bash
export GGML_CUDA_ENABLE_UNIFIED_MEMORY=1
/home/romain/llama.cpp/build/bin/llama-server \
  -m /home/romain/models/gemma4-31B/gemma-4-31B-it-UD-Q4_K_XL.gguf \
  --mmproj /home/romain/models/gemma4-31B/mmproj-BF16.gguf \
  -ngl 999 \
  --jinja \
  -fa on \
  -c 16384 \
  -b 2048 \
  -ub 512 \
  -t 20 \
  --cache-type-k q8_0 \
  --cache-type-v q8_0 \
  --host 0.0.0.0 \
  --port 8080 \
  --alias gemma-4-31B \
  --cont-batching \
  --temp 0.7 \
  --top-p 0.9 \
  --repeat-penalty 1.05

重复上面的杀进程重新启动

好了结论

  • prompt eval time: 111 token/s ✅ (prefill 很快,GPU 正常)
  • eval time: 6.5 token/s ❌ (decode 慢,这是瓶颈)

整整提升2.5

我看到这个数据已经癫狂了,不行要死磕这个模型了

结论知识点

其实我知道原因,dgx spark 宽带限制了,几乎已经跑满了
GB10 的带宽 273 GB/s


万能计算公式
31B 参数 × 2 bytes (BF16) ÷ 273 GB/s = 每个 token 227 ms = 理论最大 4.4 token/s

接下来继续搞 26B 的


发表一个评论

R保持