こんにちは、クラウドソリューション事業部の中村です。
Amazon ECS の機能で ECS Managed Instance が公開されました。
ECS Managed Instanceは、Amazon ECSでコンテナを実行するためのEC2インスタンスをAWSがマネージドで管理してくれる機能です。
スケーリングやパッチ適用などの運用管理を気にせず、ECSの柔軟性を保ったままEC2でコンテナを実行できます。
そこで、本記事では新機能である ECS Managed Instance を活用しつつ、1つのインスタンス上で GPU を利用するタスクを複数動かすことが可能か検証を行いました。
参考: Announcing Amazon ECS Managed Instances for containerized applications
シンプルなECSクラスターを作成して検証
まずは、GPU を使用するシンプルなサービスを対象に、従来の手法を用いて ECS クラスターを構築しました。
従来の手法(GPUを利用するタスクを複数動かす)
以下のように構成することで、1つの GPU インスタンス上で複数の GPU タスクを動作させることが可能です。
1ECS on EC2の構成を作成
2タスク定義のリソース割り当て制限でGPUの項目を削除
3起動テンプレートでGPU対応のAMIを選択
4起動テンプレートのユーザーデータで、Dockerのランタイムをnvidiaに設定ECS Managed Instanceを使用
まずマネージドインスタンスのキャパシティプロバイダーを作成します。
これまでと異なり Auto Scaling Group や起動テンプレートを作成する手間がなく、少ない手順で簡単に構築できる点が印象に残りました。
ちなみにですが、インスタンスプロファイル名は ecsInstanceProfile で始まるべきという注意書きがあったりしました。
作成したキャパシティプロバイダーをデフォルトのキャパシティプロバイダー戦略に設定すると、クラスター名の横に マネージドインスタンスと表示されました。
タスク定義の修正
タスク定義も同じように起動タイプを マネージドインスタンス に変更します。
従来の手法と異なり、起動テンプレートでGPU のリソース割り当てを明示的に設定する必要があります。
というのも、GPU の設定を省略した場合、タスク内で nvidia-smi を呼び出すことができませんでした。
GPUの設定の有無でAMI 変わらず同一の ecs-managed-instances-nvidia-x86_64-20250924 を使用しておりましたが、原因が判明していないので、分かり次第記事にしようと思います。
タスク起動してみる
タスク数を 1 に設定すると、EC2 インスタンスが 1 台起動しました。
ドキュメントに記載通り、ECS Managed Instance で起動した EC2 インスタンスには SSH やセッションマネージャーでの接続ができません。
さらに、resource-based policy により、インスタンスの停止や削除も制限されていました。
触る必要のない操作を制限、まさにマネージドという挙動になっているなと感じました。
次に、タスク数を 2 に増やしたところ、EC2 インスタンスが 2 台起動しました。
まとめ
ECS Managed Instance を使って1つのGPUインスタンス上で GPU を利用するタスクを複数動かす構成を検証しましたが、結論としては実現できませんでした。
ECS Managed Instance の機能では、カスタム AMI や起動テンプレートの設定が不要でシンプルに構築が可能ですが、細かいカスタマイズは難しいことが分かりました。
一方で、2025年7月に登場した G6f インスタンスファミリー により、1/8 GPU などの小さな単位で利用可能な GPU インスタンスを選択できるようになっています。これにより、過剰なリソースを抱えることなく、必要なGPUリソースに合わせた構成が取りやすくなりました。
参考: Announcing general availability of Amazon EC2 G6f instances with fractional GPUs
最後に、ランニングコストや利用状況によって最適な構成は異なるため、一概には言えませんが、ECS Managed InstanceとG6f インスタンスファミリーを使って
「1 GPUインスタンス に 1タスク」
というシンプルな構成を基本とするのが良さそうです。
