Openclaw无限免费使用本地MiniMax-M2.5-NVFP4 模型

版本 : 2026-03-17
硬件 : 2× NVIDIA DGX Spark (GB10 GPU, SM121, 128GB 统一内存)
模型 : MiniMax-M2.5-NVFP4 (230B MoE, NVFP4 量化, ~120GB)
软件栈 : SGLang (源码编译) + PyTorch 2.9.1+cu130 + CUDA 13.0
网络: QSFP 200GbE 直连线缆


Openclaw配置参考:

结果展示:

DGX 设备:

目录

  1. 背景与架构说明
  2. 硬件与网络准备
  3. 已知问题与解决方案总览
  4. [Step 1: 环境清理](#Step 1: 环境清理)
  5. [Step 2: 安装 PyTorch 2.9.1+cu130](#Step 2: 安装 PyTorch 2.9.1+cu130)
  6. [Step 3: 安装编译依赖](#Step 3: 安装编译依赖)
  7. [Step 4: 克隆 SGLang 源码](#Step 4: 克隆 SGLang 源码)
  8. [Step 5: 编译 sgl-kernel](#Step 5: 编译 sgl-kernel)
  9. [Step 6: 安装 SGLang](#Step 6: 安装 SGLang)
  10. [Step 7: 修复 Triton ptxas](#Step 7: 修复 Triton ptxas)
  11. [Step 8: 验证安装](#Step 8: 验证安装)
  12. [Step 9: 配置 Worker 节点](#Step 9: 配置 Worker 节点)
  13. [Step 10: 启动多节点推理服务](#Step 10: 启动多节点推理服务)
  14. [Step 11: 测试与监控](#Step 11: 测试与监控)
  15. [Step 12: OpenClaw 集成配置](#Step 12: OpenClaw 集成配置)
  16. 故障排除手册
  17. 性能参考数据

1. 背景与架构说明

1.1 DGX Spark GB10 的特殊性

DGX Spark 搭载的 GB10 GPU 计算能力为 SM121 (compute capability 12.1),这与数据中心级 Blackwell GPU (SM100) 有本质区别:

特性 SM100 (B200/B300) SM121 (DGX Spark GB10)
tcgen05 指令 ✅ 支持 ❌ 不支持
TMEM (Tensor Memory) ✅ 支持 ❌ 不支持
WGMMA 指令 ✅ 支持 ❌ 不支持
FlashMLA 原生支持
FlashAttention 4
共享内存限制 228KB 101,376 bytes

这意味着大量 ML 库的预编译二进制文件不能直接在 DGX Spark 上运行,必须从源码编译。

1.2 为什么不用 Docker

NVIDIA 官方提供了 lmsysorg/sglang:spark Docker 镜像,但:

  • 镜像版本可能滞后
  • 多节点 Docker 网络配置复杂
  • 本教程覆盖源码编译的完整流程,适用于任何自定义需求

1.3 部署架构

复制代码
┌─────────────────────┐     200GbE      ┌─────────────────────┐
│   spark-1 (Head)    │◄──────────────►│   spark-2 (Worker)  │
│   169.254.131.196   │   QSFP 直连    │   169.254.191.100   │
│   GB10 GPU (TP0)    │                │   GB10 GPU (TP1)    │
│   SGLang Server     │                │   SGLang Worker     │
│   HTTP :8000        │                │   (无 HTTP 端口)     │
└─────────────────────┘                └─────────────────────┘
        │
        ▼
   API 端点: http://169.254.131.196:8000/v1
  • Tensor Parallelism (TP=2): 模型权重按层切分到两张 GPU
  • 多节点 TP : 使用 --nnodes 2 模式,通过 NCCL over TCP/IP 通信
  • 单点 API: 只有 Head 节点 (spark-1) 提供 HTTP API

2. 硬件与网络准备

2.1 确认网络连通性

bash 复制代码
# 在 spark-1 上 ping spark-2
ping -c 3 169.254.191.100

# 在 spark-2 上 ping spark-1
ping -c 3 169.254.131.196

# 确认网络接口名称 (用于 NCCL 绑定)
ip addr show | grep "enp.*np"
# 记下接口名,如 enp1s0f1np1

2.2 确认 GPU 状态

bash 复制代码
python3 -c "
import subprocess
result = subprocess.run(['nvidia-smi'], capture_output=True, text=True)
print(result.stdout[:500] if result.stdout else 'nvidia-smi failed')
"
# 或者直接:
nvidia-smi

2.3 确认模型文件

模型需要提前下载到两台机器的相同路径:

bash 复制代码
# 确认模型文件存在
ls -la /home/nvidia/workspaces/models/MiniMax-M2.5-NVFP4/
# 应有 26 个 safetensors 分片文件,总计约 120GB

如果只有一台机器有模型,可以用 rsync 同步:

bash 复制代码
rsync -avP /home/nvidia/workspaces/models/MiniMax-M2.5-NVFP4/ \
  spark-2:/home/nvidia/workspaces/models/MiniMax-M2.5-NVFP4/

3. 已知问题与解决方案总览

在 DGX Spark 上编译和运行 SGLang 会遇到以下问题。本教程按顺序解决所有问题。

# 问题 原因 解决方案
1 sgl_kernel undefined symbol 预编译 wheel 针对 nightly PyTorch ABI 使用 torch==2.9.1 (stable) + 源码编译
2 FlashMLA kerutils static assertion SM121 未被 kerutils 识别 编译时 patch static_assert,或禁用 FlashMLA
3 PyTorch 版本反复切换 SGLang 依赖拉回 stable,用户又装 nightly 锁定 torch==2.9.1+cu130,永不安装 nightly
4 cmake >= 4.0 Policy 问题 cmake 4.x 引入不兼容的 CMake Policy 安装 cmake<4.0
5 Triton ptxas 不认识 sm_121a Triton 自带的 ptxas 版本太旧 用系统 CUDA 13.0 的 ptxas 替换
6 CUDA error: invalid device ordinal 单机模式下找不到第二张 GPU 使用 --nnodes 2 多节点模式
7 port number missing --dist-init-addr 缺少端口号 加上端口如 :25001
8 .multicast::cluster ptxas 警告 SM121 不完全支持某些集群指令 仅为警告,不影响运行
9 DeepGemm scale_fmt 警告 NVFP4 checkpoint 格式差异 仅为警告,不影响运行

Step 1: 环境清理

⚠️ 重要 : 在 两台机器 上都执行此步骤

bash 复制代码
conda activate sglang-spark   # 或你的环境名

# 彻底卸载所有残留包
pip uninstall -y sgl-kernel sglang flashinfer_python flashinfer_cubin \
    torch torchvision torchaudio

# 停止所有相关进程
pkill -9 python
ray stop -f 2>/dev/null

# 清理系统缓存
sync; sudo bash -c 'echo 3 > /proc/sys/vm/drop_caches'

# 清理旧的源码和编译产物
rm -rf /home/nvidia/workspaces/sglang
rm -rf /home/nvidia/workspaces/sgl_kernel*.whl

# 清理 pip 缓存 (可选)
pip cache purge

Step 2: 安装 PyTorch 2.9.1+cu130

⚠️ 关键决策 : 必须使用 torch==2.9.1+cu130 (stable)

绝对不要安装 nightly (2.12.0.dev),否则会导致 sgl_kernel ABI 不兼容。

bash 复制代码
cd /home/nvidia/workspaces   # 确保在一个存在的目录

pip install torch==2.9.1 torchvision==0.24.1 torchaudio==2.9.1 \
    --index-url https://download.pytorch.org/whl/cu130 \
    --force-reinstall

# 验证 (必须通过)
python -c "import torch; print('torch:', torch.__version__, 'CUDA:', torch.cuda.is_available())"
# 期望输出: torch: 2.9.1+cu130 CUDA: True

注意 : moviepy requires pillow<12.0 的警告可以忽略,不影响推理。
注意 : Found GPU0 NVIDIA GB10 which is of cuda capability 12.1 警告是已知的,PyTorch 2.9.1 尚未正式声明支持 SM121,但实际可以运行。


Step 3: 安装编译依赖

bash 复制代码
# cmake 必须 < 4.0,否则会有 CMake Policy 兼容问题
pip install "cmake<4.0" ninja scikit-build-core build wheel

# 确认版本
cmake --version   # 应显示 3.31.x

Step 4: 克隆 SGLang 源码

bash 复制代码
cd /home/nvidia/workspaces
git clone https://github.com/sgl-project/sglang.git --recursive
cd sglang/sgl-kernel

Step 5: 编译 sgl-kernel

这是最关键也最耗时的步骤 (45-90 分钟)。

5.1 设置编译环境变量

bash 复制代码
export TORCH_CUDA_ARCH_LIST="12.1a"     # 'a' 后缀表示 architecture-accelerated
export MAX_JOBS=4                        # 限制并行数,防 OOM (128GB 内存)
export CMAKE_BUILD_PARALLEL_LEVEL=1      # CMake 层面也限制并行
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:${LD_LIBRARY_PATH:-}

5.2 降低 nvcc 线程数 (防 OOM)

bash 复制代码
python3 -c "
import os, re
for root, dirs, files in os.walk('.'):
    if '.git' in root: continue
    for f in files:
        if f.endswith(('CMakeLists.txt', '.cmake')):
            p = os.path.join(root, f)
            with open(p, 'r', errors='ignore') as fh: c = fh.read()
            n = re.sub(r'--threads=\d+', '--threads=1', c)
            if n != c:
                with open(p, 'w') as fh: fh.write(n)
                print(f'patched: {p}')
"

5.3 开始编译

bash 复制代码
python -m build --wheel --no-isolation 2>&1 | tee /tmp/sgl_kernel_build.log
监控编译进度 (另一个终端):
bash 复制代码
tail -f /tmp/sgl_kernel_build.log | grep -E "^\[.*\/.*\]"
# 会看到 [127/479] 这样的进度
编译过程中的正常警告:

以下警告可以安全忽略:

  • '.multicast::cluster' modifier ... should be used on .target 'sm_90a/sm_100a' --- SM121 的集群指令性能降级警告
  • Potential Performance Loss: 'setmaxnreg' ignored --- 寄存器分配优化降级
  • narrowing conversion ... from 'char' to 'c10::DeviceIndex' --- 类型转换警告
  • expression has no effect --- 未使用变量警告

5.4 如果遇到 FlashMLA 编译错误

如果编译在 step 415/479 附近失败,错误信息包含:

复制代码
kerutils/device/common.h(45): error: static assertion failed with 
"kerutils doesn't support SM architectures below SM80"

这是 FlashMLA 的 kerutils 不识别 SM121。MiniMax-M2.5 使用 GQA 而非 MLA,不需要 FlashMLA。

解决方案: 找到并 patch 该文件:

bash 复制代码
# 查找 FlashMLA 的 kerutils 文件
find /tmp -name "common.h" -path "*/kerutils/*" 2>/dev/null

# 编辑找到的文件,将 static_assert 行注释掉或改为:
# static_assert(__CUDA_ARCH__ >= 800 || __CUDA_ARCH__ == 0 || __CUDA_ARCH__ >= 1200, 
#     "kerutils doesn't support SM architectures below SM80");

然后重新运行编译命令。

5.5 编译成功的标志

复制代码
*** Created sgl_kernel-0.3.21-cp310-abi3-linux_aarch64.whl
Successfully built sgl_kernel-0.3.21-cp310-abi3-linux_aarch64.whl

wheel 文件位于 dist/ 目录。


Step 6: 安装 SGLang

bash 复制代码
# 安装编译好的 sgl-kernel
pip install dist/sgl_kernel-0.3.21-cp310-abi3-linux_aarch64.whl

# 安装 SGLang Python 包
cd /home/nvidia/workspaces/sglang
pip install -e "python[all]" --no-build-isolation

Step 7: 修复 Triton ptxas

Triton 自带的 ptxas 版本太旧,不认识 sm_121a,会导致 CUDA graph 捕获阶段失败。

⚠️ 两台机器都需要执行

bash 复制代码
# 替换 Triton 自带的旧版 ptxas
TRITON_PTXAS=/root/miniconda3/envs/sglang-spark/lib/python3.11/site-packages/triton/backends/nvidia/bin/ptxas

# 备份原文件
mv $TRITON_PTXAS ${TRITON_PTXAS}.bak

# 链接到系统 CUDA 13.0 的 ptxas
ln -s /usr/local/cuda/bin/ptxas $TRITON_PTXAS

# 验证
$TRITON_PTXAS --version
# 应显示: Cuda compilation tools, release 13.0, V13.0.88

注意 : 如果你的 conda 环境路径不同,需要调整 TRITON_PTXAS 变量。

可以用 find / -name "ptxas" -path "*/triton/*" 2>/dev/null 查找。


Step 8: 验证安装

bash 复制代码
python -c "
import torch
import sgl_kernel
print('torch:', torch.__version__, 'CUDA:', torch.cuda.is_available())
print('sgl_kernel:', sgl_kernel.__version__)
import sglang
print('sglang: OK')
print('GPU:', torch.cuda.get_device_name(0))
print('Compute Capability:', torch.cuda.get_device_capability(0))
"

期望输出:

复制代码
torch: 2.9.1+cu130 CUDA: True
sgl_kernel: 0.3.21
sglang: OK
GPU: NVIDIA GB10
Compute Capability: (12, 1)

Step 9: 配置 Worker 节点

在 spark-2 上复制编译好的 wheel,免去重新编译。

在 spark-1 上执行:

bash 复制代码
# 把编译好的 wheel 传到 spark-2
scp /home/nvidia/workspaces/sglang/sgl-kernel/dist/sgl_kernel-0.3.21-cp310-abi3-linux_aarch64.whl \
    spark-2:/home/nvidia/workspaces/

在 spark-2 上执行:

bash 复制代码
conda activate sglang-spark

# 1. 安装 PyTorch (如果 spark-2 还没装)
pip install torch==2.9.1 torchvision==0.24.1 torchaudio==2.9.1 \
    --index-url https://download.pytorch.org/whl/cu130 --force-reinstall

# 2. 安装编译好的 sgl-kernel (免编译!)
pip install /home/nvidia/workspaces/sgl_kernel-0.3.21-cp310-abi3-linux_aarch64.whl

# 3. 克隆并安装 SGLang
cd /home/nvidia/workspaces
git clone https://github.com/sgl-project/sglang.git
cd sglang
pip install -e "python[all]" --no-build-isolation

# 4. 修复 Triton ptxas (同 Step 7)
TRITON_PTXAS=/root/miniconda3/envs/sglang-spark/lib/python3.11/site-packages/triton/backends/nvidia/bin/ptxas
mv $TRITON_PTXAS ${TRITON_PTXAS}.bak
ln -s /usr/local/cuda/bin/ptxas $TRITON_PTXAS

# 5. 验证
python -c "import torch; import sgl_kernel; print('OK:', torch.__version__, sgl_kernel.__version__)"

Step 10: 启动多节点推理服务

10.1 关键参数说明

参数 说明
--tp-size 2 2 两张 GPU 做 Tensor Parallel
--nnodes 2 2 两台物理机
--node-rank 0 或 1 节点编号
--dist-init-addr IP:PORT torch.distributed 会合点
--quantization modelopt_fp4 --- NVFP4 量化格式
--attention-backend flashinfer --- FlashInfer 注意力后端
--kv-cache-dtype bf16 --- KV Cache 使用 BF16
--disable-custom-all-reduce --- 禁用自定义 AllReduce (跨节点不稳定)

10.2 在 spark-1 上启动 (Head, node-rank=0)

先启动 spark-1,它会等待 spark-2 连接。

bash 复制代码
source /root/miniconda3/bin/activate sglang-spark

export NCCL_SOCKET_IFNAME=enp1s0f1np1    # 替换为你的网络接口名
export GLOO_SOCKET_IFNAME=enp1s0f1np1
export OMP_NUM_THREADS=4
export MKL_NUM_THREADS=4

python -m sglang.launch_server \
  --model-path /home/nvidia/workspaces/models/MiniMax-M2.5-NVFP4 \
  --served-model-name minimax-m2.5 \
  --quantization modelopt_fp4 \
  --attention-backend flashinfer \
  --kv-cache-dtype bf16 \
  --disable-custom-all-reduce \
  --tp-size 2 \
  --nnodes 2 \
  --node-rank 0 \
  --dist-init-addr 169.254.131.196:25001 \
  --trust-remote-code \
  --mem-fraction-static 0.85 \
  --context-length 65536 \
  --reasoning-parser minimax \
  --tool-call-parser minimax-m2 \
  --host 0.0.0.0 \
  --port 8000

10.3 在 spark-2 上启动 (Worker, node-rank=1)

spark-1 启动后立即启动 spark-2。

bash 复制代码
source /root/miniconda3/bin/activate sglang-spark

export NCCL_SOCKET_IFNAME=enp1s0f1np1
export GLOO_SOCKET_IFNAME=enp1s0f1np1
export OMP_NUM_THREADS=4
export MKL_NUM_THREADS=4

python -m sglang.launch_server \
  --model-path /home/nvidia/workspaces/models/MiniMax-M2.5-NVFP4 \
  --served-model-name minimax-m2.5 \
  --quantization modelopt_fp4 \
  --attention-backend flashinfer \
  --kv-cache-dtype bf16 \
  --disable-custom-all-reduce \
  --tp-size 2 \
  --nnodes 2 \
  --node-rank 1 \
  --dist-init-addr 169.254.131.196:25001 \
  --trust-remote-code \
  --mem-fraction-static 0.85 \
  --context-length 65536 \
  --reasoning-parser minimax \
  --tool-call-parser minimax-m2 \
  --host 0.0.0.0 \
  --port 8000

10.4 启动流程时间线

复制代码
[00:00]  spark-1 启动,等待 spark-2 连接
[00:10]  spark-2 启动,torch.distributed 握手完成
[00:15]  torch distributed 初始化完成 (~15s)
[08:00]  模型权重加载完成 (26 个 shard, ~8 分钟)
[08:05]  KV Cache 分配 (~210K tokens)
[10:00]  CUDA Graph 捕获完成 (~2 分钟)
[12:00]  Piecewise CUDA Graph 编译+捕获 (~2 分钟)
[12:05]  "The server is fired up and ready to roll!" ✅

10.5 后台运行 (nohup)

bash 复制代码
# spark-1
nohup bash -c 'source /root/miniconda3/bin/activate sglang-spark && \
export NCCL_SOCKET_IFNAME=enp1s0f1np1 && \
export GLOO_SOCKET_IFNAME=enp1s0f1np1 && \
python -m sglang.launch_server \
  --model-path /home/nvidia/workspaces/models/MiniMax-M2.5-NVFP4 \
  --served-model-name minimax-m2.5 \
  --quantization modelopt_fp4 \
  --attention-backend flashinfer \
  --kv-cache-dtype bf16 \
  --disable-custom-all-reduce \
  --tp-size 2 --nnodes 2 --node-rank 0 \
  --dist-init-addr 169.254.131.196:25001 \
  --trust-remote-code --mem-fraction-static 0.85 \
  --context-length 65536 \
  --reasoning-parser minimax --tool-call-parser minimax-m2 \
  --host 0.0.0.0 --port 8000' \
  > /home/nvidia/workspaces/ray/sglang_m25.log 2>&1 &

# 监控日志
tail -f /home/nvidia/workspaces/ray/sglang_m25.log

Step 11: 测试与监控

11.1 基础测试

bash 复制代码
# 健康检查
curl http://localhost:8000/health

# 模型信息
curl http://localhost:8000/model_info

# 简单对话
curl http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "minimax-m2.5",
    "messages": [{"role": "user", "content": "你好,请介绍一下你自己"}],
    "max_tokens": 256,
    "temperature": 0.7
  }'

11.2 推理能力测试

bash 复制代码
curl http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "minimax-m2.5",
    "messages": [{"role": "user", "content": "一个水池有两个进水管和一个出水管。单独开A管8小时注满,单独开B管12小时注满,单独开排水管16小时排完。三管同时开,多久注满?"}],
    "max_tokens": 1024,
    "temperature": 0.7
  }'

11.3 流式输出测试

bash 复制代码
curl http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "minimax-m2.5",
    "messages": [{"role": "user", "content": "写一首关于春天的诗"}],
    "max_tokens": 512,
    "stream": true
  }'

11.4 Python SDK 测试

python 复制代码
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="none")
resp = client.chat.completions.create(
    model="minimax-m2.5",
    messages=[{"role": "user", "content": "What is the DGX Spark?"}],
    max_tokens=256
)
print(resp.choices[0].message.content)

11.5 监控

bash 复制代码
# 查看服务状态和吞吐
curl -s http://localhost:8000/get_server_info | python3 -c "
import json,sys
d=json.load(sys.stdin)
s=d['internal_states'][0]
m=s['memory_usage']
tp=s.get('last_gen_throughput',0)
print('吞吐: %.1f tok/s' % tp)
print('显存: 权重=%.1fGB KV=%.1fGB Graph=%.1fGB' % (m['weight'],m['kvcache'],m['graph']))
print('Token容量: %d' % m['token_capacity'])
"

# 统计已处理请求数
grep -c "POST.*HTTP" /home/nvidia/workspaces/ray/sglang_m25.log

# 查看 prefill/decode 活动
grep "Prefill batch\|Decode batch" /home/nvidia/workspaces/ray/sglang_m25.log | tail -20

提示 : 下次启动时加 --enable-metrics --log-requests 可以启用 /metrics 端点。


Step 12: OpenClaw 集成配置

编辑 ~/.openclaw/openclaw.json,添加本地模型 provider:

json 复制代码
{
  "models": {
    "mode": "merge",
    "providers": {
      "sglang": {
        "baseUrl": "http://169.254.131.196:8000/v1",
        "apiKey": "sk-local",
        "api": "openai-completions",
        "models": [
          {
            "id": "minimax-m2.5",
            "name": "MiniMax M2.5 NVFP4 (Local DGX Spark)",
            "reasoning": true,
            "input": ["text"],
            "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 },
            "contextWindow": 65536,
            "maxTokens": 8192
          }
        ]
      }
    }
  },
  "agents": {
    "defaults": {
      "model": {
        "primary": "sglang/minimax-m2.5"
      }
    }
  }
}

关键配置说明:

  • baseUrl: 指向 spark-1 的 SGLang 服务地址
  • id: 必须与 --served-model-name 一致
  • api: 使用 openai-completions (SGLang 暴露 OpenAI 兼容 API)
  • 模型引用格式: sglang/minimax-m2.5 (provider名/model id)

故障排除手册

F1: undefined symbol: _ZN3c104cuda29c10_cuda_check_implementationE...

原因: sgl_kernel 编译时使用的 PyTorch ABI 与运行时的不一致。

解决:

bash 复制代码
pip uninstall -y sgl-kernel torch
pip install torch==2.9.1 --index-url https://download.pytorch.org/whl/cu130
# 重新编译 sgl-kernel

F2: The folder you are executing pip from can no longer be found

原因 : 你删除了当前工作目录 (如 rm -rf sglang 后还在 sglang 目录下)。

解决 : cd /home/nvidia/workspaces 然后重试。

F3: cmake Policy CMP0177 is not set

原因: cmake >= 4.0 引入的不兼容策略。

解决 : pip install "cmake<4.0"

F4: ptxas fatal: Value 'sm_121a' is not defined for option 'gpu-name'

原因: Triton 自带的 ptxas 版本太旧。

解决 (见 Step 7):

bash 复制代码
TRITON_PTXAS=$(python -c "import triton; print(triton.__path__[0])")/backends/nvidia/bin/ptxas
mv $TRITON_PTXAS ${TRITON_PTXAS}.bak
ln -s /usr/local/cuda/bin/ptxas $TRITON_PTXAS

F5: CUDA error: invalid device ordinal (TP=2 单机)

原因 : 每台 DGX Spark 只有 1 张 GPU,但 --tp-size 2 尝试在本机找 2 张。

解决 : 使用多节点模式 --nnodes 2 --node-rank 0/1 --dist-init-addr IP:PORT

F6: port number missing in torch.distributed

原因 : --dist-init-addr 只写了 IP 没写端口。

解决 : --dist-init-addr 169.254.131.196:25001

F7: kerutils doesn't support SM architectures below SM80

原因: FlashMLA 的 kerutils 不识别 SM121。

解决: Patch static_assert 或在 CMakeLists.txt 中禁用 FlashMLA 相关目标。

F8: 模型加载超时

原因: 230B 模型的 26 个 shard 加载需要 8-10 分钟。

解决 : 增加超时 export RAY_CGRAPH_get_timeout=600,或在 --dist-timeout 600

F9: spark-2 上 curl localhost:8000 返回 404

原因: API 端点只在 spark-1 (Head 节点) 上。

解决 : 从 spark-2 访问时用 curl http://169.254.131.196:8000/v1/...


性能参考数据

基于实际部署测量:

指标
模型 MiniMax-M2.5-NVFP4 (230B MoE, 10B active)
量化 NVFP4 (modelopt_fp4)
权重显存占用 (每节点) ~70 GB
KV Cache 容量 ~210,000 tokens
KV Cache 显存 (每节点) ~12.5 GB × 2 (K+V)
CUDA Graph 显存 ~5.2 GB
剩余可用显存 ~6 GB
生成吞吐 ~25 tokens/s
模型加载时间 ~8.5 分钟
CUDA Graph 捕获时间 ~2 分钟
Piecewise Graph 编译时间 ~2 分钟
上下文长度 65,536 tokens
最大 batch size 256
sgl-kernel 编译时间 45-90 分钟

附录: 快速部署 Checklist

在新的 DGX Spark 集群上部署时,按此顺序执行:

  • 确认两台机器网络互通 (ping)
  • 确认 GPU 状态 (nvidia-smi)
  • 确认模型文件在两台机器的相同路径
  • 两台机器: 清理环境 (Step 1)
  • 两台机器: 安装 PyTorch 2.9.1+cu130 (Step 2)
  • Head 节点: 安装编译依赖 (Step 3)
  • Head 节点: 克隆源码 (Step 4)
  • Head 节点: 编译 sgl-kernel (Step 5, 约 60 分钟)
  • Head 节点: 安装 SGLang (Step 6)
  • 两台机器: 修复 Triton ptxas (Step 7)
  • Head 节点: 验证安装 (Step 8)
  • Worker 节点: 复制 wheel + 安装 (Step 9)
  • 先启动 Head, 再启动 Worker (Step 10)
  • 等待 ~12 分钟,看到 "ready to roll"
  • 测试 API (Step 11)
  • 配置 OpenClaw (Step 12, 可选)
相关推荐
快乐非自愿7 小时前
OpenClaw 技术解析与 2026 稳定版工程化部署实践
人工智能·openclaw
余衫马7 小时前
Agent Skills 实战(.NET):理论 × 代码 × 企业案例
人工智能·.net·agent·skill·openclaw
jinanwuhuaguo7 小时前
OpenClaw、飞书、Claude Code、Codex:四维AI生态体系的深度解构与颗粒化对比分析
大数据·人工智能·学习·飞书·openclaw
菜鸟分享录8 小时前
OpenClaw 公网访问难题?一招解决 “control ui requires device identity“ 报错
ai·openclaw·小龙虾
赵康8 小时前
老板与员工:5分钟理解 Subagent 架构
ai·claude code·subagent·openclaw
土豆.exe9 小时前
OpenClaw 安全保险箱怎么做?从 ClawVault 看 AI Agent 的原子化控制、检测与限额
人工智能·网络安全·ai安全·openclaw
坐吃山猪10 小时前
OpenClaw05_回声机制
源码·openclaw
jinanwuhuaguo10 小时前
AI工具终极解构:OpenClaw、Coze、Dify、FastGPT、n8n、LangChain、RagFlow、GPTBots.ai 的万言深度剖析
人工智能·学习·重构·新人首发·openclaw
cuguanren10 小时前
MuleRun vs OpenClaw vs 网页服务:云端安全与本地自由的取舍之道
安全·大模型·llm·agent·智能体·openclaw·mulerun