问题背景
在使用双机(MacBook + Ubuntu AI Server)进行 llama.cpp RPC 分布式推理时,遇到了一个非常诡异的问题:只要 Ubuntu 机器进入锁屏状态,远程 RPC 连接就会失效。
尽管我并没有设置系统自动休眠(suspend),但锁屏后,客户端就再也无法通过 RPC 调用服务器端的推理服务了。
走过的“错路”
在解决这个问题之前,我尝试了多种思路,但都证明是“错误方向”:
- 怀疑系统进入了 Suspend (休眠)
尝试检查systemctl status sleep.target,但系统并未进入休眠,进程仍在运行。 - 怀疑 Terminal 会话被关闭
使用了tmux来运行llama-server,试图防止 GUI Session 锁屏导致终端进程挂起,但即便在tmux中,RPC 依然会断开。这意味着问题不在于终端会话的生命周期,而在于更底层的网络或硬件状态。 - 怀疑 GPU Context 丢失
锁屏时观察nvidia-smi,发现 GPU 并没有因为锁屏而重置或释放显存,进程依然可以正常访问 GPU。
真正的原因:Wi-Fi Powersave
经过排查,问题的根源在于 Ubuntu 的 Wi-Fi 省电模式 (Power Management)。
当 Ubuntu 进入锁屏状态时,系统会触发一系列节能策略,其中之一就是让无线网卡进入低功耗模式。对于 llama.cpp RPC 这种极其依赖长连接 (Long-lived TCP connection) 的协议来说,Wi-Fi 省电导致的延迟增加或短暂的网络静默,会直接导致 TCP 连接被静默切断(Silently broken)。
解决方案
通过禁用 Wi-Fi 的省电模式,问题得到了完美解决。
0. 确认你的网卡名称
在操作之前,你需要先确认你的无线网卡接口名称(Interface Name)。请在终端执行:
iw dev
你会看到类似以下的输出:
Interface wlan0
wdev 0x...
...
# 或者
Interface wlp2s0
...
请记住这个名字(例如 wlan0 或 wlp2s0),接下来的命令需要替换它。
1. 临时测试(立即生效,重启失效)
使用 iw 工具直接关闭当前网卡的省电功能(将 wlan0 替换为你的实际网卡名):
sudo iw dev wlan0 set power_save off
然后验证是否成功:
iw dev wlan0 get power_save
如果显示 Power save: off,说明设置成功。现在你可以尝试锁屏测试 RPC 是否还掉线。
2. 永久生效(推荐)
为了保证重启后依然有效,建议修改 NetworkManager 的配置:
- 创建或编辑配置文件:
sudo nano /etc/NetworkManager/conf.d/wifi-powersave.conf - 写入以下内容:
[connection] wifi.powersave = 2(注:
2代表禁用 powersave) - 重启 NetworkManager 使配置生效:
sudo systemctl restart NetworkManager
总结与进阶建议
如果你在构建 AI 推理服务器,除了修复 Wi-Fi 问题,还可以考虑方案以获得更高的稳定性:
- 优先使用有线网络:物理链路的稳定性永远是第一位的。
- 使用无头模式 (Headless):尽量使用 Ubuntu Server,避免 GUI/Wayland/NVIDIA 组合带来的玄学问题。
- 使用 systemd 管理服务:将
llama-server配置为 systemd service,并设置Restart=always,以应对驱动或网络抖动。