Amazon Web Services ブログ
Bottlerocket on Amazon ECS の NVIDIA GPU サポートの発表
この記事は Announcing NVIDIA GPU support for Bottlerocket on Amazon ECS を翻訳したものです。
昨年、Amazon Elastic Container Service (Amazon ECS) に最適化された Bottlerocket AMI の一般提供を発表しました。Bottlerocket は、セキュリティとメンテナンス性に焦点を当てたオープンソースプロジェクトであり、コンテナベースのワークロードをホストするための信頼性と、一貫性のある Linux ディストリビューションを提供します。本日、Bottlerocket を使用して ECS NVIDIA GPU アクセラレートされたワークロードを ECS 上で実行できるようになったことを発表します。
この記事では、Bottlerocket で NVIDIA GPU ワークロードを実行するための Amazon ECS タスクを作成する方法について説明します。
なぜ Bottlerocket を使うのですか?
お客様は、ワークロードを実行するためにコンテナを採用し続けています。AWSは、お客様のコンテナ化されたアプリケーションを実行するために設計・最適化された Linux ディストリビューションの必要性を感じていました。Bottlerocket OS は、コンテナを実行するホストにセキュアな基盤を提供し、ホストをスケールするための運用上のオーバーヘッドを最小限に抑えるために構築されました。Bottlerocket は、自動化によって信頼性の高いアップデートを適用できるように設計されています。
Bottlerocket と Amazon ECS の使用開始方法の詳細については、紹介ブログ「Amazon ECS での Bottlerocket の始め方 〜 コンテナ向けのセキュアな Linux ディストリビューション」を御覧ください。
Bottlerocket と NVIDIA GPU で ECS クラスターをセットアップする
セットアップが実際にどのように行われるかを見てみましょう。 us-west-2
(オレゴン) リージョンで作業します。
前提作業
- 適切な認証情報を持つ AWS CLI
- 選択したリージョンのデフォルト VPC (既存の VPC も使用可能です)
まず始めに、ecs-bottlerocket
という名前の ECS クラスターを作成します。
起動するインスタンスには、ECS API と Systems Manager セッションマネージャー API の両方と通信するために、AWS Identity and Access Management (IAM) ロールが必要です。ここでは ecsInstanceRole
という名前の IAM ロールを作成しました。このロールには、管理ポリシーである AmazonSSMManagedInstanceCore と AmazonEC2ContainerServiceforEC2Role の両方がアタッチされています。
NVIDIA GPU の利用をサポートしている Bottlerocket Amazon Machine Image (AMI) のリストは、AWS Systems Manager パラメータストアに公開されています。では、最新リリースの Bottlerocket の AMI ID を取得しましょう (AMI は x86_64
と aarch64
の両方のアーキテクチャで利用できます)。この記事では、x86_64
の AMI を使用します。
次に、パブリック IP アドレスを割り当てるように構成されているサブネット (パブリックサブネット) のリストを取得します。
EC2 インスタンスを ECS クラスターに関連付けるには、インスタンスの作成時にいくつかの情報をインスタンス自体に設定する必要があります。ECS クラスターの詳細を含む小さな設定ファイル (userdata.toml) を、カレントディレクトリ作成しておきます。
現在サポートしている設定はこちらにあります。
上記のサブネットのいずれかに Bottlerocket インスタンスを 1 つデプロイしてみましょう。この記事ではパブリックサブネットを選択していますが、これはデバッグが必要な時にインスタンスに接続するのを簡単にするためです。ユースケースに応じて、プライベートサブネットまたはパブリックサブネットを選択してください。
ここでは、NVIDIA Tesla V100 Tesla Core GPU が 1 つあるインスタンスタイプの p3.2xlarge を使用します。
次に、サンプルアプリケーションのタスク定義を作成しますす。
タスク定義で、resourceRequirements パラメータを使用して 1 つの NVIDIA GPU をタスクに割り当てます。また、コンテナからのログ出力を Amazon CloudWatch に送信するための awslogs-group 設定も定義します。
ロググループの設定は次のとおりです。
- リージョン: us-west-2
- ロググループ名: /ecs/bottlerocket
- ログストリームのプレフィックス: demo-gpu
上記のタスク定義で指定した CloudWatch ロググループを作成します。
タスク定義を ECS に登録します。
タスクを実行します。
タスクが実行されると、コンテナ内でコマンドが実行され、利用可能な GPU 構成に関する情報をログに出力し、終了します。
ECS コンソールに移動すると、停止したタスクが表示されます。左側のメニューで [クラスター] を選択し、ecs-bottlerocket
クラスターを選択して、[タスク] タブを選択します。
タスク ID をクリックし、[ログ] タブを選択します。このタブには、実行したばかりのタスクのログ出力が表示されます。
コンテナから出力されたログは、ロググループ名、ログストリーム名の両方と、タイムフレームを渡すことによってコマンドラインからも表示できます。この記事の場合は次のように指定します。
後片付け
この記事で作成したリソースを削除するには、次のコマンドを実行します。
まとめ
この記事では、Bottlerocket 上のコンテナで GPU を利用したワークロードを迅速かつ安全に実行するために、適切な構成で ECS タスク定義を作成する方法を説明しました。また、CloudWatch でコンテナログがどのように利用できるか、コマンドラインからアクセスする方法も確認しました。Bottlerocket on ECS で実行する GPU アクセラレートされたワークロードのサンプルを追加で探す場合は、AWS Marketplace の NVIDIA NGC カタログから NVIDIA GPU 最適化コンテナを確認できます。
Bottlerocket はオープンソース (MIT または Apache 2.0 ライセンス) であり、使用、修正、拡張するための自由が文書化されていることを意味します。Bottlerocket は GitHub でオープンに開発されており、ディスカッションフォーラムでのコントリビューション、issue、フィードバックを歓迎しています。
翻訳はソリューションアーキテクトの加治が担当しました。原文はこちらです。