每个任务都在为下载镜像付费
在 SageMaker AI 上跑训练或处理任务,代码执行前要先把整个容器镜像从 ECR 拉下来、逐层解压写盘。深度学习镜像动辄 10 GB 以上,这几分钟按任务时长计费,却不产出任何训练进度;超参数扫描这类一次起几百个短任务的场景,镜像下载甚至可能占掉大半运行时间。
AWS 10 月 27 日宣布,SageMaker AI 的训练任务和处理任务支持 Seekable OCI(SOCI)索引镜像。SOCI 是开源的容器懒加载技术:索引记录镜像里每个文件的位置,任务启动时只取运行容器所需的文件,其余在代码运行过程中后台流式加载。索引作为独立制品存放在 ECR,原镜像的摘要和签名不变;镜像没有索引时自动退回标准下载,不会让任务失败。
AWS 实测数字
- 下载时间:标准拉取从 1.8 GB 镜像的 48 秒增长到 35.4 GB 的 7 分 17 秒;懒加载无论镜像大小都在 3–11 秒,快 8 到 46 倍。
- 不同实例:13.2 GB 镜像在 13 种 GPU 和 CPU 实例配置上,标准拉取 3 分 16 秒到 4 分 20 秒,懒加载 6–8 秒,约快 34 倍。
- 训练速度:在 ResNet-50 图像分类和 Qwen2.5-0.5B 全参数微调两类任务上,首个 epoch 因首次读取文件多花 3–16 秒,从第二个 epoch 起每轮用时与标准方式相同,单个任务净省 1–6 分钟。即便入口脚本要先用
torch.compile编译、或镜像里打包了 6 GB 模型权重,任务仍分别提前 3 分多钟和 2–2.5 分钟结束。
怎么用、哪些情况收益小
最简单的做法是把镜像标签换成带 -soci 后缀的 AWS 深度学习容器,目前有 PyTorch 训练、TensorFlow 训练、vLLM 和 SGLang 的预索引版本;自建镜像则需要在装有 containerd 和 SOCI snapshotter 的 Linux 主机上生成索引,也可以部署 AWS 提供的模板在每次推送镜像时自动建索引。任务定义、API 调用和数据通道都不用改。
限制同样写得明白:只支持 Amazon ECR 私有仓库;约 4 GB 以下的镜像收益不大;如果入口脚本启动前就要扫描、校验或预加载镜像里的大部分内容,首个 epoch 会等回接近整镜像的数据量,净收益很小;SOCI 镜像跑在基于 containerd 的运行时上,调用 Docker CLI 或读取 /var/run/docker.sock 的脚本需要检查。从自家 DLC 派生的镜像也要重新建索引,基础镜像的索引不会继承。该功能已在所有 AWS 区域可用。
via: AWS Machine Learning Blog:Announcing SOCI-indexed images for faster SageMaker AI jobs