Amazon SageMaker StudioがSOCIインデックス作成をサポート、コンテナ起動時間を30〜50%短縮
新機能の背景
カスタムコンテナイメージの起動時間がボトルネックに
Amazon SageMaker Studio は、機械学習(ML)の開発を行うためのフルマネージド型のブラウザベース統合開発環境です。TensorFlow、PyTorch、Scikit-learn などの人気の ML フレームワーク用のあらかじめ構築されたコンテナイメージが提供されており、迅速に環境をセットアップできます。
しかし、データサイエンティストが特定のユースケースのために追加のライブラリ、依存関係、設定などを含むカスタム環境が必要な場合、カスタムコンテナイメージを構築して登録することができます。ML ワークロードがより複雑になるにつれ、これらのカスタムコンテナイメージのサイズが大きくなり、起動に数分かかるようになっていました。
従来の課題
- 長い起動時間: 2〜5GB の典型的な ML イメージの場合、起動時間が 3〜5 分かかる
- 完全ダウンロードの必要性: コンテナの起動前に、イメージ全体をダウンロードする必要がある
- 開発効率の低下: 反復的な ML 開発において、迅速な実験と高速なプロトタイピングが妨げられる
- 実際の使用率: 研究によれば、イメージダウンロードはコンテナ起動時間の 76% を占めるが、実際にコンテナの起動に必要なデータは平均でわずか 6.4% に過ぎない
これらの起動レイテンシーは、環境を頻繁に切り替えたり、異なるフレームワークを使用したりする場合に特に顕著なボトルネックとなり、開発者の生産性を大きく低下させていました。
新機能の概要
SOCI インデックス作成による遅延ローディング
今回、Amazon SageMaker Studio に SOCI(Seekable Open Container Initiative)インデックス作成のサポートが追加されました。この機能により、カスタムイメージ使用時のコンテナ起動時間が 30〜50%(場合によっては最大 70%)短縮されます。
SOCI の仕組み
SOCI は、コンテナイメージの遅延ローディング(lazy loading)を可能にする技術です:
- インデックスの作成: コンテナイメージの内部ファイル構造をマッピングする特殊なメタデータインデックスを作成
- 選択的ダウンロード: イメージ全体ではなく、アプリケーションの起動に必要な最小限のコンポーネント(通常は全体の 5〜10%)のみをダウンロード
- オンデマンドロード: 追加のファイルは必要に応じてバックグラウンドで並行してダウンロード
- 即座の起動: ユーザーは数秒で作業を開始でき、環境は透過的にバックグラウンドで初期化を完了
主要なメリット
- 高速化: 起動時間を 30〜70% 短縮(イメージサイズとインスタンスタイプによる)
- イメージ保全: 元のコンテナイメージを変更せず、イメージダイジェストと署名の有効性を維持
- ユニバーサル最適化: SageMaker Studio のすべてのカスタム BYOI(Bring Your Own Image)コンテナに適用可能
- OCI 準拠: SOCI インデックスは OCI 準拠のアーティファクトとして Amazon ECR に保存
アーキテクチャコンポーネント
- 元のコンテナイメージ: Amazon ECR に保存されたベースコンテナ
- SOCI インデックスアーティファクト: イメージのファイル構造をマッピングするメタデータ
- OCI Image Index マニフェスト: 元のイメージと SOCI インデックスをリンクする OCI 準拠マニフェスト
- Finch コンテナランタイム: Studio との遅延ローディング統合を実現
使い方
前提条件
- SageMaker と ECR リソースを管理する権限を持つ IAM ロールを持つ AWS アカウント
- SageMaker ドメイン(初めての場合は作成が必要)
- コンテナイメージと SOCI インデックスを保存するためのプライベート Amazon ECR リポジトリ
- AWS CLI バージョン 2.0 以上
SOCI インデックスの作成方法
SOCI インデックスは、以下のツールを使用して作成できます:
オプション 1: nerdctl と SOCI CLI の使用
# 変数の設定
ACCOUNT_ID="111122223333"
REGION="us-east-1"
REPOSITORY_NAME="repository-name"
ORIGINAL_IMAGE_TAG="original-image-tag"
SOCI_IMAGE_TAG="soci-indexed-image-tag"
# 必要なツールのインストール
sudo yum install soci-snapshotter
sudo yum install containerd jq
sudo systemctl start soci-snapshotter
sudo systemctl restart containerd
sudo yum install nerdctl
# レジストリ変数の設定
REGISTRY_USER=AWS
REGISTRY="$ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com"
# Amazon ECR への認証
export AWS_REGION=$REGION
REGISTRY_PASSWORD=$(aws ecr get-login-password --region $AWS_REGION)
echo $REGISTRY_PASSWORD | sudo nerdctl login -u $REGISTRY_USER --password-stdin $REGISTRY
# 元のコンテナイメージのプル
sudo nerdctl pull $REGISTRY/$REPOSITORY_NAME:$ORIGINAL_IMAGE_TAG
# SOCI インデックスの作成
sudo nerdctl image convert --soci $REGISTRY/$REPOSITORY_NAME:$ORIGINAL_IMAGE_TAG $REGISTRY/$REPOSITORY_NAME:$SOCI_IMAGE_TAG
# SOCI インデックス付きイメージのプッシュ
sudo nerdctl push --platform linux/amd64 $REGISTRY/$REPOSITORY_NAME:$SOCI_IMAGE_TAG
オプション 2: Finch CLI の使用
Finch CLI は、AWS が開発した Docker 互換のコマンドラインツールで、SOCI のネイティブサポートが組み込まれています。Docker のようなインターフェースで、追加のツールなしで SOCI インデックス付きイメージを簡単に作成できます。
オプション 3: Docker + SOCI CLI の使用
既存の Docker ワークフローを活用しながら、専用の SOCI コマンドラインインターフェースを通じて SOCI インデックス作成機能を追加できます。
SageMaker Studio での使用
SOCI インデックス付きイメージを作成後、SageMaker Studio で使用するには:
# SOCI v2 イメージインデックス URI の使用
IMAGE_INDEX_URI="123456789012.dkr.ecr.us-west-2.amazonaws.com/my-sagemaker-image:soci-image"
# SageMaker Image の作成
aws sagemaker create-image \
--image-name "my-sagemaker-image" \
--role-arn "arn:aws:iam::123456789012:role/SageMakerExecutionRole"
# SOCI インデックスを使用した SageMaker Image Version の作成
aws sagemaker create-image-version \
--image-name "my-sagemaker-image" \
--base-image "$IMAGE_INDEX_URI"
# JupyterLab 用 App Image Config の作成
aws sagemaker create-app-image-config \
--app-image-config-name "my-sagemaker-image-config" \
--jupyter-lab-app-image-config '{
"FileSystemConfig": {
"MountPath": "/home/sagemaker-user",
"DefaultUid": 1000,
"DefaultGid": 100
}
}'
# ドメインの更新(カスタムイメージを含める)
aws sagemaker update-domain \
--domain-id "d-xxxxxxxxxxxx" \
--default-user-settings '{
"JupyterLabAppSettings": {
"CustomImages": [{
"ImageName": "my-sagemaker-image",
"AppImageConfigName": "my-sagemaker-image-config"
}]
}
}'
対応環境
SOCI インデックス作成は、SageMaker Unified Studio と SageMaker AI の両方で、すべての ML 環境(JupyterLab、CodeEditor など)に対応しています。
注意点
パフォーマンスの変動
- 起動時間の短縮率は可変: イメージサイズ、インスタンスタイプ、アプリケーションの依存関係によって 30〜70% の範囲で変動します
- インスタンスの可用性: ML インスタンスの可用性によって、各アプリの起動レイテンシーとその改善度が異なる場合があります
イメージインデックス URI の使用
- SageMaker Studio で SOCI インデックス付きイメージを使用するには、元のコンテナイメージ URI ではなく、イメージインデックス URI を参照する必要があります
- イメージインデックス URI は、SOCI 変換プロセス中に指定したタグに対応します
SOCI インデックスの作成プロセス
- SOCI インデックスの作成には、元のイメージに対して追加の処理ステップが必要です
- CI/CD パイプラインにこのステップを組み込む必要があります
ストレージの考慮事項
- ECR リポジトリには、元のイメージに加えて SOCI インデックスアーティファクトが保存されます
- SOCI インデックスは通常 10〜20MB 程度の小さなサイズです
利用可能なリージョン
- SOCI インデックス作成は、Amazon SageMaker Studio が利用可能なすべての AWS リージョンで使用できます
ビルド時変換とイメージ署名
- SOCI Index Manifest v1 は、イメージ変換ステップを必要としませんが、本番環境では複数の次元でパフォーマンスが変化する可能性があります
- SOCI Index Manifest v2 は、ビルド時変換ステップを使用し、これらの欠点に対処しています
- 元の OCI イメージに対して作成された署名は、SOCI インデックスの追加後も有効なままです
ワークロード固有の最適化
現在の実装では、特定のワークロードに基づいたロード順序の最適化は含まれていません。将来のアップデートで追加される可能性があります。
補完情報の出典
- Amazon SageMaker Studio now supports SOCI indexing for faster container startup times - AWS What's New
- Speed up container startup with SOCI - Amazon SageMaker AI Developer Guide
- Speed up container startup with SOCI - Amazon SageMaker Unified Studio
- Bring your own image (BYOI) - Amazon SageMaker Unified Studio
- Introducing SOCI indexing for Amazon SageMaker Studio: Faster container startup times for AI/ML workloads - AWS Machine Learning Blog
- Create SOCI indexes with nerdctl and SOCI CLI example - Amazon SageMaker AI
- SOCI Snapshotter - GitHub