DLAMI および DLC で SOCI インデックスを活用し、コンテナの起動時間を短縮
本文の状態
日本語全文を表示中
詳細モードで約14分の本文を読めます。
同じ出来事の情報源
この情報源を基点に整理
AWS Machine Learning Blog
AWS は Deep Learning AMI と AWS Deep Learning Containers に Seekable OCI (SOCI) のサポートを追加しました。これにより、コンテナイメージの効率的な管理が可能となり、コールドスタート時間の削減を実現します。
Source Article
元記事を日本語で読む
本文に関係しない購読案内、埋め込み通知、サイト内プロモーションは除いています。
Deep Learning AMI と AWS Deep Learning Containers は、SOCI スナップショッターおよびインデックスのサポートが有効化されました。Seekable OCI (SOCI) は、ファイルの選択的なダウンロードを通じて効率的なコンテナイメージ管理を可能にする技術です。これはレイヤーベースのインデックスシステムを使用して、コンテナイメージ内のファイル位置をマッピングし、必要なファイルのみを読み込んでコンテナを開始できるようにします(遅延読み込み)。このアプローチはネットワーク帯域幅の使用量を削減し、コンテナの起動時間を短縮するため、クラウド環境で大規模なコンテナイメージを管理する組織にとって特に価値があります。
本記事では、公開されている Deep Learning AMI およびコンテナ上で SOCI をどのように使用するか、ツールが提供する各種 SOCI モードをいつ利用すべきか、そして今日からワークロード内でこのツールを迅速かつ効率的に活用する方法について解説します。
背景
組織が大規模に人工知能(AI)や機械学習(ML)のワークロードを展開する際、コンテナの起動時間が生産環境におけるボトルネックとなっています。トレーニングジョブの立ち上げ、推論エンドポイントの提供、GPU クラスターの自動スケーリングなど、どのようなケースでも、数ギガバイト規模のコンテナイメージを直接ダウンロードする時間がかかることが、コスト、ユーザー体験、運用効率に直接的な影響を与えます。従来のコンテナデプロイ手法では、ワークロードを開始する前に完全なイメージをダウンロードする必要があり、このプロセスには生産環境で一般的に使用されるイメージの起動に数分を要することがあります。開発段階では数分の待ち時間はほとんど気になりませんが、生産環境ではこれらの数分がすぐに蓄積してしまいます。
大規模にディープラーニングインフラストラクチャを展開する組織は、通常、いくつかの重要な課題に直面します:
- コールドスタート時間の長期化。標準的な Docker イメージのプルは 15〜20 GB で、インスタンスあたり 4〜6 分を要し、スケーリングイベント時にトレーニングジョブや推論エンドポイントの開始が遅れます。
- 計算リソースの浪費。GPU インスタンスがイメージプルの間アイドル状態となり、コンテナ初期化完了を待つ間に高価な計算時間を無駄に消費します。
- スケーリングのボトルネック。需要急増による自動スケーリングトリガー時に、コンテナ起動時間の遅さが迅速な対応を妨げ、パフォーマンス低下やリクエストのドロップを引き起こします。
- バンド幅制約。大規模デプロイメントで大量のイメージが同時にプルされるとネットワーク帯域幅が飽和し、インフラ全体に連鎖的な遅延が生じます。
- 開発者の生産性。データサイエンティストや ML エンジニアは、反復的な開発・実験サイクル中にコンテナ起動を待つことで貴重な時間を浪費します。
コンテナプルメカニズム
ワークロード用にコンテナをプルする際、AWS Deep Learning AMIs (DLAMI) と Deep Learning Containers では 3 つのオプションが用意されています:標準 Docker プル、SOCI パラレルプル、および SOCI インデックスによる SOCI ラジーローディングです。これらはトレードオフのスライダーと捉えることができます。Docker プルは順次処理で低速です。SOCI パラレルプルは計算リソースを消費する代わりにダウンロードをチャンク化することで起動時間を短縮します。一方、SOCI ラジーローディングはほぼ即時のコンテナ読み込みを提供しますが、ファイルはオンデマンドで取得する必要があります。ワークロードに最適なメカニズムを選択するには、以下のガイドをご利用ください:
- ラジーローディングと並列プルモードの選択は、イメージ、インスタンス仕様、ストレージ構成によって異なります。ラジーローディングには SOCI インデックス(SOCI index)を備えたイメージが必要です。これがない場合、システムは標準的なプル処理にフォールバックします。
- 低仕様のインスタンスではリソースを節約するためにラジーローディングを使用し、複数の vCPU と高いネットワーク帯域幅を持つ高仕様のインスタンスでは並列プルモードの恩恵を受けます。ストレージパフォーマンスにはばらつきがあり、EBS ボリュームはプロビジョニングされた IOPS(I/O 秒間操作数)とボリュームタイプに制限されるため、展開時にボトルネックとなる可能性があります。一方、NVMe インスタンスストアはデータ永続性をインスタンスの停止/再起動サイクル間で維持できないという代償を払うことで、最大限の入出力パフォーマンスを提供します。
以下の例では、vLLM Deep Learning Container(深層学習コンテナ)に基づいた各種メカニズムを示しています。

ソリューションアーキテクチャ
以下の図は、DLAMI と Deep Learning Containers で SOCI を使用するためのアーキテクチャを示しています。

SOCI スナップショッターを使用したコンテナ起動時間の比較
以下のベンチマークでは、ラジーローディングモードと並列プルモードの両方における標準的な Docker プルと SOCI スナップショッター(SOCI snapshotter)を比較しています。
レイジーローディングモード
レイジーローディングモードでは、必要なデータのみをオンデマンドでフェッチしてコンテナを即座に起動し、残りの層は必要に応じてバックグラウンドで読み込まれます。
前提条件
SOCI インデックスが必要
重要: レイジーローディングモードを使用するには、コンテナイメージがレジストリに保存されたSOCI インデックスを持っている必要があります。SOCI インデックスがない場合、スナップショットターは標準的なプル動作にフォールバックし、パフォーマンスの向上は確認できません。AWS Deep Learning Containers (DLCs) の-soci サフィックス付きタグには、事前に作成されレジストリへプッシュされた SOCI インデックスが含まれており、すぐにレイジーローディングを利用できます。カスタムイメージの場合、SOCI インデックスの作成とプッシュ が必要です。
環境
- インスタンスタイプ: g5.2xlarge
- EBS: サイズ 500GiB、IOPS 3000、スループット 125
- AMI: Deep Learning Base OSS Nvidia Driver GPU AMI (Ubuntu 24.04) 20260413 (ami-06abbbf2049359343)
- Docker イメージ: public.ecr.aws/deep-learning-containers/vllm:0.19.0-gpu-py312-ec2-soci
- イメージサイズ: 9.72GB (圧縮済み)、32.7GB (ディスク使用量)
- ネットワーク: Corp
Docker を使用してコンテナを起動(非 SOCI)
Docker を使用して推論サーバーを直接起動します。ローカルにイメージが存在しないため、Docker はコンテナを起動する前にイメージ全体をプルして展開します。
合計時間:6 分 59.099 秒。
#!/bin/bash
time docker run \
--gpus all \
-d \
-v ~/.cache/huggingface:/root/.cache/huggingface \
--env "HUGGING_FACE_HUB_TOKEN=$HUGGING_FACE_HUB_TOKEN" \
-p 8000:8000 \
--ipc=host \
public.ecr.aws/deep-learning-containers/vllm:0.19.0-gpu-py312-ec2-soci \
--model mistralai/Mistral-7B-v0.1
output
Unable to find image 'public.ecr.aws/deep-learning-containers/vllm:0.19.0-gpu-py312-ec2-soci' locally
0.19.0-gpu-py312-ec2-soci: Pulling from deep-learning-containers/vllm
340d44d2921c: Pull complete
....2001a2421bf1: Pull complete
Digest: sha256:a6344c96a33ef98a32a27f89b41b8c0529d4fbbba248eb57f811725d415f68fc
Status: Downloaded newer image for public.ecr.aws/deep-learning-containers/vllm:0.19.0-gpu-py312-ec2-soci
e12d969eb71517d9a6a23b9b11cfa22ddda26a95f6a0f0d8df00cd5c4fdfe912
real 6m59.099s
user 0m0.391s
sys 0m0.452s
SOCI スナップショッター(遅延読み込み)を使用してコンテナを開始する
推論コンテナの起動には、SOCI スナップショッター付きの nerdctl を使用します。ローカルにイメージが存在しない場合でも、SOCI インデックス付きのイメージであれば、nerdctl はインデックスと必要なレイヤーのみをプルしてコンテナを起動できるため、残りのレイヤーは遅延読み込みされます。合計時間:21.125 秒。
#!/bin/bash
time sudo nerdctl run \
--snapshotter soci \
--gpus all \
-d \
-v ~/.cache/huggingface:/root/.cache/huggingface \
--env "HUGGING_FACE_HUB_TOKEN=$HUGGING_FACE_HUB_TOKEN" \
-p 8000:8000 \
--ipc=host \
public.ecr.aws/deep-learning-containers/vllm:0.19.0-gpu-py312-ec2-soci \
--model mistralai/Mistral-7B-v0.1
output
public.ecr.aws/deep-learning-containers/vllm:0.19.0-gpu-py312-ec2-soci: resolved |++++++++++++++++++++++++++++++++++++++|
index-sha256:a6344c96a33ef98a32a27f89b41b8c0529d4fbbba248eb57f811725d415f68fc: done |++++++++++++++++++++++++++++++++++++++|
manifest-sha256:d91ad3b46204eace6de2fb27c46d9600337fa9c124b4c82fe0f335d391017daa: done |++++++++++++++++++++++++++++++++++++++|
config-sha256:886ed36d57c44081a74a0ab052f57366d96ab2c0fe39bb3e2f8a46cc20db8ec2: done |++++++++++++++++++++++++++++++++++++++|
elapsed: 10.5s total: 48.1 K (4.6 KiB/s)
189307b7899438415f3df4288b3fbb26bcc4cd43678e88ec3b062bc6330e3e3b
real 0m21.125s
user 0m0.004s
sys 0m0.011s
レイジーローディングの概要
SOCI スナップショッター(snapshotter)をレイジーローディング(lazy loading)で利用することで、コンテナの起動に要する時間は21.125 秒となりました。これは、標準的な Docker を使用した場合の6 分 59.099 秒と比較して劇的な改善です。この向上は、SOCI がコンテナを起動するために必要なレイヤーのみを取得し、残りのレイヤーは必要に応じてオンデマンドで読み込むようにすることで実現されています。
Parallel pull mode
遅延読み込みモードでは必要なデータのみオンデマンドで取得してコンテナを即座に起動するのに対し、並列プルモード (parallel pull mode) は起動前にイメージ全体をダウンロードしますが、標準的な Docker プルよりも高い並行度で行います。このモードは、起動時に完全なイメージが必要である場合や、I/O 集約型のワークロードを実行する場合に最適です。
Environment
- インスタンスタイプ:g5.4xlarge
- EBS: 500GiB gp3, 16000 IOPS, スループット 1000 MB/s
- AMI: Deep Learning Base OSS Nvidia Driver GPU AMI (Ubuntu 24.04) 20260413 (ami-06abbbf2049359343)
- Docker イメージ:763104351884.dkr.ecr.us-east-1.amazonaws.com/sglang:0.5.10-gpu-py312-cu129-ubuntu24.04-sagemaker
- イメージサイズ:19.32GB(圧縮済み)、60.4GB(ディスク使用量)
- ネットワーク:Corp
注記: このベンチマークではプライベート ECR (Elastic Container Registry) イメージを使用しています。パブリック ECR は Amazon CloudFront を介して提供されるため、ネットワーク帯域幅が制限され、並列モードのパフォーマンスに影響を与える可能性があるからです。プライベート ECR は Amazon Simple Storage Service (Amazon S3) から直接提供されるため、より高いスループットを実現できます。
Enabling parallel pull mode
Deep Learning AMI 上の SOCI スナップショットター (SOCI snapshotter) はデフォルトで遅延読み込みモードになっています。並列プルモードを有効にするには、/etc/soci-snapshotter-grpc/config.toml の設定ファイルを変更してください。
パラレルプルモード - 大規模な AI/ML イメージのイメージプル時間を大幅に改善
これらは AWS が ECR に対して推奨する保守的なデフォルト設定です
[pull_modes.parallel_pull_unpack]
enable = true # false(デフォルト): 遅延読み込み / true: パラレルモード
max_concurrent_downloads = -1 # すべてのイメージ全体でのグローバル上限なし(無制限)
max_concurrent_downloads_per_image = 20 # イメージごとのダウンロード接続数
concurrent_download_chunk_size = "16mb"
max_concurrent_unpacks = -1 # すべてのイメージ全体でのグローバル上限なし(無制限)
max_concurrent_unpacks_per_image = 10 # イメージごとの並列展開スレッド数
discard_unpacked_layers = true
設定を適用するには、サービスを再起動してください:
sudo systemctl restart soci-snapshotter.service
ヒント: インスタンスタイプやネットワーク帯域幅に基づいて、max_concurrent_downloads_per_image および max_concurrent_unpacks_per_image を調整できます。詳細なチューニングガイドについては、Amazon EKS 向けの Seekable OCI パラレルプルモードの紹介 をご覧ください。
パラレルモードが有効になっていることの確認
イメージプル中に SOCI スナップショットター (SOCI snapshotter) のログを監視して、パラレルモードが有効化されていることを確認してください:
journalctl -u soci-snapshotter -f
パラレルプル/展開を示すログエントリを探してください:
Apr 16 23:59:08 ip-172-31-86-91 soci-snapshotter-grpc[3108]:
{"layerDigest":"sha256:e87500e698966458d9dfc34df84602985c9821f39666619792fe6282aa6df5d4",
"level":"info",
"msg":"preparing snapshot with parallel pull/unpack",
"time":"2026-04-16T23:59:08.654819383Z"}
Docker を使用してイメージをプルする(非 SOCI)
標準的な Docker のプル操作では、限られた並行度でレイヤーのダウンロードと展開が行われます。
合計時間:4 分 44.163 秒
time docker pull \
763104351884.dkr.ecr.us-east-1.amazonaws.com/sglang:0.5.10-gpu-py312-cu129-ubuntu24.04-sagemaker
Digest: sha256:fd0cf60bbb34a5d30f22595215a633e5d4a7260fc0868aabe3f04b1174b7365d
Status: Downloaded newer image for
763104351884.dkr.ecr.us-east-1.amazonaws.com/sglang:0.5.10-gpu-py312-cu129-ubuntu24.04-sagemaker
763104351884.dkr.ecr.us-east-1.amazonaws.com/sglang:0.5.10-gpu-py312-cu129-ubuntu24.04-sagemaker
real 4m44.163s
user 0m0.339s
sys 0m0.423s
SOCI の並列モードを使用してイメージをプルする
nerdctl を使用して SOCI の並列プルモードを実行すると、ダウンロードと展開の両操作で並行度が高まります。
合計時間:2 分 12.846 秒
time sudo nerdctl pull --snapshotter soci \
763104351884.dkr.ecr.us-east-1.amazonaws.com/sglang:0.5.10-gpu-py312-cu129-ubuntu24.04-sagemaker
763104351884.dkr.ecr.us-east-1.amazonaws.com/sglang:0.5.10-gpu-py312-cu129-ubuntu24.04-sagemaker:
resolved |++++++++++++++++++++++++++++++++++++++|
manifest-sha256:fd0cf60bbb34a5d30f22595215a633e5d4a7260fc0868aabe3f04b1174b7365d:
done |++++++++++++++++++++++++++++++++++++++|
config-sha256:5e6a53b7478b0631dd3c4222ab6619dae3a3dd32a565921f10b0b03fdc316d46:
done |++++++++++++++++++++++++++++++++++++++|
elapsed: 132.8s total: 89.3 K (688.0 B/s)
real 2m12.846s
user 0m0.018s
sys 0m0.075s
Parallel pull summary
SOCI の並列プルモード(parallel pull mode)を使用することで、イメージのプル時間が4 分 44 秒から 2 分 12 秒に短縮され、プルパフォーマンスが2.2 倍向上しました。
まとめ
SOCI スナップショッター(snapshotter)は、コンテナの起動およびイメージのプル操作の両方において改善をもたらします:
- レーザーローディングモード(lazy loading mode)— コンテナの起動時間を 20 倍短縮(6 分以上から約 21 秒へ)
- 並列プルモード(parallel pull mode)— イメージのプル時間を 2.2 倍短縮(4 分 44 秒から 2 分 12 秒へ)
コンテナ起動を最速で行う必要がある場合はレーザーローディングモードを選択し、ワークロード開始前にフルイメージの利用が必要な場合は並列プルモードを選択してください。
クリーンアップ
SOCI スナップショッターをテストするために EC2 インスタンスを起動した場合は、継続的な課金を避けるためにそれらを終了してください。テスト中に Amazon Elastic Container Registry (Amazon ECR) にプッシュしたコンテナイメージはすべて削除し、不要になった SOCI インデックスも削除してください。
SOCI の始め方
SOCI スナップショッターと SOCI インデックスを備えた DLAMI および Deep Learning コンテナは、本日一般公開されています。一般公開されている DLAMI や Deep Learning コンテナの詳細については、SOCI Index DLAMI を確認して SOCI 対応のイメージを選択し、Deep Learning Container リポジトリ で SOCI インデックスに対応したイメージに関する詳細情報を取得してください。
詳細な設定ガイドラインとベストプラクティスについては、SOCI ドキュメント および Deep Learning Container SOCI ドキュメント を参照してください。
著者について

Ohad Katz
Ohad Katz は、AWS Deep Learning AMI (DLAMI) チームの元システム開発エンジニアです。

Yadan Wei
Yadan Wei は、AWS Deep Learning Containers (DLC) チームのソフトウェア開発エンジニアです。SageMaker、EC2、ECS、EKS を含む AWS サービス上で顧客が深層学習モデルのトレーニングとデプロイを可能にする、本番環境対応の Docker コンテナイメージの構築と保守を担当しています。

Nick Song
Nick Song は AWS のソフトウェア開発エンジニアで、顧客向けに最適化された深層学習インフラを提供するため、Deep Learning AMI (AWS Deep Learning Machine Image) の開発に取り組んでいます。
関連記事
今日のまとめ
AIデイリーブリーフで今日の重要ニュースをまとめ読み