AWSは、Amazon SageMaker AIのトレーニングジョブと処理ジョブに対してSeekable OCI(SOCI)インデックスのサポートを開始しました。これにより、コンテナイメージの完全なダウンロードがジョブのクリティカルパスから外れ、起動時間が大幅に短縮されます。ディープラーニング用のコンテナイメージは10GBを超えることが多く、そのダウンロードには数分かかり、その間も課金され、チームは待たされます。SOCIインデックスは、コンテナの起動に必要なファイルだけを即座に取得し、残りはコードの実行中にバックグラウンドでストリーミングする遅延読み込みを実現します。
SOCIはオープンソース技術で、イメージ内の全ファイルをマッピングするメタデータをOCI準拠のアーティファクトとしてAmazon ECRに保存します。このインデックスは元のイメージとは別のアーティファクトであるため、イメージのダイジェストや既存の署名は有効なままです。SageMaker AIはジョブ作成時にイメージにSOCIインデックスがあるか自動的に確認し、あれば遅延読み込みを、なければ標準ダウンロードを実行します。インデックスが読み取れない場合や遅延読み込みに失敗した場合は、標準ダウンロードにフォールバックするため、ジョブが実行できなくなることはありません。
ベンチマークでは、1.8GBから35.4GBまでの8つのイメージサイズと、ml.g4dnからml.p5までの多様なインスタンスタイプで比較が行われました。標準ダウンロード時間はイメージサイズとともに増加し、48秒から7分17秒に達しましたが、遅延読み込みはサイズに関係なく3〜11秒を維持し、8倍から46倍の改善となりました。13.2GBのイメージを13種類のインスタンス構成でテストしたところ、標準ダウンロードは3分16秒から4分20秒かかったのに対し、遅延読み込みは6〜8秒で、約34倍高速でした。インスタンスタイプやサイズを変更する必要はありません。
トレーニング性能への影響は、最初のエポックを除いてほとんどありません。2番目のエポック以降は、標準ダウンロードと遅延読み込みのイメージでエポックあたりの時間は同じです。最初のエポックは、フレームワークが初めてアクセスするファイルを取得するため3〜16秒余分にかかりますが、ジョブ全体では1〜6分早く完了します。起動時にイメージの大部分を読み込む場合(例えば、torch.compileやJITコンパイルされたCUDA拡張、イメージに埋め込まれた大規模モデルの読み込み)でも、正味の節約は依然としてプラスで、ジョブは2〜3.5分早く終了しました。
SOCIインデックスの導入方法は2つあります。1つは、-sociサフィックスが付いた事前インデックス済みのAWS Deep Learning Containers(DLC)を使用する方法です。PyTorch、TensorFlow、vLLM、SGLangなどのフレームワークで利用可能です。もう1つは、カスタムイメージ用に自分でインデックスを作成する方法です。Linuxホストにcontainerd、SOCIスナップショッター、nerdctlまたはFinchをインストールし、nerdctl image convert --sociコマンドでインデックスを生成してECRにプッシュします。CI/CDパイプラインで自動化するには、CFN ECR SOCI Index Builderをデプロイします。
インデックス付きイメージの使用は簡単で、ジョブ定義で-sociタグが付いたイメージを指定するだけです。APIの変更は不要です。aws ecr batch-get-imageコマンドでイメージにSOCIインデックスが含まれているかを確認できます。注意点として、この機能はAmazon ECRのプライベートリポジトリのイメージにのみ適用され、他のレジストリやプライベートDockerレジストリ経由のイメージは対象外です。また、イメージサイズが小さいほど改善幅は小さく、約4GB未満のイメージでは効果は限定的です。