使用本地大模型运行 NemoClaw
在 DGX Spark 上安装 NemoClaw,并集成本地 vLLM 推理和 WeChat
基本理念
NVIDIA NemoClaw 是一个开源参考堆栈,可简化始终开启的 OpenClaw 助手的运行,提高安全性。它安装 NVIDIA OpenShell 运行时 (一种专为执行具有额外安全性的代理而设计的环境) ,并将其连接到 DGX Spark 上的本地 vLLM 推理。单个安装程序命令 (nemoclaw.sh ) 处理 Node.js、OpenShell 和 NemoClaw CLI;然后,板载向导会创建沙盒代理、可选的市场宣传渠道 (WeChat 或 Slack) 以及具有网络预设的策略层。
在本剧本的末尾,您将在 OpenShell 沙盒中拥有一个正在运行的 AI 智能体,您可以通过 Web UI 或终端 TUI 访问该智能体,并将推理路由到 Spark 上的本地 vLLM。您可以选择添加WeChat和可选的 Web 搜索,这一切都不会使您的主机文件系统或网络超出您在策略中明确允许的范围。
您将实现的目标
使用一条命令安装 NemoClaw (nemoclaw.sh ),根据需要拉取 Node.js、OpenShell 和 CLI
浏览 nemoclaw onboard 具有推荐设置的向导
打开 Web UI 以与智能体交互
(可选) 在安装后启用 WeChat
使用文档清理和卸载 uninstall.sh 完成后的标志
通知和免责声明
以下各节将介绍运行此演示时的安全、风险和责任。
快速启动安全检查
仅使用干净的环境。在没有个人数据、机密信息或敏感凭据的新设备或 VM 上运行此演示。像沙盒一样保持隔离。
安装此演示版,即表示您对所有第三方组件负责,包括审查其许可证、条款和安全状况。请先阅读并接受,然后再安装或使用。
您将获得
此体验“按原样”提供,仅用于演示目的,不作任何保证,也不作任何保证。这是一个演示,不是生产就绪型解决方案。您需要为自己的环境和用例实施适当的安全控制。
AI 智能体的主要风险
数据泄露 -- 智能体访问的任何材料都可能暴露、泄露或被盗。
恶意代码执行 -- 智能体或其连接的工具可能会使您的系统面临恶意代码或网络攻击。
意外操作 -- 智能体可能会修改或删除文件、发送消息或访问服务,而无需获得明确批准。
提示注入和操作 -- 外部输入或连接的内容可能会以意想不到的方式劫持智能体的行为。
参与者确认
参加此演示,即表示您确认对您的配置以及您连接的任何数据、账户和工具全权负责。在法律允许的最大范围内,对于因您配置或使用 NemoClaw 演示材料 (包括 OpenClaw 或任何关联的工具或服务) 而导致的任何数据损失、设备损坏、安全事件或其他损害,NVIDIA 概不负责。
隔离层 (OpenShell)
Layer |
What it protects |
When it applies |
|---|---|---|
Filesystem |
Prevents reads/writes outside allowed paths. |
Locked at sandbox creation. |
Network |
Blocks unauthorized outbound connections. |
Hot-reloadable at runtime. |
Process |
Blocks privilege escalation and dangerous syscalls. |
Locked at sandbox creation. |
Inference |
Reroutes model API calls to controlled backends. |
Hot-reloadable at runtime. |
开始之前需要了解的内容
Linux 终端和 SSH 的基本用法
熟悉 Docker (权限、 docker run ,可选 docker 群组成员资格)
对上述安全和风险部分的了解程度
预备知识
硬件和访问:
配备键盘和显示器或 SSH 访问权限的 DGX Spark (GB10)
软件:
全新安装包含最新更新的 DGX 操作系统
请先验证您的系统,然后再开始:
head -n 2 /etc/os-release
nvidia-smi
docker info --format '{{.ServerVersion}}'预期配置:Ubuntu 24.04、NVIDIA GB10 GPU、Docker 28.x 以上。
准备就绪,然后再开始
项目 |
在您需要时 |
|---|---|
WeChat 机器人令牌 (可选) |
使用进行扫描配对二维码,使用微信 ClawBot 对话框对话。 |
辅助文件
所有必需素材均由 NemoClaw 安装程序处理。无需手动克隆。
时间和风险
- 预估时间:首次完整测试约 30 - 60 分钟 (安装、载入、模型下载取决于选择和网络) 。如果您在第二个会话中执行可选的 WeChat 步骤,会增加时间。
- 风险级别:中 – 您在沙盒中运行 AI 智能体;风险通过隔离来降低,但不会消除。使用干净的环境,请勿连接敏感数据或生产账户。
- 上次更新时间:2026 年 6 月 30 日
将本地推理后端切换为 vLLM (代理就绪型 Qwen3.6 35B recipe)
第 1 阶段:安装并运行 NemoClaw
第 1 步:安装 NemoClaw
此单一命令可处理一切:安装 Node.js (如有需要) 、安装 OpenShell、自动克隆最新已知良好 (LKG) NemoClaw 版本、构建 CLI 并运行板载向导以创建沙盒。
curl -fsSL https://www.nvidia.com/nemoclaw.sh | bash
安装向导将引导您完成设置:
接受 NemoClaw 许可证 -- 输入 yes
运行 express install -- 输入“Confirm” (确认) ,然后 Y
注意
快速安装使用推荐的默认设置。如果您想在之后自定义配置,请运行 nemoclaw onboard 。
安装程序需要 Node.js 22.16+ (如果缺少,则自动安装) 。它将带您了解 Node.js、NemoClaw CLI 和入门阶段。在下一步中查看有关载入配置的更多详细信息。
第 2 步:NemoClaw 载入
注意
如果您在第 1 步中选择快速安装,则所有设置均会自动配置为推荐的默认设置。跳转至第 3 步,除非您需要更多自定义设置。要自定义,请运行 nemoclaw onboard 然后按照下面的向导进行操作。
在自定义设置期间,板载向导将引导您完成以下操作:
配置推理 -- 选择本地推理选项,在 DGX Spark 上运行模型。
推理模型 -- 从安装程序提示中选择一个模型。NemoClaw 将在需要时准备任何所需的本地模型构件。
沙盒名称 -- 选择名称 (例如。我的助手) 。每个沙盒都需要一个唯一的名称。
应用此配置 -- 输入 Y 确认设置本地推理。
市场宣传渠道 -- 可选。如果您启用该功能,请选择所需的机器人 ( WeChat ) 并在出现提示时粘贴您的机器人令牌。
策略预设 -- 选择所需的策略级别 ( Balanced 并在出现提示时接受/ 编辑建议的预设 (使用 Enter 键确认)。
完成后,您将看到如下输出:
────────────────────────────────────────────────── Sandbox my-assistant (Landlock + seccomp + netns) Model <your-selected-model> (Local vLLM) ────────────────────────────────────────────────── Run: nemoclaw my-assistant connect Status: nemoclaw my-assistant status Logs: nemoclaw my-assistant logs --follow ──────────────────────────────────────────────────
重要信息:
如果 nemoclaw 安装后找不到,运行 source ~/.bashrc 重新加载 shell 路径。
完成引导的时间可能会有所不同,具体取决于模型选择和互联网速度。
NemoClaw 载入可重复运行,为独立用例创建多个沙盒。使用 --name 在现有沙盒的基础上再创建一个沙盒:
nemoclaw onboard --gpu --name <new-name>
重要信息:
使用 --name 在不影响现有沙盒的情况下创建额外的沙盒。这个 --fresh flag 是保留用于启动全新板载会话的破坏性选项,如果同名沙盒已存在, --fresh 会破坏并重建它。仅使用 --fresh 当您打算擦除并重新载入时 (请参阅步骤 4,了解需要重新提示的示例) 。
第 3 步:与 OpenClaw 交互
选项 1. Web UI
获取完整的控制面板 URL (包括自动分配的端口和令牌):
nemoclaw my-assistant dashboard-url --quiet
这将打印类似于 http://127.0.0.1:18790/#token= 。端口是自动分配的 (通常是 18789 或 18790) ,可能会因安装而异。
如果直接在 Spark (已连接键盘和显示器) 上访问 Web UI,请在浏览器中打开控制面板 URL。
如果从远程机器访问 Web UI,则需要设置 SSH 隧道。
首先,注意上面控制面板 URL 中的端口号 (例如 18790)。
查找 Spark 的 IP 地址:
hostname -I | awk '{print $1}'这将打印主 IP 地址 (例如。 192.168.1.42 ) 。您还可以在 Spark 桌面上的“Settings” (设置) >“Wi-Fi”或“Settings” (设置) >“Network on the Spark” (网络) 中找到它,或查看路由器的已连接设备列表。
在远程机器中,使用上面的端口创建 SSH 隧道 (替换 以及 ) :
ssh -L <port>:127.0.0.1:<port> <your-user>@<your-spark-ip>
现在,在远程机器的浏览器中打开控制面板 URL。
重要提示:
使用 127.0.0.1 ,不是 localhost -- 网关原点检查需要完全匹配。
注意:
如果 Web UI 加载失败,并且端口转发可能过时,请从 nemoclaw my-assistant dashboard-url --quiet 并重置:
openshell forward stop <port> my-assistant || true openshell forward start <port> my-assistant --background
选项 2. 终端 UI
连接到沙盒:
nemoclaw my-assistant connect
然后在沙盒中启动终端 UI:
openclaw tui
您可以开始与 OpenClaw 聊天。按 Ctrl+ C 退出终端用户界面。
退出沙盒:
exit
第 2 阶段:修改 NemoClaw 策略
第 4 步:设置消息渠道 (以 WeChat Bot 为例)
当您的沙盒存在,但 WeChat Bot 从未配置 (您在第 2 步中跳过了消息渠道,或者沙盒策略层从未包括与 WeChat 相关的出口) 时,这些步骤适用。替换 沙盒 (例如 my-assistant)。
-
使用 NemoClaw 注册 WeChat Bot 并重建沙盒
出现提示时,选择Y。使用微信扫描提示中的二维码,使微信与OpenClaw配对。nemoclaw <sandbox-name> channels add wechat
打开微信ClawBot对话框,然后发送消息。机器人应将流量转发给您 NemoClaw 沙盒中的智能体并回复。
注意:
第一个响应可能需要更长的时间,具体取决于模型大小 ( 300 亿个模型在几秒钟内响应;较大的模型在第一次推理时可能需要更长的时间) 。
注意:
如果机器人未响应:
运行 nemoclaw status 以确认沙盒是否正在运行以及推理是否正常。
运行 nemoclaw logs --follow 并查找与 wechat 相关的错误。
如果频道从未注册过,请运行 nemoclaw channels add wechat。
第 3 阶段:设置 NemoClaw 智能体
第 5 步:设置 NemoClaw 智能体
设置 NemoClaw 智能体通常需要三个步骤:配置 NemoClaw 安全策略、运行智能体工作流提示、为您自己的用例个性化工作流。
查看这些 NemoClaw 智能体示例供参考。考虑与社区分享您的 NemoClaw 智能体设置 DGX Spark 开发者论坛。
第 4 阶段:更新 NemoClaw
第 6 步:更新 NemoClaw
要检查较新的 NemoClaw LKG 版本是否可用,请运行:
nemoclaw update --check
要在没有提示的情况下将主机侧 NemoClaw CLI 更新到当前 LKG 版本,请运行:
nemoclaw update --yes
此操作仅更新主机 CLI;不会重建现有的沙盒。更新后,检查是否需要重建沙盒:
nemoclaw upgrade-sandboxes --check
如果报告了过时的沙盒,请按照命令输出进行重建。
有关详细信息,请参阅官方的 NemoClaw 命令参考。
第 5 阶段:清理和卸载
第 7 步:卸载 NemoClaw
NemoClaw CLI 包含内置的卸载程序。它会删除所有沙盒、OpenShell 网关、Docker 容器/图像/卷、CLI 和所有状态文件。Docker、Node.js、npm 和 vLLM 容器镜像将得到保留。
nemoclaw uninstall --yes
要删除所有内容 (包括已下载的模型权重) ,请执行以下操作:
nemoclaw uninstall --yes --delete-models
卸载程序标志:
Flag |
Effect |
|---|---|
--yes |
Skip the confirmation prompt |
--keep-openshell |
退出 openshell 二进制文件到位 |
--delete-models |
另外,移除 NemoClaw 提取的模型权重 |
注意:
如果 nemoclaw CLI 不可用 (例如。在“install failed partway”) 中,使用远程卸载程序作为后备:
curl -fsSL https://raw.githubusercontent.com/NVIDIA/NemoClaw/refs/heads/main/uninstall.sh | bash -s -- --yes
卸载程序运行 6 个步骤:
停止 NemoClaw 辅助程序服务和端口转发进程
删除所有 OpenShell 沙盒、NemoClaw 网关和提供程序
删除全局 nemoclaw npm 包
删除 NemoClaw/ OpenShell Docker 容器、镜像和卷
删除已下载的模型权重 (仅使用 --delete-models)
删除状态目录 ( ~/.nemoclaw、~/.config/openshell、~/.config/nemoclaw) 和 OpenShell 二进制文件
注意:
如果您在 ~/.nemoclaw/source 在运行卸载程序之前,您需要保留、移动或备份它,在步骤 6 中进行状态清理时会将其删除。
有用的命令
Command |
Description |
|---|---|
nemoclaw my-assistant connect |
Shell into the sandbox |
nemoclaw my-assistant status |
Show sandbox status and inference config |
nemoclaw my-assistant logs --follow |
Stream sandbox logs in real time |
nemoclaw list |
List all registered sandboxes |
nemoclaw tunnel start |
Start cloudflared tunnel (public URL for remote Web UI access) |
nemoclaw tunnel stop |
Stop the cloudflared tunnel |
nemoclaw my-assistant dashboard-url --quiet |
Print the full tokenized Web UI URL (includes auto-assigned port) |
openshell term |
Open the monitoring TUI on the host |
openshell forward list |
List active port forwards |
nemoclaw uninstall --yes |
Remove NemoClaw (preserves Docker, Node.js, vLLM image) |
nemoclaw uninstall --yes --delete-models |
删除 NemoClaw 并下载模型权重 |
快速启动安全检查
错误 |
原因 |
修复 |
|---|---|---|
nemoclaw: command not found 安装后 |
Shell PATH 未更新 |
运行 source ~/.bashrc (或 source ~/.zshrc 或者打开一个新的终端窗口。 |
安装程序失败,并显示 Node.js 版本错误 |
Node.js 版本低于 22.16 |
安装 Node.js 22.16+: curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash - && sudo apt-get install -y nodejs 然后重新运行安装程序。 |
npm 安装失败 EACCES 权限错误 |
npm 全局目录不可写 |
mkdir -p ~/.npm-global && npm config set prefix ~/.npm-global && export PATH=~/.npm-global/bin:$PATH 然后重新运行安装程序。添加 export 行至 ~/.bashrc 使其永久存在。 |
Docker 权限被拒绝 |
不在 docker 组中的用户 |
sudo usermod -aG docker $USER 然后注销并重新登录。 |
网关失败,并出现 cgroup/“Failed to start ContainerManager” (无法启动容器管理器) 错误 |
较旧的 OpenShell 或 Docker 仍然为网关使用私有 cgroup 命名空间,因此 kubelet 看不到 cgroup v2 控制器 |
首次升级 OpenShell (重新运行第 1 阶段) nemoclaw.sh 安装,以便获得在网关容器上设置主机 cgroupns 的构建) 。如果仍然失败,请通过运行daemon.json cgroup 修复然后运行sudo systemctl restart docker。 |
网关失败并显示“端口 8080 由容器持有 …” |
另一个 OpenShell 网关或容器使用端口 8080 |
运行 nemoclaw onboard (或 nemoclaw onboard --resume ) 。NemoClaw 会探测现有的托管网关,如果网关正常,则重用该网关,并在安全时重建过时的网关状态。请参阅 NemoClaw 命令文档。 |
沙盒创建失败 |
网关状态过时或 DNS 未传播 |
运行 nemoclaw onboard (或 nemoclaw onboard --resume)。NemoClaw 会探测现有的托管网关,如果网关正常,则重用该网关,如果可以安全地重建过时的网关状态。请参阅 NemoClaw 命令文档。 |
CoreDNS 崩溃循环 |
某些 DGX Spark 配置存在已知问题 |
重新运行 NemoClaw 安装程序 (curl -fsSL https://www.nvidia.com/nemoclaw.sh | bash ) ,其中包括 CoreDNS 修复程序。如果问题仍然存在,请参阅 NemoClaw 故障排除。 |
板载期间“未检测到 GPU” |
DGX Spark GB10 以不同方式报告统一内存 |
预期在 DGX Spark 上运行。该向导仍然有效,并使用 vLLM 进行推理。 |
推理超时或挂起 |
vLLM 无法运行或无法访问 |
检查 vLLM 服务器:curl http://127.0.0.1:8000/v1/models 应列出 nvidia/Qwen3.6-35B-A3B-NVFP4 。如果挂起,模型可能仍在加载中 Application startup complete 。然后检查 nemoclaw my-assistant status 用于推理运行状况线。 |
智能体未给出响应或速度非常慢 |
初始响应速度可能很慢,尤其是在模型较大的情况下 |
响应时间取决于模型大小 ( 30B:几秒,120B:30 - 90 秒) 。验证推理路由: nemoclaw my-assistant status 。 |
端口 18789 已投入使用 |
另一个进程与端口绑定 |
lsof -i :18789 然后 kill 。如果需要, kill -9 强制终止。 |
Web UI 端口正向死亡或控制面板无法访问 |
openshell forward stop 18789 my-assistant 然后 openshell forward start 18789 my-assistant --background。 |
|
Web UI 显示 origin not allowed |
使用 http://127.0.0.1:18789/#token=... 在浏览器中打开。网关原点检查需要 127.0.0.1 确切地说。 |
|
微信 ClawBot 机器人会接收消息但不回复 |
运行nemoclaw status 以及 nemoclaw logs ,查找WeChat相关报错。修复记录的原因;运行 nemoclaw recover 仅当沙盒网关不健康时。如需更改 Telegram 配置,请重新运行 nemoclaw onboard。请参阅 NemoClaw 故障排除指南。 |
Daemon.json cgroup 修复
将此脚本用作上述 cgroup/“Failed to start ContainerManager” (启动容器管理器失败) 行的备用脚本。它会验证任何现有的 /etc/docker/daemon.json ,写入一个 .bak 备份、设置 default-cgroupns-mode 到 host 并原子地替换文件。如果出现任何故障,它将非零退出,并在 stderr 上显示错误,保留原始 daemon.json 未受影响。
sudo python3 - <<'PY'
import json, os, shutil, sys, tempfile
path = '/etc/docker/daemon.json'
try:
if os.path.exists(path):
with open(path) as f:
data = json.load(f)
if not isinstance(data, dict):
raise ValueError(f'{path} is not a JSON object')
else:
data = {}
except (json.JSONDecodeError, ValueError, OSError) as e:
print(f'error: failed to read {path}: {e}', file=sys.stderr)
sys.exit(1)
if os.path.exists(path):
try:
shutil.copy2(path, path + '.bak')
except OSError as e:
print(f'error: failed to back up {path}: {e}', file=sys.stderr)
sys.exit(1)
data['default-cgroupns-mode'] = 'host'
target_dir = os.path.dirname(path) or '/'
fd, tmp = tempfile.mkstemp(prefix='daemon.json.', dir=target_dir)
try:
with os.fdopen(fd, 'w') as f:
json.dump(data, f, indent=2)
f.write('\n')
os.chmod(tmp, 0o644)
os.replace(tmp, path)
except OSError as e:
if os.path.exists(tmp):
try:
os.unlink(tmp)
except OSError:
pass
print(f'error: failed to write {path}: {e}', file=sys.stderr)
sys.exit(1)
PY注意
DGX Spark 采用统一内存架构 (UMA) ,可在 GPU 和 CPU 之间实现动态内存共享。由于许多应用程序仍在更新以利用 UMA,即使在 DGX Spark 的内存容量范围内,您也可能会遇到内存问题。如果发生这种情况,请使用以下命令手动刷新缓冲区缓存:
sudo sh -c 'sync; echo 3 > /proc/sys/vm/drop_caches'
有关最新的已知问题,请查看 DGX Spark 用户指南。