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