DLAMI および DLC で SOCI インデックスを活用し、コンテナの起動時間を短縮
AWS は Deep Learning AMI およびコンテナに SOCI スナップショッターのサポートを導入し、大規模な AI/ML ワークロードにおけるコールドスタート時間の短縮とリソース効率の向上を実現した。
キーポイント
SOCI テクノロジーの導入
AWS は Deep Learning AMI と Deep Learning Containers に、Seekable OCI (SOCI) スナップショッターおよびインデックス機能を有効化し、必要なファイルのみを遅延ロードする仕組みを提供した。
コールドスタートのボトルネック解消
従来の Docker イメージプルでは 15-20GB の画像取得に 4-6 分かかる場合があったが、SOCI により必要なファイルのみをロードすることで起動時間を劇的に短縮し、GPU クラスターの自動スケーリングを迅速化する。
コストとリソースの最適化
画像ダウンロード中に GPU インスタンスがアイドル状態になる無駄な計算リソースの消費を防ぎ、ネットワーク帯域幅の飽和も回避することで、大規模展開時の運用効率と開発者の生産性を向上させる。
SOCIスナップターによる遅延読み込み
nerdctlとSOCIスナップターを使用することで、コンテナ起動時に必要なレイヤーのみをプルし、残りの層は必要に応じて遅延ロードする仕組みが実現されます。
コールドスタート時間の劇的な短縮
従来の約7分(6m59s)からSOCI利用時は約21秒に短縮され、画像ローカルに存在しない場合でも高速な起動が可能になります。
Parallel Pull Mode の特徴と用途
SOCI の並列プルモードは、起動前に画像全体をダウンロードしますが、標準 Docker より高い並列度で処理するため、I/O集約型ワークロードや起動時に完全な画像が必要な場合に最適です。
設定ファイルによるモード切り替え
デフォルトは遅延読み込みですが、/etc/soci-snapshotter-grpc/config.toml で max_concurrent_downloads などのパラメータを調整し、service を再起動することで並列プルモードに有効化できます。
重要な引用
SOCI snapshotter is a technology that enables efficient container image management through selective file downloading.
Standard Docker image pulls of 15–20 GB can take 4–6 minutes per instance, delaying training jobs and inference endpoints during scaling events.
GPU instances sit idle during image pulls, burning through expensive compute hours while waiting for container initialization to finish.
Although no image exists locally, the SOCI-indexed image allows nerdctl to pull only the index and necessary layers to start the container, enabling lazy loading of remaining layers.
Total time: 21.125s.
This mode is ideal when you need the full image available at startup or when running I/O-intensive workloads.
影響分析・編集コメントを表示
影響分析
この発表は、大規模な AI/ML ワークロードを運用する組織にとって、インフラコストの削減と開発サイクルの加速に直結する重要な技術的進展です。特に、GPU クラスターのスケーリング時の遅延や帯域幅制約といった実務上の課題を解決する具体的な手段を提供しており、クラウドネイティブな AI 開発環境の標準的なベストプラクティスとして定着する可能性が高いです。
編集コメント
AI/ML エンジニアにとって、開発環境から本番環境までの一貫したパフォーマンス向上をもたらす実用的なアップデートです。特に大規模モデルのトレーニングや推論サービス展開において、待ち時間の削減は直接的なコストメリットとなるため、即座に導入を検討すべき内容と言えます。
Deep Learning AMI と AWS Deep Learning Containers は、SOCI スナップショッターおよびインデックスのサポートが有効化されました。Seekable OCI (SOCI) は、ファイルの選択的なダウンロードを通じて効率的なコンテナイメージ管理を可能にする技術です。これはレイヤーベースのインデックスシステムを使用して、コンテナイメージ内のファイル位置をマッピングし、必要なファイルのみを読み込んでコンテナを開始できるようにします(遅延読み込み)。このアプローチはネットワーク帯域幅の使用量を削減し、コンテナの起動時間を短縮するため、クラウド環境で大規模なコンテナイメージを管理する組織にとって特に価値があります。
本記事では、公開されている Deep Learning AMI およびコンテナ上で SOCI をどのように使用するか、ツールが提供する各種 SOCI モードをいつ利用すべきか、そして今日からワークロード内でこのツールを迅速かつ効率的に活用する方法について解説します。
Background
組織が大規模に人工知能(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(深層学習コンテナ)に基づいた各種メカニズムを示しています。

*Deep Learning Container Pull Mechanisms(深層学習コンテナプルメカニズム)*
ソリューションアーキテクチャ
以下の図は、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 倍向上しました。
Conclusion
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) の開発に取り組んでいます。
原文を表示
Deep Learning AMI and AWS Deep Learning Containers are now enabled with support for SOCI snapshotter and index. Seekable OCI (SOCI) is a technology that enables efficient container image management through selective file downloading. It uses a layer-based indexing system to map file locations within container images, allowing containers to start with only the necessary files loaded (lazy loading). This approach reduces network bandwidth usage and improves container startup times, making it particularly valuable for organizations managing large container images in cloud environments.
In this post, we look at how to use SOCI on publicly available Deep Learning AMIs and Containers, when to use the various SOCI modes provided by the tool, and how to quickly and efficiently use this tool in your workloads today.
Background
As organizations deploy artificial intelligence (AI) and machine learning (ML) workloads at scale, container startup time has become a bottleneck in production environments. Whether it’s spinning up training jobs, serving inference endpoints, or scaling GPU clusters automatically, the time spent downloading multi-gigabyte container images directly impacts cost, user experience, and operational efficiency. Traditional container deployment approaches force teams to download entire images before workloads can begin. This process can take multiple minutes to start up images commonly used in production. During development, a few minutes of wait time is barely noticeable. In production, those same minutes add up fast.
Organizations deploying deep learning infrastructure at scale typically encounter several critical challenges:
- Prolonged cold start times. Standard Docker image pulls of 15–20 GB can take 4–6 minutes per instance, delaying training jobs and inference endpoints during scaling events.
- Wasted compute resources. GPU instances sit idle during image pulls, burning through expensive compute hours while waiting for container initialization to finish.
- Scaling bottlenecks. When demand spikes trigger automatic scaling, slow container startup times prevent rapid response, leading to degraded performance or dropped requests.
- Bandwidth constraints. Large-scale deployments pulling massive images simultaneously can saturate network bandwidth, creating cascading delays across the infrastructure.
- Developer productivity. Data scientists and ML engineers waste valuable time waiting for containers to start during iterative development and experimentation cycles.
Container pulling mechanisms
When pulling a container for your workloads, AWS Deep Learning AMIs (DLAMI) and Deep Learning Containers offer three options: the standard Docker pull, SOCI parallel pull, and SOCI lazy loading through SOCI index. Think of these as a sliding scale of tradeoffs. Docker pulls are sequential and slow. SOCI parallel pull provides faster startup times by chunking downloads at the cost of compute resources. SOCI lazy loading provides near-instant container loading but requires files to be fetched on demand. You can use the following guide to choose the right mechanism for your workloads:
- The choice between lazy loading and parallel pull modes depends on the image, instance specifications, and storage configuration. Lazy loading requires images to have a SOCI index. Without one, the system falls back to standard pulling.
- Lower-spec instances should use lazy loading to conserve resources, while high-spec instances with multiple vCPUs and high network bandwidth benefit from parallel pull mode. Storage performance varies: EBS volumes are bounded by their provisioned IOPS and volume type, potentially creating bottlenecks during unpacking, while NVMe instance store delivers maximum I/O performance at the cost of data persistence across instance stop/start cycles.
The following example shows the various mechanisms based on the vLLM Deep Learning Container:

*Deep Learning Container Pull Mechanisms*
Solution architecture
The following diagram shows the architecture for using SOCI with DLAMI and Deep Learning Containers.

Container startup time comparison with SOCI snapshotter
The following benchmarks compare standard Docker pulls against SOCI snapshotter in both lazy loading and parallel pull modes.
Lazy loading mode
Lazy loading mode starts containers immediately by fetching only the necessary data on demand, with remaining layers loaded in the background as needed.
Prerequisites
SOCI index required
Important: Lazy loading mode requires the container image to have a SOCI index stored in the registry. Without a SOCI index, the snapshotter will fall back to standard pull behavior, and you won’t see any performance improvement. AWS Deep Learning Containers (DLCs) with the -soci tag suffix come with SOCI indexes pre-created and pushed to the registry, enabling lazy loading out of the box. For custom images, you must create and push SOCI indexes
Environment
- Instance Type: g5.2xlarge
- EBS: Size 500GiB, IOPS 3000, Throughput 125
- AMI: Deep Learning Base OSS Nvidia Driver GPU AMI (Ubuntu 24.04) 20260413 (ami-06abbbf2049359343)
- Docker Image: public.ecr.aws/deep-learning-containers/vllm:0.19.0-gpu-py312-ec2-soci
- Image Size: 9.72GB (compressed), 32.7GB (disk usage)
- Network: Corp
Start container with Docker (non-SOCI)
We use Docker to start the inference server directly. Since no image exists locally, Docker pulls and extracts the entire image before starting the container.
Total time: 6m59.099s.
#!/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.452sStart container with SOCI snapshotter (lazy loading)
We use nerdctl with SOCI snapshotter to start the inference container. Although no image exists locally, the SOCI-indexed image allows nerdctl to pull only the index and necessary layers to start the container, enabling lazy loading of remaining layers. Total time: 21.125s.
#!/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.011sLazy loading summary
Using SOCI snapshotter with lazy loading, the container started in 21.125 seconds, compared to 6 minutes 59.099 seconds with standard Docker. This improvement is achieved because SOCI pulls only the necessary layers to start the container, with remaining layers loaded on demand as needed.
Parallel pull mode
While lazy loading mode starts containers immediately by fetching only the required data on-demand, parallel pull mode downloads the entire image before startup but does so with higher concurrency than standard Docker pulls. This mode is ideal when you need the full image available at startup or when running I/O-intensive workloads.
Environment
- Instance Type: g5.4xlarge
- EBS: 500GiB gp3, 16000 IOPS, 1000 MB/s Throughput
- AMI: Deep Learning Base OSS Nvidia Driver GPU AMI (Ubuntu 24.04) 20260413 (ami-06abbbf2049359343)
- Docker Image: 763104351884.dkr.ecr.us-east-1.amazonaws.com/sglang:0.5.10-gpu-py312-cu129-ubuntu24.04-sagemaker
- Image Size: 19.32GB (compressed), 60.4GB (Disk Usage)
- Network: Corp
Note: We use a private ECR image for this benchmark because public ECR is fronted by Amazon CloudFront, which limits network bandwidth and affects parallel mode performance. Private ECR is served directly from Amazon Simple Storage Service (Amazon S3), providing higher throughput.
Enabling parallel pull mode
The SOCI snapshotter on Deep Learning AMI defaults to lazy loading mode. To enable parallel pull mode, modify the configuration file at /etc/soci-snapshotter-grpc/config.toml:
# Parallel Pull Mode - significantly improves image pull times for large AI/ML images
# These are conservative defaults recommended by AWS for ECR
[pull_modes.parallel_pull_unpack]
enable = true # false(default): lazy loading/true: parallel mode
max_concurrent_downloads = -1 # unlimited global cap across all images
max_concurrent_downloads_per_image = 20 # per-image download connections
concurrent_download_chunk_size = "16mb"
max_concurrent_unpacks = -1 # unlimited global cap across all images
max_concurrent_unpacks_per_image = 10 # per-image parallel unpack threads
discard_unpacked_layers = trueApply the configuration by restarting the service:
sudo systemctl restart soci-snapshotter.serviceTip: You can tune max_concurrent_downloads_per_image and max_concurrent_unpacks_per_image based on your instance type and network bandwidth. For detailed tuning guidance, see Introducing Seekable OCI Parallel Pull Mode for Amazon EKS.
Verifying parallel mode is active
Monitor the SOCI snapshotter logs during image pull to confirm parallel mode is enabled:
journalctl -u soci-snapshotter -fLook for log entries indicating parallel pull/unpack:
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"}Pull image with Docker (non-SOCI)
Standard Docker pull downloads and extracts layers with limited concurrency.
Total time: 4m 44.163s
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.423sPull image with SOCI parallel mode
Using nerdctl with SOCI parallel pull mode uses increased concurrency for both downloads and unpacking operations.
Total time: 2m 12.846s
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.075sParallel pull summary
Using SOCI parallel pull mode reduced image pull time from 4 minutes 44 seconds to 2 minutes 12 seconds, representing a 2.2x improvement in pull performance.
Conclusion
SOCI snapshotter provides improvements for both container startup and image pull operations:
- Lazy loading mode — Achieved a 20x improvement in container startup time (from 6+ minutes to ~21 seconds)
- Parallel pull mode — Achieved a 2.2x improvement in image pull time (from 4 minutes 44 seconds to 2 minutes 12 seconds)
Choose lazy loading mode when you need the fastest possible container startup, or parallel pull mode when you need the full image available before your workload begins.
Clean up
If you launched EC2 instances to test SOCI snapshotter, terminate them to avoid incurring ongoing charges. Delete any container images you pushed to Amazon Elastic Container Registry (Amazon ECR) during testing, and remove any SOCI indexes you no longer need.
Getting started with SOCI
DLAMI and Deep Learning Containers are publicly available today with SOCI snapshotter and SOCI index. For more information on publicly available DLAMI and Deep Learning Containers, you can check out SOCI Index DLAMI to select the images that support SOCI, and check out the Deep Learning Container repository to get more information on supported images with SOCI index.
For detailed configuration guidance and best practices, refer to the SOCI documentation and the Deep Learning Container SOCI documentation.
About the authors

Ohad Katz
Ohad Katz is a former System Development Engineer on the AWS Deep Learning AMI (DLAMI) team.

Yadan Wei
Yadan Wei is a Software Development Engineer on the AWS Deep Learning Containers (DLC) team, building and maintaining production-ready Docker container images that enable customers to train and deploy deep learning models on AWS services including SageMaker, EC2, ECS, and EKS.

Nick Song
Nick Song is a Software Development Engineer at AWS, working on Deep Learning AMIs to deliver optimized deep learning infrastructure for customers.
関連記事
今日のまとめ
AI日報で今日の重要ニュースをまとめ読み