在 DGX Spark 上一键配置本地大模型和 Agent

基本理念

NIM CLI (命令行工具 nim) 把大模型的拉取、启动和 Agent 接入合并成一条命令。本文介绍如何在 DGX Spark 上通过 NIM CLI 完成:

  • 单节点:在一台 Spark 上运行大模型,并启动 NemoClaw Agent、接入微信进行交互

  • 双节点:两台 Spark 互联,跑规模更大、能力更强的大模型,让 NemoClaw Agent 拥有更智能的“大脑”

全文以 NemoClaw 为示例 Agent, NIM CLI 同样支持 Hermes Agent, OpenClaw 和 DeepSeek-Harness。

您将完成的任务

  • 安装 NIM CLI,并用一条命令完成本机环境体检与修复

  • 单节点:用 nim launch 一条命令拉起模型、配置 NemoClaw 并接入微信

  • 双节点:用 QSFP 线缆直连两台 Spark,跨节点启动大模型,再启动 NemoClaw Agent 连接大模型并接入微信

  • 按需回滚全部改动:停止模型服务、删除模型镜像、卸载 NemoClaw、双节点重置互联配置、卸载 NIM CLI

前置条件

  • DGX Spark (GB10),DGX OS

  • Docker 28.x 及以上,已配置 NVIDIA Container Toolkit

  • 充足磁盘空间存放模型权重

  • 双节点额外需要:两台 DGX Spark,一根 QSFP 线缆直连两台机器的 200GbE ConnectX 接口

重要提示

在开始操作前,请先确认本次部署的使用场景,确保您的使用场景、使用渠道和对模型、组件的选择符合适用法律法规的相应要求以及您即将部署的任何组件所适用的许可协议。

时间和风险

  • 预计时间:单节点首次完整跑通约 20 分钟,其中绝大部分时间花在镜像拉取和模型权重下载上,取决于网络。双节点在此基础上再增加约 10 – 20 分钟 (布线、互联配置、两个节点分别加载权重)。

  • 风险提示: 您将在本机运行 AI Agent 并接入消息渠道。请使用干净的环境,不要连接敏感数据或生产账户。所有改动都可以按「清理」章节完整回滚。

第 1 阶段:环境准备

单节点和双节点都需要先完成这三步。双节点场景下,两台机器都要各做一遍。

第 1 步:安装 NIM CLI

curl -fsSL https://nv-public.turing-agi.com/nim-cli/install.sh | bash

第 2 步:检查并修复本机环境

启动模型前先做一次环境体检,确认 Docker、GPU、驱动、缓存权限都就绪:

nim diag --fix

--fix 会尝试自动修复发现的问题。命令返回非零退出码表示仍有检查项未通过,按输出提示逐条处理后再继续——环境不满足时后续启动会失败。

查看本机 GPU 资源,确保空闲资源(free)足够部署模型:

free -h

第 3 步:设置默认镜像源

nim config registry default turingcm

选择模型镜像下载渠道,可选项:turingcm、tgcr、lichan。未设置时,首次拉取模型会提示用户选择。

第 2 阶段:单节点

单节点可以通过 nim launch 一键部署模型、启动 Agent。

第 4 步:一键启动模型和 Agent

以经过调优的 Qwen3.6-35B-A3B-spark 为例:

nim launch nemoclaw --model Qwen3.6-35B-A3B-spark --with-channel wechat

若不加参数 --model Qwen3.6-35B-A3B-spark,会启动交互式终端选择可运行的模型。而后依次完成:

  • 在默认镜像源里解析模型名,获取镜像地址

  • 拉取镜像 (本地已有则跳过)

  • 交互式选择推理配置

  • 启动容器 nim-qwen3.6-35b-a3b-spark

  • 轮询 /v1/models 等待模型加载完成(首次可能需要数分钟)

  • 安装 NemoClaw (含 Node.js 和 OpenShell)

  • 把 NemoClaw 的推理后端指向本地 http://localhost:8000/v1,创建沙盒并配置微信渠道

  • 启动 Agent

过程中有几处交互提示:

  • 是否使用本机已有的模型权重 —— 默认否,自动下载模型权重;已下载过权重可指定目录复用

  • 选择推理配置 —— 回车用推荐项即可

  • NemoClaw 向导 —— 沙盒命名、策略预设、选择微信作为消息渠道以及微信扫码登录。大部分配置已预设,回车确定选择即可

换用其他消息渠道:
除了微信之外,NemoClaw 还支持 slack 作为信息渠道:

nim launch nemoclaw --model Qwen3.6-35B-A3B-spark --with-channel slack

--with-channel 同时决定 NemoClaw 的策略预设和向导中要完成的渠道登录步骤。

渠道
接入方式
Wechat (微信)
扫码登录个人号,非官方协议
Slack
官方 Bot API

换用其他 Agent
例如 DeepSeek-Harness Agent:

nim launch deepseek-harness --model Qwen3.6-35B-A3B-spark

这会在本机 3080 端口启动 DeepSeek Harness 页面,打开浏览器输入 http://localhost:3080 可以访问 Web 界面、跟 Agent 进行对话。

NIM CLI 支持以下 Agent:

配方名
接入方式
支持的消息渠道
网页搜索
nemoclaw
OpenShell 沙盒
Wechat、Slack
支持
hermes-agent
直连
Wechat、feishu、Slack
支持
openclaw
直连
Wechat、feishu、Slack
支持
deepseek-harness
直连
-
-

第 3 阶段:双节点

两台 DGX Spark 通过 ConnectX 200GbE 端口直连后,能跑参数量更大、能力更强的大模型。以 DeepSeek-V4-Flash-0731 为例。

单节点、双节点路径的区别


单节点
双节点
示例模型
Qwen3.6-35B-A3B
DeepSeek-V4-Flash-0731
启动模型
无需单独启动,一键启动模型和 Agent
在两台机器上通过 nim run 启动模型
API 服务
本机
仅主节点 (Node 1)
启动 Agent
nim launch nemoclaw
nim launch nemoclaw --base-url 指向 主节点 (Node 1) 已启动的服务

双节点为什么需要分两步:1) nim launch 不支持跨节点启动模型;2) 双节点中只有主节点对外提供 API,不需要在另一个节点上再配一个 Agent。

第 5 步:连接两台 Spark

用 QSFP 线缆直连两台 DGX Spark 的 200GbE ConnectX 端口。

重要提示:端口对齐

两台机器必须插同一个口,统一使用第一个 ConnectX 口 enp1s0f0np0。两个口分属不同网段,插错口会导致两端无法互通。

在两台机器上分别安装 NIM CLI 并执行:

nim diag --fix
nim diag --connect-two-sparks --fix

第一条命令确认 Docker、GPU、驱动、缓存权限都就绪。第二条命令按阶梯逐层检查并修复:

  • 是否存在 ConnectX 互联网卡

  • 网卡链路是否 up (线缆是否插好)

  • 分配静态互联 IP —— 每个网口一个独立网段 (第一个口 192.168.100.x,第二个口 192.168.102.x),x 默认取本机主 IP 的最后一段,也可自行输入

  • 提示输入对端 Spark 的互联 IP,验证网络可达

  • 确认到对端的路由走互联网卡而不是普通网口

看到 "2-node interconnect is ready" 表示互联就绪。

第 6 步:启动跨节点大模型

重要提示:

提前下载权重
为了避免由于权重下载时间过长导致的超时问题,建议先通过以下命令提前在两个节点上下载权重:

nim run DeepSeek-V4-Flash-0731 --connect-two-sparks --only-cache

模型启动顺序:两台机器的启动顺序有严格先后:先主节点 (Node 1),再工作节点 (Node 2)。

主节点 (Node1):

nim run DeepSeek-V4-Flash-0731 --connect-two-sparks

命令会检查当前机器是否为 DGX Spark、检查 ConnectX 互联链路及静态 IPv4 地址,提示工作节点 (Node2) 的启动命令:

! On Node 2, run now:
    nim run resource.turingcm.com/deepseek-ai/deepseek-v4-flash-0731-spark:latest --connect-two-sparks --role worker --primary-node 192.168.x.x

→ Preparing Node 1; both nodes will wait before starting NIM ...

请直接复制并在工作节点 (Node2) 执行完整命令,使两个节点可以并行拉取镜像和准备模型。

准备过程中,在两个节点上,NIM CLI 会交互式询问是否加载本地模型权重:

ModelScope API token (optional; press Enter to skip):

如果模型权重在本机其他路径,输入“y”,而后在提示“Local weights directory:” 中输入目录的完整路径。

模型准备完成后,主节点 (Node1) 会显示:

2-Node Spark NIM is ready at http://127.0.0.1:8000/v1/models

可以在主节点 (Node1) 上验证:

curl http://127.0.0.1:8000/v1/models

第 7 步:配置 Agent

模型服务由主节点对外提供,因此只在该节点上执行:

nim launch nemoclaw --base-url http://localhost:8000 --with-channel wechat

必须配置 --base-url。这条命令会安装 NemoClaw、把 NemoClaw 推理后端指向该端点并接入微信,随后启动 Agent。

重要提示:--base-url 缺失的后果

未配置 --base-url 时,会在本机另起一个单节点容器,无法复用上述已启动的双节点模型。

双节点的参数限制

  • --port:API 端口,默认 8000

  • --node-manager-port:工作节点与主节点的通信端口,默认 20000;Node 1 改了之后 Node 2 要带同样的参数启动容器

  • --profile、--detach、--only-cache、--auto-start:不支持,与 --connect-two-sparks 互斥

第 4 阶段:清理

体验结束后,按下面的顺序回滚全部改动。第 5 项仅双节点场景需要,单节点可跳过。

重要提示:先看清楚删什么

第 1 – 4 项只影响 Agent 和 Docker 资源,模型权重缓存 (默认 ~/.nim/cache,通常占几十 GB) 不会被删除。权重的清理在第 6 项,且不可恢复。如果之后还想再跑一次,建议保留缓存,下次启动可以直接复用、跳过下载。

1. 恢复 NemoClaw 默认设置

nim launch nemoclaw 对 NemoClaw 做了两处改动:把推理后端从 NemoClaw 自己的默认值改成指向本地模型,以及创建一个名为 nemoclaw-nim-sandbox 的沙盒、按所选消息渠道写入对应的策略预设。

如果不再需要 Agent,可以删除沙箱:

nemoclaw nemoclaw-nim-sandbox destroy

2. 卸载 NemoClaw

NemoClaw 自带卸载程序,会删除所有沙盒、OpenShell 网关、NemoClaw 自身的 Docker 容器/镜像/卷、CLI 以及状态目录:

nemoclaw uninstall --yes

卸载程序参数:

参数
作用
--yes
跳过确认提示
--keep-openshell
保留 openshell 二进制文件
--delete-models
同时删除 NemoClaw 自己拉取的模型权重

重要提示:卸载范围

这个卸载程序只清理 NemoClaw 和 OpenShell 的资源,不会动 NIM CLI 拉起的 NIM 模型容器和镜像 —— 那是第 3、4 项的事。Node.js、npm 和 Docker 本身也会保留。

3. 停止模型服务

查看目前正在运行的模型服务:

nim list --running

而后停止对应的模型,例如:

nim stop Qwen3.6-35B-A3B-spark

停止所有由 NIM CLI 管理的、正在运行的模型服务:

nim stop --all

4. 删除 NIM 镜像

删除单个模型镜像:

nim rm Qwen3.6-35B-A3B-spark

删除所有由 NIM CLI 管理的镜像:

nim rm --all

重要提示:nim rm

不删除模型权重 权重缓存在 ~/.nim/cache 目录下,若要释放权重占用的磁盘空间,见第 6 项。

5. 重置双节点互联环境 (仅双节点需要)

nim diag --connect-two-sparks --fix 唯一写入系统的持久化配置是 netplan 文件 /etc/netplan/40-cx7.yaml,用来给 ConnectX 端口分配静态互联 IP。该文件带有 nim-cli 的标记,不会覆盖管理员手写的同名文件。

若要重置机器 IP,在两台机器上分别执行:

sudo rm /etc/netplan/40-cx7.yaml && sudo netplan apply

确认互联 IP 已经撤销:

ip -brief addr show enp1s0f0np0

6. 卸载 NIM CLI 并清理相关路径与缓存

卸载 NIM CLI:

nim uninstall

上述命令会询问是否同时删除存储在 ~/.nim 目录下的配置文件、模型权重等,按需选择,默认为否。

若需要一键卸载 NIM CLI 并删除 ~/.nim 目录:

nim uninstall --purge

~/.nim/ 目录中包含以下文件:

路径
内容
~/.nim/cache/
模型权重缓存,通常占几十 GB
~/.nim/config.toml
默认端口、GPU、缓存目录、默认镜像源以及镜像源登录凭据
~/.nim/models.json
已拉取模型的跟踪记录,nim list 离线读取它
~/.nim/*.env
按配方生成的 Agent 后端环境变量文件
~/.nim/secrets/
消息渠道令牌等机密文件 (配置过相应渠道时才有)

彻底删除 NIM CLI 运行状态和模型权重等缓存 (此操作不可逆):

rm -rf ~/.nim

最后验证清理结果,三条命令都应该没有输出或提示不存在:

which nim
ls ~/.nim
docker ps -a --filter label=nim.managed=true

附:完整流程速查

单节点

# 环境准备
curl -fsSL https://nv-public.turing-agi.com/nim-cli/install.sh | bash
nim diag --fix
nim config registry default turingcm

# 启动模型和 Agent
nim launch nemoclaw --model Qwen3.6-35B-A3B-spark --with-channel wechat

# 清理
nemoclaw uninstall --yes
nim stop --all
nim rm --all
sudo rm /usr/local/bin/nim
rm -rf ~/.nim

双节点

# 两台机器都执行
curl -fsSL https://nv-public.turing-agi.com/nim-cli/install.sh | bash
nim diag --fix
nim diag --connect-two-sparks --fix
nim config registry default turingcm

# 主节点(Node 1)
nim run DeepSeek-V4-Flash-0731 --connect-two-sparks --only-cache
nim run DeepSeek-V4-Flash-0731 --connect-two-sparks

# 工作节点(Node 2):执行 Node 1 打印的指令
nim run resource.turingcm.com/deepseek-ai/deepseek-v4-flash-0731-spark:latest --connect-two-sparks --role worker --primary-node ...

# Node 1,模型就绪后
nim launch nemoclaw --base-url http://localhost:8000 --with-channel wechat

# 清理:Node 1 执行全部,Node 2 跳过 nemoclaw uninstall
nemoclaw nemoclaw-nim-sandbox destroy
nemoclaw uninstall --yes
nim stop --all
nim rm --all
sudo rm /etc/netplan/40-cx7.yaml && sudo netplan apply
sudo rm /usr/local/bin/nim
rm -rf ~/.nim

附:有用的命令

命令
用途
nim diag --fix
检查并修复本机环境 (Docker、GPU、驱动、缓存权限)
nim diag --connect-two-sparks --fix
检查并修复两台 Spark 的 ConnectX 互联
nim config registry default turingcm
设置默认镜像源
nim launch --list
列出全部可用的 Agent 配方
nim list
查看已拉取的模型
nim list --running
查看正在运行的容器
nim stop --all
停止全部由 NIM CLI 管理的容器
nim rm --all
删除全部 NIM 镜像和跟踪记录 (保留权重缓存)
nemoclaw nemoclaw-nim-sandbox status
查看 NemoClaw 沙盒状态和推理后端配置
nemoclaw onboard
重新运行 NemoClaw 配置向导
nemoclaw uninstall --yes
卸载 NemoClaw、OpenShell 及其全部状态
curl http://localhost:8000/v1/models
确认模型服务是否就绪

如需了解更多 NIM CLI 的用法和支持矩阵,请访问 NIM CLI 文档

如需了解更多模型选择方法,请访问 NIM Dashboard (需注册登录)。

通用问题

问题
原因
解决方法
环境检查不通过
GPU、驱动或 Docker NVIDIA 运行时未就绪
运行 nim diag --fix。GPU、Docker NVIDIA 运行时相关的问题都先跑这条
Agent 连不上模型
模型服务还没就绪,或 Agent 配置有误
先确认模型本身正常:curl http://localhost:8000/v1/models。有输出说明模型正常,问题在 Agent 配置侧;没有输出说明模型还没就绪,按下面对应章节排查
Agent 配置向导要求交互终端
NemoClaw 的配置向导需要真实终端
通过 SSH 执行时确保分配了 TTY,不要在管道或 CI 中运行 nim launch
NIM CLI 界面显示启动超时,但容器还在运行未报错退出。
模型未在规定的 30 分钟内部署,通常是因为模型权重还未下载结束。
根据提示信息,通过 docker logs 查看容器的日志,等待模型下载、部署成功后即可使用。

单节点问题

问题
原因
解决方法
模型迟迟不就绪
首次启动要下载并加载权重,耗时较长属正常
CLI 会实时显示启动阶段。若容器连续 10 分钟没有任何日志输出,会判定为卡住并终止等待;总等待上限为 2 小时。超时后先看容器日志定位原因(多为磁盘空间不足或权重下载失败),再重新执行启动命令
提示模型已在运行
同一模型已有容器在跑时,CLI 会直接复用它,不会用新参数重建
想换端口等参数重启,加 --force:nim run Qwen3.6-35B-A3B-spark --force
提示容器在运行但尚未提供服务
容器已启动、模型还在加载
等待即可,或用上面的 curl 确认何时就绪
端口被占用
单节点启动时端口冲突会由 Docker 直接报错
换一个端口:nim launch nemoclaw --model Qwen3.6-35B-A3B-spark --with-channel wechat --port 8001

双节点问题

问题
原因
解决方法
互联未就绪
nim run --connect-two-sparks 报告链路未就绪
在两台机器上分别执行 nim diag --connect-two-sparks --fix
对端 ping 不通
两台机器连的不是同一编号的端口。两个口分属不同网段,交叉连接时两端 IP 不在同一网段,无法互通
确认两台都连第一个口后,重新执行 nim diag --connect-two-sparks --fix
端口被占用
主节点 (Node1) 或工作节点 (Node2) 的 API 端口、node-manager 端口被别的进程占用
CLI 会交互式提示换端口,并给出下一个可用端口作为默认值。非交互终端下需要手动指定参数:
--port 8001
--node-manager-port 20001 
主节点 (Node1) 退出并报错:Download failed after 1 attempts. Last exception: error decoding response body
慢速或不稳定网络下,可能因为一次短暂中断直接失败,随后容器退出,双节点部署失败。
在模型部署之前,通过 nim run --connect-two-sparks --only-cache 将模型权重下载到本地机器(默认路径 ~/.nim/cache),而后执行nim run --connect-two-sparks 启动模型
Agent 连不上双节点模型
漏了 --base-url。不带这个参数,nim launch 会尝试另起一个单节点容器,而不是接到已经跑起来的双节点服务上
nim launch nemoclaw --base-url http://localhost:8000 --with-channel wechat
需要撤销互联配置
nim diag --connect-two-sparks --fix 写入了 netplan 静态 IP 配置
见「第 4 阶段:清理」第 5 项