给Vast.ai的spot GPU写了套容灾脚本,测出一堆bug
周末折腾了一下Vast.ai的spot GPU,给训练任务写了个failover守护进程,踩了不少坑。
先说背景。Vast.ai是个GPU租赁平台,spot实例便宜,但随时可能被驱逐。驱逐本身只是几分钟的事,真正心疼的是训练了几个小时的进度跟着没了。我实验室经费紧张,能省一点是一点,所以想写个守护进程,检测到驱逐信号就自动把任务迁到另一台机器上,从最近的checkpoint续跑。素材里说spot GPU适合可重启、有检查点的任务,这个思路是对的,但做起来比想象中麻烦。
第一天搭环境就卡住了。Vast.ai不用密码,只认SSH密钥,我配好密钥之后发现连不上,查文档才知道是密钥权限没设置对。这个平台对新手不太友好,官方troubleshooting文档写了很多坑,但都是英文,得一条条试。我用Claude Code写守护进程的主逻辑,倒是很快,但调试起来还是得上手。
第三天开始跑真实测试。我故意开了一台便宜的机器,跑到一半手动终止实例,模拟驱逐。守护进程确实检测到了,也触发了迁移,但迁移过去之后,环境变量丢了。查了下官方文档,里面赫然写着「Environment Variables Not Working」,敢情这不是我一个人的问题。
一周测下来,发现了5个真实bug。有一个特别坑:checkpoint同步竞态。迁移时如果上一台机器还在写盘,新机器读到的是半个文件,直接崩了。这个bug我在自己代码里修了,但平台侧的API行为不确定性还是让人头疼。毕竟Vast.ai自己也在2024年修了一堆bug,从产品更新日志看,他们的迭代节奏是挺快的,但离稳定还有距离。
素材里提到Vast.ai已经集成SkyPilot,可以用sky logs直接看日志,这个生态整合值得肯定。还有人把RTX 5090挂上去出租,说明供给端也在增长。
我的结论,看情况。适合有工程能力的人,不适合小白。优点:便宜,GPU种类多,spot实例对可重启任务很友好。缺点:SSH和文档一堆坑,API行为不够稳定,测试中暴露的平台侧问题不少。
| 优点 | 缺点 |
|---|---|
| 价格便宜,GPU种类多 | SSH配置和文档有不少坑 |
| spot实例适合可重启任务 | API行为不稳定,环境变量会丢 |
| 集成SkyPilot,生态在扩展 | 平台自身bug多,需要自己兜底 |
趋势预测:Vast.ai这类平台会越来越热,但spot GPU的可靠性问题会催生一批专门的容灾工具,就像数据库领域的高可用方案一样。以后可能不是「要不要用spot」的问题,而是「用什么工具管spot」。
本文编译自 Hacker News,原文:GitHub - enplabs/spotwarp: Zero-Downtime Spot GPU Failover Guard & Auto-Resumer · GitHub
版权归原作者所有,本文为基于公开报道的编译与独立分析。
物界前沿