故障排查
永远从这里开始:
docker logs --tail 50 neurogrid-agent
换网络后代理停止了工作
症状。 心跳之前一直正常,突然全部失败。或者某个任务加载完模型后,在 打开隧道时就挂掉,而且总是在差不多相同的秒数之后。你的网络在其他地方都工 作正常。
原因。 Docker 在容器创建时就确定了它的 DNS 配置,之后再也不会更 新。把机器换到另一个网络——笔记本离开了一个热点、拿到了新的 DHCP 租约、或者换了路由器——容器仍然在向一个已经不存在的解析服务器发起查询。路 由本身还能正常工作,所以看起来并没有离线:只是域名解析失败了,每一个都 要等到超时。
解决办法。 重新连接 Wi-Fi 没有用。重建容器,或者直接重启它:
docker restart neurogrid-agent
发生这种情况时,代理自己也会说明——在日志里找
Cannot resolve the backend's hostname。
预防办法。 安装时加上 --dns 1.1.1.1 --dns 8.8.8.8,就像
Linux 和 Windows 的说明里那样。这
些解析服务器在任何网络下都存在,所以容器就不再关心机器具体连在哪个网络
上。
nvidia-smi 在主机上能用,但在 Docker 里不行
缺少 NVIDIA Container Toolkit,或者守护进程还没有识别到它。
# Linux
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
docker run --rm --gpus all nvidia/cuda:12.4.1-base-ubuntu22.04 nvidia-smi
在 Windows 上,这通常意味着 Docker Desktop 没有使用 WSL2 后端,或者 Windows 驱动版本低于 575。
注册时提示 token 无效
日志显示后端无法识别这个 token。几乎总是以下几种情况之一:
- 复制时被截断了。 机器 token 很长;要复制完整的字符串。
- 已经被另一台机器用过了。 一个 token 只能认领一张 GPU。去控制台重新 获取一个。
- 这个上架项在控制台被取消了,发生在代理完成注册之前。
提示配置文件可写,并拒绝启动
这是故意的。那个文件决定了代理和哪个服务器通信,所以任何能写入它的人都可 以把你的机器重定向出去,并获取它的工作成果。
docker exec neurogrid-agent chmod 600 /data/config/config.yaml
docker restart neurogrid-agent
模型刚加载完任务就失败
几乎总是隧道的问题,而且几乎总是 DNS—— 见上文。如果 DNS 是正常的,检查一下出站的 443 端口 HTTPS 是否被屏蔽;一些企业网络和校园网会过滤它。
磁盘满了
模型权重体积很大,而且缓存会随着你提供服务的每一个不同模型不断增长。
docker system df # 空间都去哪了
docker image prune -f # 没有标签的镜像
docker volume rm neurogrid-hf-cache # 模型缓存,只在空闲时执行
永远不要删除 neurogrid-data——那是你的注册信息。
GPU 显示离线,但容器在运行
代理还活着,但它的心跳没有送达。在日志里查找
gRPC error sending heartbeat,然后:
docker exec neurogrid-agent getent hosts api.neurogrid.cc
没有输出说明是 DNS 问题——重启容器。有输出但仍然离线,说明你和我们之间的 连接在某个环节被阻断了。
某个任务失败了,但我不知道为什么
docker logs neurogrid-agent 2>&1 | grep -iE "error|failed"
任务容器完成后会被移除,所以等你去看的时候,它自己的日志已经没有了。代理 自身的日志会保留失败的原因。
还是卡住了
在 github.com/NeuroGrid-AI-exchange 开一个 issue,并附上以下命令的输出:
docker logs --tail 100 neurogrid-agent
docker inspect neurogrid-agent --format '{{.Config.Image}}'
nvidia-smi --query-gpu=name,driver_version,memory.total --format=csv