定时休眠自动唤醒AI推理节省算力成本
适用场景:为什么需要定时休眠自动唤醒?
许多AI推理团队在非工作时间(比如夜间或周末)几乎无流量,但GPU服务器仍按小时计费,导致大量浪费。
通过定时休眠自动唤醒,可以在无流量时自动关机,在需要时自动开机,大幅降低算力成本。
本文适用于物理机或云计算的Linux实例,使用系统自带的 rtcwake 工具实现自动唤醒,无需依赖云平台API,零基础也能操作。
准备工作:确认硬件与安装工具
- 检查硬件支持:
rtcwake需要主板支持RTC(实时时钟)唤醒。运行ls /sys/class/rtc/rtc*/wakealarm确认存在该文件。若没有,考虑云平台API方案。 - 安装工具:通常
rtcwake在util-linux包中,未安装则执行:
sudo apt install util-linux # Debian/Ubuntu
sudo yum install util-linux # CentOS/RHEL
- 确认root权限:休眠和唤醒脚本需要root权限。
- 备份现有任务:执行
crontab -l > cron_backup.txt备份当前计划任务。
核心操作:编写休眠与唤醒脚本并设置cron
1. 编写休眠脚本(定时关机)
创建 /usr/local/bin/sleep_gpu.sh,内容如下:
#!/bin/bash
# 关闭GPU推理服务(如Docker容器)
docker-compose -f /opt/ai-inference/docker-compose.yml down # 如果使用容器
# 强制关机
shutdown -h now
保存后赋予可执行权限:chmod +x /usr/local/bin/sleep_gpu.sh。
2. 编写自动唤醒脚本(定时开机)
创建 /usr/local/bin/wake_gpu.sh,用于下次开机时间。
注意 rtcwake 是让当前系统在指定时间自动唤醒,需在关机前运行:
#!/bin/bash
# 设置明天早上8:00自动唤醒
WAKE_TIME="08:00"
# 计算绝对时间(假设当前日期不变)
WAKE_EPOCH=$(date -d "$(date +%Y-%m-%d) $WAKE_TIME" +%s)
sudo rtcwake -m no -t $WAKE_EPOCH
如果希望每周期循环,可使用 date -d "$WAKE_TIME" 配合cron。
更简单的方法:在关机脚本中直接调用 rtcwake 设置唤醒时间。
3. 整合:在休眠前设置唤醒时间
修改 sleep_gpu.sh,在关机前调用 rtcwake:
#!/bin/bash
# 设置次日08:00唤醒
WAKE_TIME="08:00"
WAKE_EPOCH=$(date -d "$(date +%Y-%m-%d) $WAKE_TIME" +%s)
sudo rtcwake -m no -t $WAKE_EPOCH
# 停止服务并关机
docker-compose -f /opt/ai-inference/docker-compose.yml down
shutdown -h now
4. 设置crontab定时执行休眠脚本
执行 sudo crontab -e,添加如下行(每天晚上23:00关机):
0 23 * * * /usr/local/bin/sleep_gpu.sh
这样每天23:00执行休眠脚本,自动设置次日8:00唤醒并关机。
效果验证:确认定时休眠与唤醒正常
- 查看唤醒设置:在关机前手动执行脚本,确认输出
rtcwake: wakeup from ...无报错。 - 检查实际唤醒:次日8:00后登录服务器,执行
uptime查看启动时间是否接近设定值。 - 查看日志:检查
/var/log/syslog或journalctl -u cron确认cron按时触发。 - 模拟验证:也可以先将唤醒时间设为当前时间的5分钟后,然后关机,等待自动开机。
常见问题与避坑说明
- 唤醒失败:检查BIOS中是否开启“自动开机”或“RTC唤醒”功能。物理机需进入BIOS设置。
- rtcwake权限:确保crontab为root运行,避免权限不足。
- 时区影响:系统时区与
date命令相关,使用timedatectl确认时区正确。 - 服务未正确关闭:休眠前务必安全停止AI推理生产服务(如docker-compose down),防止数据损坏。
- cron环境变量:脚本中尽量使用绝对路径,避免cron下PATH不同导致命令找不到。
如果你正在操作GPU服务器定时休眠自动唤醒,建议先按本文步骤在测试实例上完整执行一次,确认唤醒正常后再应用到生产环境。
遇到异常时优先检查硬件支持、时区和cron日志。
相关阅读:[Linux crontab定时任务入门教程]