在 DGX Spark 上使用 llama.cpp 运行模型

基于 CUDA 编译构建 llama.cpp,并通过兼容 OpenAI 接口规范的 API 部署模型服务

基本理念

llama.cpp 是适用于大语言模型的轻量级 C/ C++ 推理堆栈。使用 CUDA 构建模型,以便充分利用 DGX Spark GB10 GPU,然后加载 GGUF 权重并公开聊天llama-server 兼容 OpenAI 的 HTTP API。

本练习本使用支持 MTP 的 Qwen3.6-35B-A3B 作为实战示例,端到端介绍该堆栈。以下矩阵总结了所有受支持模型的检查点选择和路径;指令中包含命令。

您将完成的任务

您将使用 CUDA 为 GB10 构建 llama.cpp,下载 Qwen3.6-35B-A3B Checkpoint,然后运行 llama-server GPU 卸载。您将获得:

  • 通过 llama.cpp 进行本地推理 (无需单独的 Python 推理框架)

  • 兼容 OpenAI /v1/chat/completions 工具和应用端点

  • 具体验证了 Qwen3.6-35B-A3B 示例在支持 MTP 的 DGX Spark 上的此堆栈上运行。

开始之前需要了解的内容

  • 基本熟悉 Linux 命令行和终端命令

  • 了解 git 并使用 CMake 从源代码进行构建

  • 了解用于测试的 REST API 和 cURL 的基本知识

预备知识

硬件要求

  • 搭载 GB10 GPU 的 NVIDIA DGX Spark

  • 为所使用的模型和 KV-Cache 提供足够的统一内存 (示例中的模型约 30GB 可用 RAM)

  • 至少约 40GB 的可用磁盘可用于示例下载,以及构建构件 (如果您保留多个 GGUF,则会增加)

软件要求

  • NVIDIA DGX 操作系统

  • Git: git --version

  • CMake ( 3.14+) : cmake --version

  • CUDA 工具包: nvcc --version

  • 对 GitHub 和 Hugging Face 的网络访问

模型支持矩阵

DGX Spark 通过 llama.cpp 支持任何 GGUF 格式模型检查点,前提是系统具有可用于托管和运行检查点的内存。

时间和风险

  • 预估时间:约 30 分钟,并下载示例 GGUF (默认量化约为 35GB 数量级)

  • 风险级别:低 – 构建是在本地克隆;执行以下步骤无需进行系统级安装

  • 回滚:删除 llama.cpp 克隆和模型目录 ~/.cache/huggingface/hub/ 来回收磁盘空间

  • 上次更新时间:2026 年 6 月 3 日

    • 演示现在使用 Qwen3.6-35B-A3B 作为示例

第 1 步:安装依赖项

更新软件包并安装所需的依赖项:

sudo apt update
sudo apt install -y git clang cmake libcurl4-openssl-dev libssl-dev

第 2 步:克隆 llama.cpp 资源库

克隆 llama.cpp – 您正在构建的框架:

git clone https://github.com/ggml-org/llama.cpp ~/llama.cpp
cd ~/llama.cpp

第 3 步:使用 CUDA 构建 llama.cpp

使用 CUDA 和 GB10 的 sm_121 架构配置 CMake,使 GGML 的 CUDA 后端与您的 GPU 相匹配:

cmake -B build -DGGML_NATIVE=ON -DGGML_CUDA=ON -DGGML_CURL=ON -DGGML_RPC=ON -DCMAKE_CUDA_ARCHITECTURES=121a-real
cmake --build build --config Release --target llama-server -j

构建通常需要 5 到 10 分钟。完成后,llama-server 出现在 build/bin/。

第 4 步:使用模型启动 llama-server

llama.cpp 以 GGUF 格式加载模型。本手册使用 unsloth/Qwen3.6-35B-A3B-MTP-GGUF 在 DGX Spark 上实现质量和速度的良好平衡。

从您的 llama.cpp/build 启动 GPU 卸载的 OpenAI 兼容服务器。如果之前未下载模型或模型有任何更新,它会首先从 HuggingFace 加载模型。

所有模型均保存在默认 HuggingFace 缓存目录中:~/.cache/huggingface/hub 。例如,此模型将保存到~/.cache/huggingface/hub/models--unsloth--Qwen3.6-35B-A3B-MTP-GGUF

它还会自动加载 mmproj 文件,以便在模型支持的情况下启用视觉功能。默认情况下,llama-server 将尝试适应完整的模型上下文,并可同时处理 4 个并发请求,必要时 会自动调整参数。

./bin/llama-server \
  -hf unsloth/Qwen3.6-35B-A3B-MTP-GGUF:UD-Q4_K_XL \
  --host 0.0.0.0 \
  --port 30000

要使用 MTP 预测解码运行,请使用 以下示例中所示的其他参数。MTP 需要兼容的模型,例如此示例中使用的 unsloth/Qwen3.6-35B-A3B-MTP-GGUF 。以下示例还设置了“preserve_thinking”标志,允许 Qwen 模型保留历史思考块,用于代理式工作流中的“交错思考” 。

./bin/llama-server \
  -hf unsloth/Qwen3.6-35B-A3B-MTP-GGUF:UD-Q4_K_XL \
  --host 0.0.0.0 \
  --port 30000 \
  --chat-template-kwargs '{"preserve_thinking": true}' \
  --spec-type draft-mtp \
  --spec-draft-n-max 3

参数 (简称):

  • --host / --port :HTTP API 的绑定地址和端口

  • --chat-template-kwargs :为 JSON 模板解析器设置其他参数,必须是有效的 JSON 对象字符串

  • --spec-type :要使用的预测解码类型的逗号分隔列表 (默认:无,大多数兼容 MTP 的模型将使用“draft-mtp”,但您需要先查看模型卡)

  • --spec-draft-n-max :用于预测解码的起草令牌数量 (默认值:3)

您应看到类似于以下内容的日志行:

0.14.322.968 I srv    load_model: speculative decoding context initialized
0.14.322.970 I slot   load_model: id  0 | task -1 | new slot, n_ctx = 262144
0.14.322.972 I slot   load_model: id  1 | task -1 | new slot, n_ctx = 262144
0.14.322.972 I slot   load_model: id  2 | task -1 | new slot, n_ctx = 262144
0.14.322.973 I slot   load_model: id  3 | task -1 | new slot, n_ctx = 262144
0.14.323.063 I srv    load_model: prompt cache is enabled, size limit: 8192 MiB

...
0.14.342.935 I srv  llama_server: model loaded
0.14.342.939 I srv  llama_server: server is listening on http://0.0.0.0:30000
0.14.342.944 I srv  update_slots: all slots are idle

在测试时保持此终端的打开状态。大型 GGUF 的加载可能需要一分钟或更长时间,如果尚未下载模型,则初始模型的下载可能需要一段时间。下载模型时,您将看到一个进度条。

只有在您看到 30000 端口后,服务器才准备好接受传入连接 server is listening 消息 (请参阅故障排除 curl 报告连接被拒绝) 。

第 5 步:测试 API

在发送请求前,请确认服务器已准备就绪 (大型模型可能需要几分钟才能加载):

timeout 900 bash -c 'until curl -sf http://127.0.0.1:30000/health > /dev/null 2>&1; do sleep 5; done' || exit 1
curl -X POST http://127.0.0.1:30000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "unsloth/Qwen3.6-35B-A3B-MTP-GGUF:UD-Q4_K_XL",
    "messages": [{"role": "user", "content": "New York is a great city because..."}],
    "max_tokens": 100
  }'

如果您看到 curl: (7) Failed to connect ,服务器仍在加载,进程已退出 (检查服务器日志是否存在 OOM 或路径错误),或者您未发送到运行 llama-server 的主机。

响应的示例形状 (字段因 llama.cpp 版本而异; message 可能包括额外的密钥):

{
  "choices": [
    {
      "finish_reason": "length",
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "New York is a great city because it's a living, breathing collage of cultures, ideas, and possibilities—all stacked into one vibrant, never‑sleeping metropolis. Here are just a few reasons that many people ("
      }
    }
  ],
  "created": 1765916539,
  "model": "$MODEL_PATH",
  "object": "chat.completion",
  "usage": {
    "completion_tokens": 100,
    "prompt_tokens": 25,
    "total_tokens": 125
  },
  "id": "chatcmpl-...",
  "timings": {
    ...
  }
}

第 6 步:完成时间较长 (使用 Qwen3.6-35B-A3B)

尝试使用稍长的提示词确认使用 Qwen3.6-35B-A3B 是否稳定生成:

curl -X POST http://127.0.0.1:30000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "unsloth/Qwen3.6-35B-A3B-MTP-GGUF:UD-Q4_K_XL",
    "messages": [{"role": "user", "content": "Solve this step by step: If a train travels 120 miles in 2 hours, what is its average speed?"}],
    "max_tokens": 500
  }'

第 7 步:清理

要停止服务器,请在终端中按 Ctrl+C。

要删除本教程的伪影,请执行以下操作:

rm -rf ~/llama.cpp
rm -rf ~/.cache/huggingface/hub/models--unsloth--Qwen3.6-35B-A3B-MTP-GGUF

第 8 步:后续步骤

  • 上下文长度:默认情况下,llama.cpp 会尝试分配模型支持的最大上下文大小 (如果可能),但您也可以使用 --ctx-size (或 -c) 根据需要进行调整。对于代理式或编码需求,您至少需要 32768 个令牌,最好是 100000 个或更多。

  • 其他模型:您可以使用 --model 加载本地下载的任何兼容的 GGUF;llama.cpp 服务器 API 保持不变。使用 -hf 让 llama.cpp 自动管理下载/更新。请注意,如果您使用 --model 使用多模态模型时,您需要使用 --mmproj 参数。如果您使用 -hf 它会自动加载 mmproj 文件。

  • 集成:指向 Open WebUI、Continue.dev 或自定义客户端 http://:30000/v1 使用 OpenAI 客户端模式。

服务器将实现您的 llama.cpp 构建启用的常见 OpenAI 式聊天功能 (包括流式传输和工具相关流 (如果支持))。

症状
原因
修复
cmake 失败并显示“未找到 CUDA”
CUDA 工具包不在 PATH 中
运行 export PATH=/usr/local/cuda/bin:$PATH 并从干净的构建目录重新运行 CMake
构建错误,其中提及错误的 GPU arch
CMake CMAKE_CUDA_ARCHITECTURES 不匹配 GB10
使用 -DCMAKE_CUDA_ARCHITECTURES="121" 适用于 DGX Spark GB10
GGUF 下载失败或停止
网络或 Hugging Face 可用性
重新运行 hf download;它会恢复部分文件
启动时“CUDA 显存不足” llama-server
对于当前上下文或 VRAM 而言,模型过大
降低 --ctx-size (例如 4096) 或使用同一存储库中更小的量化
服务器运行,但延迟较高
GPU 之外的层
确认 --n-gpu-layers 对模型来说足够高;检查 nvidia-smi 请求期间
curl: (7) Failed to connect 端口数量:30000
尚未侦听、主机错误或崩溃
等待 server is listening ;运行 curl 在与主机相同的主机上 llama-server (或 Spark 的 IP) ;运行 ss -tln 并确认 :30000 ;读取服务器 stderr 以检测 OOM 或损坏 --model 路径
聊天 API 错误或空回复
错误 --model 路径或不兼容的 GGUF
验证路径 .gguf 文件;如果 GGUF 需要更新的格式,请更新 llama.cpp

注意:

DGX Spark 采用统一内存架构 (UMA),可在 GPU 和 CPU 内存之间实现灵活共享。一些软件仍在追踪 UMA 的行为。如果意外遇到内存压力,您可以尝试刷新页面缓存 (在共享系统上谨慎使用):

sudo sh -c 'sync; echo 3 > /proc/sys/vm/drop_caches'

有关最新的平台问题,请参阅 DGX Spark 已知问题文档。