SageMaker 训练任务支持 SOCI 懒加载镜像:35 GB 深度学习镜像的拉取从 7 分多钟缩到十秒内,代价是首个 epoch 多 3–16 秒

AWS 10 月 27 日宣布,Amazon SageMaker AI 的训练任务和处理任务支持 Seekable OCI(SOCI)索引镜像:任务启动时只拉取运行容器所需的文件,其余在代码运行时后台流式加载,不再等整个镜像下载解压完。AWS 实测中,标准拉取耗时随镜像增大从 1.8 GB 的 48 秒增至 35.4 GB 的 7 分 17 秒,懒加载则稳定在 3–11 秒,快 8 到 46 倍;13.2 GB 镜像在 13 种实例配置上都快约 34 倍。代价是首个 epoch 因首次读取文件多花 3–16 秒,此后每个 epoch 用时不变,单个任务净省 1–6 分钟。用法是把镜像标签换成带 -soci 后缀的 AWS 深度学习容器(PyTorch、TensorFlow、vLLM、SGLang),或给自建镜像生成索引,无需改任务定义。仅支持 Amazon ECR 私有仓库,约 4 GB 以下的镜像收益不大,已在所有 AWS 区域可用。

每个任务都在为下载镜像付费

在 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