Amazon ECSタスクでのGPUの使用
ECSでGPUを使う機会があったので、やり方をメモする。 2022.09.22時点ではFargateがGPUに未対応だったため、ECSをEC2(GPU)上に展開する方針をとった。 (このIssueを見ると、まもなくFargateがGPUに対応しそう。)
ポイントは
- ECSに最適化されたAMIを使うこと
- クラスタ作成時に「EC2 Linux + ネットワーキング」を選択して、EC2を自動で立ち上げてもらうこと
なお、本作業にあたってこちらのブログを大変参考にさせていただいた。以下の内容の大部分がこの記事と同じものになってしまったが、EC2をECSへ紐づける方法が異なる。
タスクの定義
ECS管理画面のタスク定義に行き、新しい定義の作成
をクリックする。
起動タイプの互換性の選択
ではEC2を選択- 各項目を次のように入力する。
項目 | 値 |
---|---|
タスク定義名 | ecs-gpu-test-task-def |
ネットワークモード | awsvpc |
タスク実行ロール | なし |
タスクメモリ (MiB) | 512 |
タスク CPU (単位) | 512 |
コンテナの追加
グループ | 項目 | 値 |
---|---|---|
スタンダード | コンテナ名 | ecs-gpu-test-container |
イメージ | nvidia/cuda:9.0-base | |
プライベートレジストリの認証 | チェックなし | |
メモリ制限 (MiB) | ソフト制限 512 | |
ポートマッピング | 入力なし | |
環境 | CPU ユニット数 | 512 |
GPU | 1 | |
基本 | チェックあり | |
エントリポイント | 入力なし | |
コマンド | sh,-c,nvidia-smi | |
作業ディレクトリ | 入力なし | |
環境ファイル | 入力なし | |
ストレージとログ | ログ設定 | チェックあり |
ECSクラスターの作成
ECS管理画面のクラスターに行き、クラスターの作成
をクリックする。
- クラスターテンプレートの選択で
EC2 Linux + ネットワーキング
を選択する
グループ | 項目 | 値 |
---|---|---|
クラスターの設定 | クラスター名 | ecs-gpu-test-cluster |
インスタンスの設定 | プロビジョニングモデル | オンデマンドインスタンス |
EC2 インスタンスタイプ | g4dn.xlarge | |
インスタンス数 | 1 | |
EC2 AMI ID | デフォルトでセットされたものを使用 | |
データ EBS ボリュームサイズ (GiB) | 22 | |
キーペア | 作成を推奨 | |
ネットワーキング | VPC | 新しいVPCの作成 |
CIDRブロック | 10.0.0.0/16 | |
サブネット1 | 10.0.0.0/24 | |
サブネット2 | 10.0.1.0/24 | |
セキュリティグループのインバウンドルール | 0.0.0.0/0, 80 | |
コンテナインスタンスの IAM ロール | 新しいロールを作成 |
クラスターを作成すると、ECSを展開するためのEC2が起動する。起動したEC2はEC2管理画面から確認できる。
またある程度時間が経過すると、クラスターにEC2が紐付き、ECSインスタンスとして以下のように表示される。
ECSタスクの実行
各項目を以下のように入力する。
項目 | 値 |
---|---|
起動タイプ | EC2 |
タスク定義 | ecs-gpu-test-task-def |
クラスター | ecs-gpu-test-cluster |
タスクの数 | 1 |
クラスターVPC | 10.0.0.0/16 |
サブネット | どちらか選択できるほう(GPUの場合、タスクの起動に失敗するAZがあるので注意) |
セキュリティグループ | そのまま |
パブリック IP の自動割り当て | DISABLED |
配置テンプレート | AZバランススプレッド |
タスクの実行
をクリックし、タスクを起動する。今回はシェルコマンドを実行するのみのタスクなので、即座にタスクが停止する。ステータスがSTOPPEDになったタスクから、今回実行したタスクをクリックするとコンテナ欄で以下のように表示されているはず。
CloudWatchのログを表示
をクリックすると、タスク実行時のログが表示される。以下のようにログが表示されていれば、タスクの実行およびNvidiaドライバーによるGPUの認識に成功している。
まとめ
- ECSをGPUで展開するには2022/10月時点ではECS on EC2しか手が無い。
- ECSクラスター作成時に
EC2 Linux + ネットワーキング
を選択することで、簡単にEC2をECSに紐づけることができた。 - 今回は簡単のためにVPCをクラスター作成時に自動作成してもらう方法をとったが、実運用時にはPrivateなセグメントを用意して、そこにECSサービスを配置するように注意されたい。