« AWS Black Belt Online Seminar「クラウドのためのアーキテクチャ設計-ベストプラクティス-」の資料およびQA公開 | メイン | 暗号化されたEBSスナップショットを持つAMIを作成し他のアカウントやリージョンで共有する方法 »

GPU高速化のワークロードをAmazon ECS上で管理する

先日ご紹介したAmazon PersonalizationチームがAmazon ECS上でDSSTNEを使ったレコメンド生成を行っている事例の参照実装として、AWS Computeブログに記事が投稿されましたので翻訳しました。AWS CloudFormationテンプレートが提供されているので、どなたでも今すぐ環境を構築することができますのでぜひお試し下さい。

なお、こちらの内容について10月末に開催されるHadoop Summit Tokyo 2016でもセッションを行いますので、ぜひご参加下さい。


Amazon ECS上のワークロードの多くは、コンテナと明らかに親和性の高い3つのカテゴリに分類されます:

  • PaaS
  • バッチ処理
  • ロングランニングサービス

これらは最も一般的なワークロードではありますが、ECSは他にも多種多様なアプリケーションにも使われています。その中でも新しく興味深いワークロードの1つがGPU高速化のワークロードです。もっと詳細に言えば、多数のノードにまたがる多くのGPUを効率的に活用したいワークロードということになります。

この記事では、どの様にしてECSでGPUワークロードを有効化すればいいのかを見ていきます。例えば、Amazon.comではAmazon PersonalizationチームがECS上の多数のGPUを使って巨大な機械学習の学習ワークロードを効率的に実行しています。

Amazon ECS概要

ECSはAWS上でコンテナを動かすためのスケーラビリティとパフォーマンスの高いサービスです。ECSの状態管理エンジンはお客様自身がオーケストレーションのソフトウェアを動かすという重労働を代わりにやってくれ、また他の多くのAWSサービスとの連携も提供します。例えば、Task毎にIAMロールを割り当てたり、Serviceの負荷に応じてコンテナをAuto Scalingさせたり、アプリケーションの負荷を分散するために新しいApplication Load Balancerを使って、Auto Scalingのアクションが起こった時には自動的に新しいTaskをチェックして登録することもできます。

現在、多くのお客様が多種多様なアプリケーションをAmazon ECS上で動かしていて、その中のいくつかのケースは以下で読むことができます:

ECSとGPUワークロード

Amazon.comにログインすると、あなたが興味あるであろう商品が推薦されているのを見ることができると思います。Amazon PersonalizationチームがAmazonのお客様一人一人向けに商品の推薦を生成しています。そのために、Amazon.comが持っている数億個の商品(また同じくらいのお客様)に関する情報を含む巨大なデータセットを要約する必要があります。

この仕事を現実的な時間内に終わらせるためには、超多数のマシンにまたがって処理を分散する以外に方法はありません。Amazon Personalizationではニューラルネットワークの学習にGPUを利用できる機械学習のソフトウェアを使っていますが、超多数のGPUコアにまたがってこの処理を管理するのは難しい課題です。

この課題解決のために、Amazon PersonalizationではAmazon EC2のGPUインスタンスを使ったClusterの管理にECSを利用しています。チームはP2という、NVIDIA Tesla K80 GPUが載ったインスタンスを使っています。P2インスタンスのClusterは、CPU、メモリ、そしてGPUを統合した1つのリソースプールとして機能しており、その上に機械学習の処理がスケジュールされます。

ECS Cluster上でこの処理を実行するために、DockerイメージはNVIDIA CUDAドライバを使って設定されているので、GPUハードウェアと通信することができますが、それをAmaozn EC2 Container Registry (Amazon ECR)に保存されています。

ECS Task DefinitionではECR上のそのコンテナイメージを指しており、他にもどれくらいのCPUやメモリを各コンテナが使うべきか、もしデータボリュームが必要であればコンテナのどこにマウントすればよいのか、ソースデータがAmazon S3のどこに存在するのか、といった実行時の設定を指定しています。

ECSにTaskの実行を依頼すると、ECSのSchedulerはCluster内で利用可能なリソースを持っているインスタンスを指定することで、そのコンテナ達が実行するのに十分な場所を見つけます。以下のアーキテクチャ図にある通り、ECSはコンテナをEC2のGPUインスタンス(図の中で”GPU slaves”と書かれている部分) にコンテナを配置することができます。

Architecture

ECS上のGPU処理を試してみる

ECS上でGPUを簡単に試せる様に、AWS CloudFromationテンプレートを作成しておいたので面倒な作業をせずに済みます。このデモアーキテクチャは、Amazon Personalizationチームが実際の推薦情報の生成に利用しているオープンソースの機械学習ライブラリであるDSSTNEを中心に構築されています。CloudFormationテンプレートはGitHubレポジトリで見ることができます。

このテンプレートはAuto ScalingグループでEC2のGPUインスタンスを1台起動したECS Clusterを作成します。もしやりたければ、もっと大きいClusterで実行するためにグループの必要なキャパシティを調整することができます。

インスタンスはDSSTNEがGPUハードウェアを操作するのに必要な、NVIDIAドライバ等のソフトウェアが全て設定済となっています。またテンプレートはGCC、HDF5、Open MPIといった開発に必要なツールやライブラリもインストールされているので、起動時にDSSTNEライブラリをコンパイルすることができます。その後DSSTNEライブラリをパッケージしたDockerコンテナをビルドしてECRにアップロードします。そしてECR上のコンテナイメージのURLを使って、それを指定したECS Task Definitionを作成します。

CloudFormationテンプレートからの生成が完了したら、Outputsタブを見ると作成されたリソース群を見ることができます。

まとめ

この記事では、ECSをGPUワークロードでどの様に使えばよいかを解説し、ECSとDSSTNEを簡単に試すことのできるCloudFormationテンプレートを共有しました。

残念ながら、この記事で機械学習の詳細について説明すると長くなってしまうので省略しましたが、AWS Big Data BlogのGenerationg Recommendations at Amazon Scale with Apache Spark and Amazon DSSTNEという記事(訳注: こちらに日本語訳があります)を読むと、DSSTNEがモデル学習や予測生成をどうやってApache Sparkと連携しているかや、機械学習の興味深いコンセプトについて知ることができます。

原文: Orchestrating GPU-Accelerated Workloads on Amazon ECS (翻訳: SA岩永)

コメント

Twitter, Facebook

このブログの最新情報はTwitterFacebookでもお知らせしています。お気軽にフォローください。

2018年4 月

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30