同时跑八个并行机器学习实验听起来高效,但日志里每个沙箱 worker 都先花 40 秒执行 pip install numpy,再加载数据集,训练脚本一行还没跑。八份完全相同的前置开销,你付了八次钱。这不是性能 bug,是心理模型出了岔子——以为独立等于从头启动,Tensorlake 用内存快照把这件事纠正过来。
“从零开始”被悄悄当成隔离的同义词。并行 worker 确实需要独立文件系统和独立进程树,需要一个已知的起始态,但它们完全没必要重新安装同样的 numpy、重新从磁盘加载同一份数据集,更不必为每次迭代都重新播种一个完全相同的 Python 环境。把“重新开始”当作隔离的强制要求,是多付的冤枉账。
最初我用了文件系统快照,因为那是默认选项。八名 worker 都从同一个文件系统快照启动,结果每个都冷启动:操作系统拉起,Python 启动,模块导入,数据读入内存——包安装跳过了,可进程初始化一步没少。文件系统快照只存磁盘状态,不存内存状态,所以恢复后一切进程都要重新点燃。
后来我读到文档里的 CheckpointType.MEMORY。内存快照同时捕获文件系统和整个虚拟机内存状态,包括快照瞬间所有运行中的进程。从内存快照恢复时,沙箱是热恢复——Python 解释器已经在运行,快照前导入的模块已加载,内存里的变量都还在。它更像 Unix 的 fork,而不是 Docker 镜像。你恢复的不是一个文件系统,而是一个温热的进程世界,这样八名 worker 从一个已预热的状态分叉,各自跑不同训练脚本,无需重复安装和加载。
所以问题的本质不是设备不够快,而是心理模型把“隔离”和“从零重建”绑定了。换一个原语:先构建到温热状态,再像分叉一样给每个 worker 一份独立副本,隔离还在,初始化只做一次。
热门跟贴