在 Linux 上安装
从头到尾只需要三条命令。
1. 确认机器已经准备好
# Docker 已安装,且你无需 sudo 就能使用它
docker run hello-world
# NVIDIA 驱动已安装,且 Docker 能看到这块 GPU
docker run --rm --gpus all nvidia/cuda:12.4.1-base-ubuntu22.04 nvidia-smi
第二条命令必须打印出你的显卡信息。如果失败了,说明缺少驱动或 NVIDIA Container Toolkit ——这是唯一需要你自己安装的部分。
2. 选一个密码并保存好
它用来加密你保存的 token。生成一个,并保存在六个月后你仍然能找到的地方。
export AGENT_ENCRYPTION_PASSWORD="$(openssl rand -base64 32)"
echo "$AGENT_ENCRYPTION_PASSWORD" # 现在就把它记下来
3. 运行它
docker run -d --name neurogrid-agent \
--gpus all --restart unless-stopped \
--log-driver json-file \
--log-opt max-size=10m \
--log-opt max-file=3 \
--dns 1.1.1.1 --dns 8.8.8.8 \
-v neurogrid-data:/data \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /var/lib/neurogrid/workloads:/var/lib/neurogrid/workloads \
-e AGENT_ENCRYPTION_PASSWORD="$AGENT_ENCRYPTION_PASSWORD" \
ghcr.io/neurogrid-ai-exchange/neurogrid-agent:latest --token ng_live_xxxxxxxx
把 ng_live_xxxxxxxx 换成控制台给你的 token。安装到这里就完成了——如果你
还没有这个镜像,它会自动拉取。
看看它启动的过程:
docker logs -f neurogrid-agent
你要找的是 Bootstrap sent successfully,然后是每 30 秒出现一次的
Heartbeat sent successfully。你的 GPU 会在同一时刻在控制台变成已确认。
不需要再次传入 --token。就算你又传了一次,也会被忽略,仍然使用已保存
的那个。
每个参数的作用
| 参数 | 为什么不能去掉 |
|---|---|
--gpus all | 没有它,容器里就没有 nvidia-smi,代理也就无法测量显存或为模型分配大小 |
--dns 1.1.1.1 --dns 8.8.8.8 | Docker 在容器创建时固定 DNS,之后永远不会更新。如果没有这些在任何网络下都存在的解析服务器,把这台机器移到别的网络就会在不知不觉中出问题——参见故障排查 |
-v neurogrid-data:/data | 保存加密的 token 和你的配置,这样升级时主机仍保持已注册状态 |
-v /var/run/docker.sock | 代理用它来启动任务容器。这等同于对主机的 root 级访问权限——容器只是打包方式,不是安全边界 |
-v /var/lib/neurogrid/workloads | 任务工作区,故意在两边使用相同路径:代理把这个路径交给 Docker 守护进程,由它在主机上解析 |
--restart unless-stopped | 崩溃后会自动恢复,随机器重启而恢复,但如果你主动停止它,它就会保持停止状态 |
使用 Docker Compose
一旦过了测试阶段就很值得——它把这些参数存进一个文件,而不是留在你的 shell 历史记录里。
curl -fLO https://raw.githubusercontent.com/NeuroGrid-AI-exchange/neurogrid-agent/main/docker-compose.yml
export AGENT_ENCRYPTION_PASSWORD="$(openssl rand -base64 32)"
docker compose run --rm agent --register-only --token ng_live_xxxxxxxx
docker compose up -d
--register-only 会在注册成功后立刻退出,而不是继续进入守护进程。把它单
独作为一步是值得的,因为 up -d 是以分离模式运行的:否则注册失败就会变成
一个原因埋在日志里的重启循环,而不是一个你能立刻看到的非零退出码。
各项内容保存在哪里
| 路径 | |
|---|---|
| Token 与配置 | neurogrid-data volume,容器内对应 /data |
| 日志 | docker logs neurogrid-agent |
| 任务工作区 | 主机上的 /var/lib/neurogrid/workloads |
没有任何内容会写进你的主目录。