AWS 近日宣布为 Amazon SageMaker AI 训练和处理作业提供 Seekable OCI(SOCI)索引支持,旨在消除容器镜像完整下载带来的启动延迟。对于深度学习容器镜像,下载往往需要数分钟,这段时间不仅计费,还拖慢了模型迭代速度。SOCI 索引通过懒加载机制,仅获取启动容器所需的文件,其余部分在代码运行时后台流式传输,从而将作业启动时间从分钟级降至秒级。
SOCI 是一种开源技术,其索引作为元数据映射镜像内所有文件,并以 OCI 兼容工件的形式存储在 Amazon ECR 中,与原始镜像关联但独立存在,因此镜像摘要和现有签名不受影响。当用户创建 SageMaker AI 作业时,服务会自动检查镜像是否带有 SOCI 索引:若有,则懒加载;若无,则标准下载;若索引无法读取或懒加载失败,则回退到标准下载,确保作业始终能运行。
在基准测试中,AWS 对比了标准下载与 SOCI 懒加载在多种镜像大小(1.8 GB 至 35.4 GB)和实例类型(如 ml.g4dn、ml.g5、ml.p4d、ml.p5 等)上的表现。结果显示,标准下载时间随镜像增大而线性增长,从 48 秒到 7 分 17 秒不等,而懒加载始终保持在 3 至 11 秒,提升约 8 至 46 倍。对于 13.2 GB 镜像,在 13 种实例配置上标准下载需 3 分 16 秒至 4 分 20 秒,懒加载仅需 6 至 8 秒,约 34 倍加速,且不受实例类型和大小影响。
训练性能方面,从第二个 epoch 开始,懒加载镜像与标准下载镜像的 epoch 时间相同(在运行间波动范围内)。首个 epoch 因需获取框架首次访问的文件,会多出 3 至 16 秒,但每个作业总体仍提前 1 至 6 分钟完成。对于启动时读取大量镜像内容的场景,如 torch.compile、JIT 编译 CUDA 扩展或加载内置大模型,首个 epoch 开销会增加,但净节省仍为正,作业整体提前 2 至 3.5 分钟完成。
采用 SOCI 索引有两种方式:一是使用预索引的 AWS 深度学习容器(DLC),这些镜像标签带有 -soci 后缀,覆盖 PyTorch、TensorFlow、vLLM 和 SGLang 等框架;二是为自己的自定义镜像创建索引。创建索引需要在 Linux 主机上安装 containerd、SOCI snapshotter 及 nerdctl 或 Finch 等工具,通过 nerdctl image convert --soci 命令生成索引并推送至 ECR。用户还可通过部署 CFN ECR SOCI Index Builder 在 CI/CD 中自动构建索引。
使用索引镜像时,只需在作业定义中引用带有 -soci 标签的镜像即可,无需更改 API 或作业配置。用户可通过 aws ecr batch-get-image 命令验证镜像是否包含 SOCI 索引。需要注意的是,该功能仅适用于 Amazon ECR 私有仓库中的镜像,其他仓库或通过私有 Docker 注册表拉取的镜像不适用;镜像越小,提升幅度越有限,小于约 4 GB 的镜像收益相对较小。