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 的鏡像收益相對較小。