deep learning ami - 開発者ガイド ·...

139
Deep Learning AMI 開発者ガイド

Upload: others

Post on 20-May-2020

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI開発者ガイド

Page 2: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイド

Deep Learning AMI: 開発者ガイドCopyright © 2020 Amazon Web Services, Inc. and/or its affiliates. All rights reserved.

Amazon's trademarks and trade dress may not be used in connection with any product or service that is not Amazon's,in any manner that is likely to cause confusion among customers, or in any manner that disparages or discreditsAmazon. All other trademarks not owned by Amazon are the property of their respective owners, who may or may notbe affiliated with, connected to, or sponsored by Amazon.

Page 3: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイド

Table of ContentsAWS Deep Learning AMI とは ............................................................................................................. 1

本ガイドについて ....................................................................................................................... 1前提条件 .................................................................................................................................... 1使用例 ....................................................................................................................................... 1機能 .......................................................................................................................................... 2

あらかじめインストールされたフレームワーク ....................................................................... 2事前インストールされた GPU ソフトウェア ........................................................................... 3Elastic Inference のサポート ................................................................................................ 3モデル処理および可視化 ...................................................................................................... 3

開始方法 ............................................................................................................................................ 4DLAMI の開始方法 ...................................................................................................................... 4DLAMI 選択 ............................................................................................................................... 4

Conda ............................................................................................................................... 5基本 .................................................................................................................................. 6CUDA ............................................................................................................................... 7OS ................................................................................................................................... 8

AMI オプション .......................................................................................................................... 8Conda ............................................................................................................................... 9基本 ................................................................................................................................ 10CUDA 10.1 ...................................................................................................................... 11CUDA 10 ......................................................................................................................... 11CUDA 9 .......................................................................................................................... 11CUDA 8 .......................................................................................................................... 12Ubuntu 18.04 ................................................................................................................... 12Ubuntu 16.04 ................................................................................................................... 13Amazon Linux .................................................................................................................. 14Amazon Linux 2 ............................................................................................................... 15Windows .......................................................................................................................... 16

インスタンスの選択 .................................................................................................................. 17GPU ............................................................................................................................... 18CPU ................................................................................................................................ 18料金表 ............................................................................................................................. 19

DLAMI の起動 .................................................................................................................................. 20ステップ 1: DLAMI を起動する ................................................................................................... 20EC2 コンソール ........................................................................................................................ 21Marketplace 検索 ...................................................................................................................... 21ステップ 2: DLAMI に接続する ................................................................................................... 22ステップ 3: DLAMI インスタンスの保護 ....................................................................................... 22ステップ 4: DLAMI をテストする ................................................................................................ 22クリーンアップ ......................................................................................................................... 22Jupyter のセットアップ ............................................................................................................. 23

Jupyter を保護する ............................................................................................................ 23サーバーの起動 ................................................................................................................. 24クライアントの設定 .......................................................................................................... 24Jupyter ノートブックサーバーへのログイン .......................................................................... 25

DLAMI を使用 .................................................................................................................................. 29Conda DLAMI .......................................................................................................................... 29

Deep Learning AMI と Conda の概要 .................................................................................. 29ステップ 1: DLAMI へのログイン ........................................................................................ 29ステップ 2: MXNet Python 3 環境の起動 .............................................................................. 31ステップ 3: 一部の MXNet コードのテスト ........................................................................... 31ステップ 4: TensorFlow 環境への切り替え ........................................................................... 32環境を削除する ................................................................................................................. 32

ベース DLAMI .......................................................................................................................... 32

iii

Page 4: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイド

Deep Learning Base AMI の使用 ......................................................................................... 32CUDA のバージョンの設定 ................................................................................................. 33

Jupyter ノートブック ................................................................................................................ 33インストールされたチュートリアルを操作する ...................................................................... 34Jupyter で環境を切り替える ............................................................................................... 34

チュートリアル ......................................................................................................................... 3510 分間チュートリアル ...................................................................................................... 35フレームワークのアクティブ化 ........................................................................................... 35デバッグおよび視覚化 ....................................................................................................... 49分散トレーニング .............................................................................................................. 53Elastic Fabric Adapter ....................................................................................................... 70GPU のモニタリングおよび最適化 ...................................................................................... 78AWS Inferentia ................................................................................................................. 84推論 .............................................................................................................................. 101ONNX でフレームワークを使用する ................................................................................... 105モデル提供 ..................................................................................................................... 114

DLAMI のアップグレード ................................................................................................................. 119DLAMI のアップグレード ......................................................................................................... 119ソフトウェアの更新 ................................................................................................................. 119

セキュリティ .................................................................................................................................. 121データ保護 ............................................................................................................................. 121Identity and Access Management .............................................................................................. 122

アイデンティティを使用した認証 ...................................................................................... 122ポリシーを使用したアクセスの管理 ................................................................................... 124IAM を Amazon EMR ...................................................................................................... 126

ログ記録とモニタリング ........................................................................................................... 126コンプライアンス検証 .............................................................................................................. 126弾力 ...................................................................................................................................... 126インフラストラクチャセキュリティ ........................................................................................... 127

関連情報 ........................................................................................................................................ 128フォーラム ............................................................................................................................. 128ブログ ................................................................................................................................... 128よくある質問 .......................................................................................................................... 128

DLAMI のリリースノート ................................................................................................................. 131ドキュメント履歴 ............................................................................................................................ 132AWS の用語集 ................................................................................................................................ 135

iv

Page 5: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイド本ガイドについて

AWS Deep Learning AMI とはAWS Deep Learning AMI のユーザーガイドへようこそ。

AWS Deep Learning AMI (DLAMI) は、クラウド内の深層学習用のワンストップショップです。このカスタマイズされたマシンインスタンスは、小さい CPU のみのインスタンスから最新の高性能マルチ GPU インスタンスまで、さまざまなインスタンスタイプ用のほとんどの Amazon EC2 リージョンで利用できます。これは、NVIDIA CUDA、NVIDIA cuDNN、および最も人気が高い深層学習フレームワークの最新リリースを使用するように事前に設定されて提供されます。

本ガイドについてこのガイドでは、DLAMI を起動して使用する方法について説明します。また、トレーニングと推論の両方でのディープラーニングの一般的なユースケースについてもいくつか説明します。その他、目的に応じた適切な AMI の選択や、好まれるインスタンスの種類についても取り上げます。DLAMI には、各フレームワークのチュートリアルがいくつか付属しています。AWS Inferentia を使用した分散トレーニング、デバッグ、その他の主要な概念に関するチュートリアルも用意されています。ブラウザでチュートリアルを実行するように Jupyter を設定する手順を確認できます。

前提条件DLAMI を正常に実行するには、コマンドラインツールと基本的な Python についての知識が必要です。各フレームワークの使用方法に関するチュートリアルがフレームワーク自体に用意されていますが、このガイドでは、各フレームワークの有効化の方法を示すとともに、作業を開始するためのチュートリアルを探すことができます。

DLAMI の使用例深層学習に関する学習: DLAMI は、機械学習および深層学習フレームワークの習得や教育にうってつけです。これにより、各フレームワークのインストール環境のトラブルシューティングや、同じコンピュータ上でフレームワークを協調させる作業に悩まなくて済むようになります。DLAMI には Jupyter ノートブックが付属しています。そのため、機械学習や深層学習が初めての方でも、フレームワークが提供するチュートリアルを簡単に実行することができます。

アプリ開発: アプリの開発を担当しており、深層学習によりアプリで AI の最新テクノロジを利用することに関心をお持ちの方にとって、DLAMI は、申し分のない試験台になります。各フレームワークには、ディープラーニングを開始する方法についてのチュートリアルが付属しています。これらのチュートリアルの多くには Model Zoo があり、ニューラルネットワークを自分で作成したり、モデルトレーニングを実行したりせずに、簡単にディープラーニングを試すことができます。また、画像検出アプリケーションをわずか数分で作成する方法や、チャットボット用の音声認識アプリを作成する方法が例として示されています。

機械学習およびデータ分析: データサイエンティストの方、またはディープラーニングでデータを処理することに関心をお持ちの方は、フレームワークの多くで R と Spark がサポートされていることに気付くでしょう。スケーラブルなパーソナライズ用データ処理システムと予測システムを構築するまで、シンプルな回帰を実行する方法についてのチュートリアルが用意されています。

1

Page 6: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイド機能

調査: 調査を担当しており、新しいフレームワークの試用や、新しいモデルのテスト、新しいモデルのトレーニングを行う方は、スケール用の DLAMI および AWS 機能により、複数のトレーニングノードのインストールや管理といった退屈な作業の苦労を軽減できます。EMR および AWS CloudFormation テンプレートを使用すると、スケーラブルトレーニングの準備が整ったインスタンスのクラスター全体を簡単に起動できます。

Note

より多くの GPU (最大 8 個) を持つ大きなインスタンスにインスタンスタイプをアップグレードすることを最初に選択する場合もあるかもしれませんが、DLAMI インスタンスのクラスターを作成して、水平方向にスケーリングすることも可能です。クラスターをすばやくセットアップするには、事前定義された AWS CloudFormation テンプレートを使用します。クラスター構築の詳細については、関連情報 (p. 128) を参照してください。

DLAMI の機能あらかじめインストールされたフレームワーク現在、DLAMI には、主に 2 つのタイプがあります。また、それぞれについて、オペレーティングシステム(OS) とソフトウェアのバージョンに関連する他のバリエーションがあります。

• Deep Learning AMI と Conda (p. 5) - conda パッケージ、および独立した Python 環境を使用して個別にインストールされるフレームワーク

• Deep Learning Base AMI (p. 6) - フレームワークはインストールされず、NVIDIA CUDA と他の依存関係のみがインストールされます

Deep Learning AMI と Conda は、Anaconda 環境を使用して各フレームワークを分離します。そのため、各フレームワークを自由に切り替えることができ、依存関係の競合を心配する必要はありません。

最適な DLAMI の選択方法の詳細については、「開始方法 (p. 4)」を参照してください。

これは、Deep Learning AMI と Conda でサポートされているフレームワークの全リストです。

• Apache MXNet• Caffe• Caffe2• Chainer• CNTK• Keras• PyTorch• TensorFlow• TensorFlow 2• Theano

Note

v28 リリース以降、CNTK、Caffe、Caffe2、および Theano Conda 環境は AWS Deep LearningAMI に含まれなくなりました。これらの環境を含む AWS Deep Learning AMI の以前のリリースは引き続き利用できます。ただし、これらのフレームワークのオープンソースコミュニティによってセキュリティ修正が公開されている場合にのみ、AWS はこれらの環境の更新を提供します。

2

Page 7: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイド事前インストールされた GPU ソフトウェア

事前インストールされた GPU ソフトウェアCPU のみのインスタンスを使用する場合でも、DLAMI では、NVIDIA CUDA と NVIDIA cuDNN が使用されます。インストールされたソフトウェアは、インスタンスタイプに関係なく同じです。GPU 専用ツールは、GPU が 1 つ以上あるインスタンスでのみ機能することに注意してください。詳細は、詳細な「DLAMIのインスタンスタイプを選択する (p. 17)」を参照してください。

• NVIDIA CUDA の最新バージョン• NVIDIA cuDNN の最新バージョン• CUDA の古いバージョンも利用可能です。詳細については、「CUDA のインストール環境およびフレー

ムワークのバインド (p. 7)」を参照してください。

Elastic Inference のサポートDeep Learning AMI と Conda には、AWS Deep Learning AMI、Ubuntu 16.04 のオプション (p. 13) とAWS Deep Learning AMI Amazon Linux オプション (p. 14) の両方の Elastic Inference をサポートする環境が付属しています。Elastic Inference 環境は、現在 AWS Deep Learning AMI、Ubuntu 18.04 のオプション (p. 12) および AWS Deep Learning AMI Amazon Linux 2 オプション (p. 15) ではサポートされていません。Elastic Inference のチュートリアルおよび詳細については、Elastic Inference のドキュメントを参照してください。

モデル処理および可視化Deep Learning AMI と Conda には、2 種類のモデルサーバーがあらかじめインストールされています。1つは MXNet 用、もう 1 つは TensorFlow と、TensorBoard でのモデル可視化用です。

• Apache MXNet (MMS) のモデルサーバー (p. 114)• TensorFlow Serving (p. 116)• TensorBoard (p. 51)

3

Page 8: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドDLAMI の開始方法

開始方法

DLAMI の開始方法使い始めるのは簡単です.このガイドには、最適な DLAMI を選択する方法やユースケースと予算に適したインスタンスタイプを選択する方法についてのヒントのほか、興味深いカスタムセットアップを説明している「関連情報 (p. 128)」が記載されています。

AWS または Amazon EC2 を初めて使用する場合は、Deep Learning AMI と Conda (p. 5) から開始してください。Amazon EC2 やその他の AWS のサービス、たとえば、Amazon EMR、AmazonEFS、Amazon S3 などに慣れており、分散したトレーニングや推論が必要なプロジェクトのためにそれらのサービスを統合することに関心をお持ちの場合は、関連情報 (p. 128) を参照し、サービスがユースケースに適しているかどうかを確認してください。

DLAMI の選択 (p. 4) を参照し、アプリケーションに最適なインスタンスタイプの概念を理解することをお勧めします。

もう 1 つのオプションは、こちらのクイックチュートリアル (AWS Deep Learning AMI を起動します (10分以内)) です。

次のステップ

DLAMI の選択 (p. 4)

DLAMI の選択DLAMI にいくつものオプションがあり、お使いのユースケースにどれが最適であるかが明確でないことがあります。このセクションは、その決定を行うのに役立ちます。通常、DLAMI に言及する場合は、共通のタイプまたは機能を中心にした AMI のグループを指しています。これらのタイプや機能を定義する変数として、次の 3 つがあります。

• Conda と Base• CUDA 8 と CUDA 9 と CUDA 10• Amazon Linux と Ubuntu と Windows

このガイドの残りのトピックでは、より詳細な情報を説明します。

トピック• Deep Learning AMI と Conda (p. 5)• Deep Learning Base AMI (p. 6)• CUDA のインストール環境およびフレームワークのバインド (p. 7)• DLAMI オペレーティングシステムのオプション (p. 8)

次回の予定

Deep Learning AMI と Conda (p. 5)

4

Page 9: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドConda

Deep Learning AMI と CondaConda DLAMI では、Anaconda 仮想環境が使用されます。これらの環境は、インストールした異なるフレームワークの独立性が維持されるように設定されます。また、フレームワークを簡単に切り替えることも可能です。これは、DLAMI が提供するすべてのフレームワークを学習したり、試したりするのに最適です。ほとんどのユーザーにとって、新しい Deep Learning AMI と Conda は申し分のないものとなります。

これらの "Conda" AMI は、主要な DLAMI となります。また、フレームワークからの最新バージョンで頻繁に更新され、最新の GPU ドライバとソフトウェアが導入されることになります。大部分のドキュメントでは、一般的に AWS Deep Learning AMI と呼ばれます。

• Ubuntu 18.04 DLAMI には、Apache MXNet、Chainer、PyTorch、TensorFlow および TensorFlow 2 というフレームワークがあります。

• Ubuntu 16.04 および Amazon Linux DLAMI には ApacheMXNet、Caffe、Caffe2、Chainer、CNTK、Keras、PyTorch、TensorFlow、TensorFlow 2、Theano というフレームワークがあります。

• Amazon Linux 2 DLAMI には次のフレームワークがあります: ApacheMXNet、Chainer、PyTorch、TensorFlow、TensorFlow 2、Keras

Note

v28 リリース以降、CNTK、Caffe、Caffe2、および Theano Conda 環境は AWS Deep LearningAMI に含まれなくなりました。これらの環境を含む AWS Deep Learning AMI の以前のリリースは引き続き利用できます。ただし、これらのフレームワークのオープンソースコミュニティによってセキュリティ修正が公開されている場合にのみ、AWS はこれらの環境の更新を提供します。

安定性とリリース候補Conda AMI は、各フレームワークの最新の正式リリース版の最適化バイナリを使用します。リリース候補および実験的機能は対象外です。この最適化は、C5、および C4 CPU インスタンスタイプにおけるトレーニングおよび推論を高速化する高速化テクノロジー (MKL DNN など) をサポートするフレームワークに依存します。また、バイナリは高度な Intel 指示セット (AVX、AVX-2、SSE4.1、SSE4.2 などを含む) をサポートするようにコンパイルされています。これによって、Intel CPU アーキテクチャ上のベクターおよび浮動小数点オペレーションが高速化されます。さらに、GPU インスタンスタイプでは、CUDA およびcuDNN は最新の公式リリースがサポートするバージョンで更新されます。

Deep Learning AMI と Conda は、EC2 インスタンスにフレームワークの最初のアクティベーションから最適化されたフレームワークのバージョンを自動的にインストールします。詳細については、Deep LearningAMI と Conda の使用 (p. 29) を参照してください。

カスタムまたは最適化されたビルドオプションを使用してソースからインストールする場合は、DeepLearning Base AMI (p. 6) の方が適しています。

Python 2 の廃止Python オープンソースコミュニティは、Python 2 のサポートを 2020 年 1 月 1 日に正式に終了しました。TensorFlow と PyTorch コミュニティは、TensorFlow 2.1 および PyTorch 1.4 リリースが Python 2 をサポートする最後のリリースになると発表しました。Python 2 Conda 環境を含む DLAMI (v26、v25 など)の以前のリリースは、引き続き利用できます。ただし、以前に公開された DLAMI のバージョンで Python2 Conda 環境の更新を提供するのは、それらのバージョンのオープンソースコミュニティによって公開されたセキュリティ修正がある場合のみです。TensorFlow および PyTorch フレームワークの今後のバージョンを利用する DLAMI リリースには、Python 2 Conda 環境は含められません。

5

Page 10: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイド基本

Elastic Inference のサポートDeep Learning AMI と Conda には、AWS Deep Learning AMI、Ubuntu 16.04 のオプション (p. 13) とAWS Deep Learning AMI Amazon Linux オプション (p. 14) の両方の Elastic Inference をサポートする環境が付属しています。Elastic Inference 環境は、現在 AWS Deep Learning AMI、Ubuntu 18.04 のオプション (p. 12) および AWS Deep Learning AMI Amazon Linux 2 オプション (p. 15) ではサポートされていません。Elastic Inference のチュートリアルおよび詳細については、Elastic Inference のドキュメントを参照してください。

CUDA サポートDeep Learning AMI と Conda の CUDA バージョンおよびそれぞれでサポートされているフレームワーク:

• cuDNN 7 の CUDA 10.1: Apache MXNet• cuDNN 7 の CUDA 10: PyTorch、TensorFlow、TensorFlow 2、Apache MXNet、Caffe2 および Chainer• cuDNN 7 の CUDA 9: CNTK、Keras および Theano• cuDNN 6 の CUDA 8: Caffe

特定のフレームワークバージョン番号は、DLAMI のリリースノート (p. 131) にあります。

この DLAMI タイプを選択するか、「次回の予定」オプションを使ってさまざまな DLAMI の詳しい情報を確認してください。

• Deep Learning AMI と Conda オプション (p. 9)

次回の予定

Deep Learning Base AMI (p. 6)

関連トピック• Deep Learning AMI と Conda の使用方法のチュートリアルについては、「Deep Learning AMI と Conda

の使用 (p. 29)」チュートリアルを参照してください。

Deep Learning Base AMIDeep Learning Base AMI は、深層学習のための真っ白なキャンバスのようなものです。ここには、特定のフレームワークをインストールするまでに必要なすべてが含まれています。選択した CUDA バージョンが使用されます。

基本 DLAMI を選ぶ理由最先端のディープラーニングプロジェクトへの参加を目指すプロジェクト協力者は、この AMI グループを有効活用できます。また、環境を展開する際に、最新の NVIDIA ソフトウェアがインストールされ動作していることを確信できるため、インストールするフレームワークとバージョンの選択に集中できます。

この DLAMI タイプを選択するか、「次回の予定」オプションを使ってさまざまな DLAMI の詳しい情報を確認してください。

• Deep Learning Base AMI オプション (p. 10)

次回の予定

6

Page 11: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドCUDA

CUDA のインストール環境およびフレームワークのバインド (p. 7)

関連トピック• Deep Learning Base AMI の使用 (p. 32)

CUDA のインストール環境およびフレームワークのバインドディープラーニングは、非常に最先端のものですが、各フレームワークは、"安定した" バージョンを提供しています。これらの安定したバージョンは、CUDA または cuDNN の最新の実装および機能とともに動作しない場合があります。バージョンを決定するには、どうすればよいでしょうか? これは、最終的にはユースケースと必要な機能で決まります。不明な場合は、最新の Deep Learning AMI と Conda を使用します。これには、CUDA 8、CUDA 9、CUDA 10 および CUDA 10.1 が含まれたすべてのフレームワークの公式 pip バイナリがあり、各フレームワークでサポートされる最新バージョンが使用されます。最新のバージョンが必要な場合で、深層学習環境をカスタマイズするには、Deep Learning Base AMI を使用します。

「安定性とリリース候補 (p. 5)」で当社のガイドを参照してください。

CUDA での DLAMI の選択Deep Learning Base AMI (p. 6) には、CUDA 8、9、10 および 10.1 があります。

Deep Learning AMI と Conda (p. 5) には、CUDA 8 および 9、10 および 10.1 があります。

• cuDNN 7 の CUDA 10.1: Apache MXNet• cuDNN 7 の CUDA 10: PyTorch、TensorFlow、TensorFlow 2、Apache MXNet、Caffe2 および Chainer• cuDNN 7 の CUDA 9: CNTK、Keras および Theano• cuDNN 6 の CUDA 8: Caffe

Note

v28 リリース以降、CNTK、Caffe、Caffe2、および Theano Conda 環境は AWS Deep LearningAMI に含まれなくなりました。これらの環境を含む AWS Deep Learning AMI の以前のリリースは引き続き利用できます。ただし、これらのフレームワークのオープンソースコミュニティによってセキュリティ修正が公開されている場合にのみ、AWS はこれらの環境の更新を提供します。

DLAMI のタイプとオペレーティングシステムのインストールオプションについては、CUDA バージョンおよび オプションのページを参照してください。

• 深層学習 AMI と CUDA 10.1 オプション (p. 11)• 深層学習 AMI と CUDA 10 オプション (p. 11)• Deep Learning AMI と CUDA 9 オプション (p. 11)• Deep Learning AMI と CUDA 8 オプション (p. 12)• Deep Learning AMI と Conda オプション (p. 9)• Deep Learning Base AMI オプション (p. 10)

特定のフレームワークバージョン番号は、DLAMI のリリースノート (p. 131) にあります。

7

Page 12: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドOS

この DLAMI タイプを選択するか、「次回の予定」オプションを使ってさまざまな DLAMI の詳しい情報を確認してください。

いずれかのバージョンの CUDA を選択してから、そのバージョンを含む DLAMI の詳細なリストを付録で確認するか、「次回の予定」のオプションで別の DLAMI の詳細を確認してください。

次回の予定

DLAMI オペレーティングシステムのオプション (p. 8)

関連トピック• CUDA のバージョンを切り替える方法については、「Deep Learning Base AMI の使用 (p. 32)」

チュートリアルを参照してください。

DLAMI オペレーティングシステムのオプションDLAMI は以下のリストにあるオペレーティングシステムで提供されます。CentOS や RedHat の方が慣れている場合は、AWS Deep Learning AMI Amazon Linux オプション (p. 14) または AWS DeepLearning AMI Amazon Linux 2 オプション (p. 15) を使用するとよいでしょう。それ以外の場合は、好みに合わせて AWS Deep Learning AMI、Ubuntu 18.04 のオプション (p. 12) または AWS Deep LearningAMI、Ubuntu 16.04 のオプション (p. 13) をお勧めします。

OS として Windows が必要な場合は、「AWS Deep Learning AMI、Windows オプション (p. 16)」にある 2 つのオプションを選択できます。

オペレーティングシステムの 1 つを選択し、付録で詳細なリストを確認するか、次のステップに進み、AMI とインスタンスタイプを選択します。

• AWS Deep Learning AMI Amazon Linux オプション (p. 14)• AWS Deep Learning AMI Amazon Linux 2 オプション (p. 15)• AWS Deep Learning AMI、Ubuntu 18.04 のオプション (p. 12)• AWS Deep Learning AMI、Ubuntu 16.04 のオプション (p. 13)• AWS Deep Learning AMI、Windows オプション (p. 16)

「開始方法」で概要を説明したように、DLAMI にアクセスするにはいくつかの選択肢がありますが、必要なインスタンスタイプを最初に評価する必要があります。また、使用する AWS リージョンを識別する必要もあります。

次回の予定

DLAMI のインスタンスタイプを選択する (p. 17)

AMI オプション次のトピックで AWS Deep Learning AMI のカテゴリについて説明します。

トピック• Deep Learning AMI と Conda オプション (p. 9)• Deep Learning Base AMI オプション (p. 10)

8

Page 13: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドConda

• 深層学習 AMI と CUDA 10.1 オプション (p. 11)• 深層学習 AMI と CUDA 10 オプション (p. 11)• Deep Learning AMI と CUDA 9 オプション (p. 11)• Deep Learning AMI と CUDA 8 オプション (p. 12)• AWS Deep Learning AMI、Ubuntu 18.04 のオプション (p. 12)• AWS Deep Learning AMI、Ubuntu 16.04 のオプション (p. 13)• AWS Deep Learning AMI Amazon Linux オプション (p. 14)• AWS Deep Learning AMI Amazon Linux 2 オプション (p. 15)• AWS Deep Learning AMI、Windows オプション (p. 16)

Deep Learning AMI と Conda オプションこれらのいずれかの DLAMI の使用を続行するには、「DLAMI を起動および設定する (p. 20)」ガイドを使用します。

• Deep Learning AMI (Ubuntu 18.04) (AWS Marketplace)• Deep Learning AMI (Ubuntu 16.04) (AWS Marketplace)• Deep Learning AMI (Amazon Linux) (AWS Marketplace)• Deep Learning AMI (Amazon Linux 2) (AWS Marketplace)

これらの DLAMI は以下のリージョンで利用できます。

リージョン コード

米国東部 (オハイオ) us-east-2

米国東部(バージニア北部) us-east-1

GovCloud us-gov-west-1

米国西部 (北カリフォルニア) us-west-1

米国西部 (オレゴン) us-west-2

北京(中国) cn-north-1

寧夏 (中国) cn-northwest-1

アジアパシフィック (ムンバイ) ap-south-1

アジアパシフィック (ソウル) ap-northeast-2

アジアパシフィック (シンガポール)

ap-southeast-1

アジアパシフィック (シドニー) ap-southeast-2

アジアパシフィック (東京) ap-northeast-1

カナダ (中部) ca-central-1

欧州 (フランクフルト) eu-central-1

欧州 (アイルランド) eu-west-1

9

Page 14: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイド基本

リージョン コード

欧州 (ロンドン) eu-west-2

欧州 (パリ) eu-west-3

SA (サンパウロ) sa-east-1

Deep Learning Base AMI オプションこれらのいずれかの DLAMI の使用を続行するには、「DLAMI を起動および設定する (p. 20)」ガイドを使用します。

• Deep Learning Base AMI (Ubuntu 18.04) (AWS Marketplace)• Deep Learning Base AMI (Ubuntu 16.04) (AWS Marketplace)• Deep Learning Base AMI (Amazon Linux) on the AWS Marketplace• Deep Learning Base AMI (Amazon Linux 2) (AWS Marketplace)

これらの DLAMI は以下のリージョンで利用できます。

リージョン コード

米国東部 (オハイオ) us-east-2

米国東部(バージニア北部) us-east-1

GovCloud us-gov-west-1

米国西部 (北カリフォルニア) us-west-1

米国西部 (オレゴン) us-west-2

北京(中国) cn-north-1

寧夏 (中国) cn-northwest-1

アジアパシフィック (ムンバイ) ap-south-1

アジアパシフィック (ソウル) ap-northeast-2

アジアパシフィック (シンガポール)

ap-southeast-1

アジアパシフィック (シドニー) ap-southeast-2

アジアパシフィック (東京) ap-northeast-1

カナダ (中部) ca-central-1

欧州 (フランクフルト) eu-central-1

欧州 (アイルランド) eu-west-1

欧州 (ロンドン) eu-west-2

欧州 (パリ) eu-west-3

SA (サンパウロ) sa-east-1

10

Page 15: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドCUDA 10.1

深層学習 AMI と CUDA 10.1 オプションこれらのいずれかの DLAMI の使用を続行するには、「DLAMI を起動および設定する (p. 20)」ガイドを使用します。

• Deep Learning AMI (Ubuntu 18.04) (AWS Marketplace)• Deep Learning Base AMI (Ubuntu 18.04) (AWS Marketplace)• Deep Learning AMI (Ubuntu 16.04) (AWS Marketplace)• Deep Learning Base AMI (Ubuntu 16.04) (AWS Marketplace)• Deep Learning AMI (Amazon Linux) (AWS Marketplace)• Deep Learning Base AMI (Amazon Linux) on the AWS Marketplace• Deep Learning AMI (Amazon Linux 2) (AWS Marketplace)• Deep Learning Base AMI (Amazon Linux 2) (AWS Marketplace)

Note

Deep Learning AMI と Conda には、CUDA 8、CUDA 9、CUDA 10 および CUDA 10.1 があります。フレームワークでは、サポートされる最新の CUDA が使用されます。Deep Learning Base AMI には、CUDA 8、CUDA 9、CUDA 10 および CUDA 10.1 もあります。これらを切り替える方法については、「Deep Learning Base AMI の使用 (p. 32)」の手順に従ってください。

深層学習 AMI と CUDA 10 オプションこれらのいずれかの DLAMI の使用を続行するには、「DLAMI を起動および設定する (p. 20)」ガイドを使用します。

• Deep Learning AMI (Ubuntu 18.04) (AWS Marketplace)• Deep Learning AMI (Ubuntu 16.04) (AWS Marketplace)• Deep Learning AMI (Amazon Linux) (AWS Marketplace)• Deep Learning AMI (Amazon Linux 2) (AWS Marketplace)• Deep Learning Base AMI (Ubuntu 18.04) (AWS Marketplace)• Deep Learning Base AMI (Ubuntu 16.04) (AWS Marketplace)• Deep Learning Base AMI (Amazon Linux) on the AWS Marketplace• Deep Learning Base AMI (Amazon Linux 2) (AWS Marketplace)

Note

Deep Learning AMI と Conda には、CUDA 8、CUDA 9、および CUDA 10 があります。フレームワークでは、サポートされる最新の CUDA が使用されます。Deep Learning Base AMI には、CUDA 8、CUDA 9、および CUDA 10 もあります。これらを切り替える方法については、「Deep Learning Base AMI の使用 (p. 32)」の手順に従ってください。

Deep Learning AMI と CUDA 9 オプションこれらのいずれかの DLAMI の使用を続行するには、「DLAMI を起動および設定する (p. 20)」ガイドを使用します。

• Deep Learning AMI (Ubuntu 16.04) (AWS Marketplace)

11

Page 16: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドCUDA 8

• Deep Learning AMI (Amazon Linux) (AWS Marketplace)• Deep Learning AMI (Amazon Linux 2) (AWS Marketplace)• Deep Learning Base AMI (Ubuntu 18.04) (AWS Marketplace)• Deep Learning Base AMI (Ubuntu 16.04) (AWS Marketplace)• Deep Learning Base AMI (Amazon Linux) on the AWS Marketplace• Deep Learning Base AMI (Amazon Linux 2) (AWS Marketplace)• Deep Learning AMI (Windows 2012 R2) (AWS Marketplace)• Deep Learning AMI (Windows 2016) on the AWS Marketplace

Note

Deep Learning AMI と Conda には、CUDA 8、CUDA 9、および CUDA 10 があります。フレームワークでは、サポートされる最新の CUDA が使用されます。Deep Learning Base AMI には、CUDA 8、CUDA 9、および CUDA 10 もあります。これらを切り替える方法については、「Deep Learning Base AMI の使用 (p. 32)」の手順に従ってください。

Deep Learning AMI と CUDA 8 オプションこれらのいずれかの DLAMI の使用を続行するには、「DLAMI を起動および設定する (p. 20)」ガイドを使用します。

• Deep Learning AMI (Ubuntu 16.04) (AWS Marketplace)• Deep Learning AMI (Amazon Linux) (AWS Marketplace)• Deep Learning AMI (Amazon Linux 2) (AWS Marketplace)• Deep Learning Base AMI (Ubuntu 18.04) (AWS Marketplace)• Deep Learning Base AMI (Ubuntu 16.04) (AWS Marketplace)• Deep Learning Base AMI (Amazon Linux) on the AWS Marketplace• Deep Learning Base AMI (Amazon Linux 2) (AWS Marketplace)• Deep Learning AMI (Windows 2012 R2) (AWS Marketplace)• Deep Learning AMI (Windows 2016) on the AWS Marketplace

Note

Deep Learning AMI と Conda には、CUDA 8、CUDA 9、および CUDA 10 があります。フレームワークでは、サポートされる最新の CUDA が使用されます。Deep Learning Base AMI には、CUDA 8、CUDA 9、および CUDA 10 もあります。これらを切り替える方法については、「Deep Learning Base AMI の使用 (p. 32)」の手順に従ってください。

AWS Deep Learning AMI、Ubuntu 18.04 のオプションこれらのいずれかの DLAMI の使用を続行するには、「DLAMI を起動および設定する (p. 20)」ガイドを使用します。Deep Learning AMI と Conda は、Ubuntu 18.04 用 Elastic Inference をサポートしていません。

• Deep Learning AMI (Ubuntu 18.04) (AWS Marketplace)• Deep Learning Base AMI (Ubuntu 18.04) (AWS Marketplace)

12

Page 17: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドUbuntu 16.04

これらの DLAMI は以下のリージョンで利用できます。

リージョン コード

米国東部 (オハイオ) us-east-2

米国東部(バージニア北部) us-east-1

GovCloud us-gov-west-1

米国西部 (北カリフォルニア) us-west-1

米国西部 (オレゴン) us-west-2

北京(中国) cn-north-1

寧夏 (中国) cn-northwest-1

アジアパシフィック (ムンバイ) ap-south-1

アジアパシフィック (ソウル) ap-northeast-2

アジアパシフィック (シンガポール)

ap-southeast-1

アジアパシフィック (シドニー) ap-southeast-2

アジアパシフィック (東京) ap-northeast-1

カナダ (中部) ca-central-1

欧州 (フランクフルト) eu-central-1

欧州 (アイルランド) eu-west-1

欧州 (ロンドン) eu-west-2

欧州 (パリ) eu-west-3

SA (サンパウロ) sa-east-1

AWS Deep Learning AMI、Ubuntu 16.04 のオプションこれらのいずれかの DLAMI の使用を続行するには、「DLAMI を起動および設定する (p. 20)」ガイドを使用します。Deep Learning AMI と Conda には、Ubuntu 16.04 用 Elastic Inference をサポートする環境が付属しています。Elastic Inference のチュートリアルおよび詳細については、Elastic Inference のドキュメントを参照してください。

• Deep Learning AMI (Ubuntu 16.04) (AWS Marketplace)• Deep Learning Base AMI (Ubuntu 16.04) (AWS Marketplace)

これらの DLAMI は以下のリージョンで利用できます。

リージョン コード

米国東部 (オハイオ) us-east-2

13

Page 18: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドAmazon Linux

リージョン コード

米国東部(バージニア北部) us-east-1

GovCloud us-gov-west-1

米国西部 (北カリフォルニア) us-west-1

米国西部 (オレゴン) us-west-2

北京(中国) cn-north-1

寧夏 (中国) cn-northwest-1

アジアパシフィック (ムンバイ) ap-south-1

アジアパシフィック (ソウル) ap-northeast-2

アジアパシフィック (シンガポール)

ap-southeast-1

アジアパシフィック (シドニー) ap-southeast-2

アジアパシフィック (東京) ap-northeast-1

カナダ (中部) ca-central-1

欧州 (フランクフルト) eu-central-1

欧州 (アイルランド) eu-west-1

欧州 (ロンドン) eu-west-2

欧州 (パリ) eu-west-3

SA (サンパウロ) sa-east-1

AWS Deep Learning AMI Amazon Linux オプションこれらのいずれかの DLAMI の使用を続行するには、「DLAMI を起動および設定する (p. 20)」ガイドを使用します。Deep Learning AMI と Conda には、Amazon Linux 用 Elastic Inference をサポートする環境が付属しています。Elastic Inference のチュートリアルおよび詳細については、Elastic Inference のドキュメントを参照してください。

• Deep Learning AMI (Amazon Linux) (AWS Marketplace)• Deep Learning Base AMI (Amazon Linux) on the AWS Marketplace

これらの DLAMI は以下のリージョンで利用できます。

リージョン コード

米国東部 (オハイオ) us-east-2

米国東部(バージニア北部) us-east-1

GovCloud us-gov-west-1

米国西部 (北カリフォルニア) us-west-1

14

Page 19: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドAmazon Linux 2

リージョン コード

米国西部 (オレゴン) us-west-2

北京(中国) cn-north-1

寧夏 (中国) cn-northwest-1

アジアパシフィック (ムンバイ) ap-south-1

アジアパシフィック (ソウル) ap-northeast-2

アジアパシフィック (シンガポール)

ap-southeast-1

アジアパシフィック (シドニー) ap-southeast-2

アジアパシフィック (東京) ap-northeast-1

カナダ (中部) ca-central-1

欧州 (フランクフルト) eu-central-1

欧州 (アイルランド) eu-west-1

欧州 (ロンドン) eu-west-2

欧州 (パリ) eu-west-3

SA (サンパウロ) sa-east-1

AWS Deep Learning AMI Amazon Linux 2 オプションこれらのいずれかの DLAMI の使用を続行するには、「DLAMI を起動および設定する (p. 20)」ガイドを使用します。Deep Learning AMI と Conda は、Amazon Linux 2 用 Elastic Inference をサポートしていません。

• Deep Learning AMI (Amazon Linux 2) (AWS Marketplace)• Deep Learning Base AMI (Amazon Linux 2) (AWS Marketplace)

これらの DLAMI は以下のリージョンで利用できます。

リージョン コード

米国東部 (オハイオ) us-east-2

米国東部(バージニア北部) us-east-1

米国西部 (北カリフォルニア) us-west-1

米国西部 (オレゴン) us-west-2

アジアパシフィック (ムンバイ) ap-south-1

アジアパシフィック (ソウル) ap-northeast-2

アジアパシフィック (大阪: ローカル)

ap-northeast-3

15

Page 20: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドWindows

リージョン コード

アジアパシフィック (シンガポール)

ap-southeast-1

アジアパシフィック (シドニー) ap-southeast-2

アジアパシフィック (東京) ap-northeast-1

カナダ (中部) ca-central-1

欧州 (フランクフルト) eu-central-1

欧州 (アイルランド) eu-west-1

欧州 (ロンドン) eu-west-2

欧州 (パリ) eu-west-3

SA (サンパウロ) sa-east-1

<a>Amazon Linux 2 リリースノート</a>

AWS Deep Learning AMI、Windows オプションこれらのいずれかの DLAMI の使用を続行するには、「DLAMI を起動および設定する (p. 20)」ガイドを使用します。

• Deep Learning AMI (Windows 2016) on the AWS Marketplace• Deep Learning AMI (Windows 2012 R2) (AWS Marketplace)

Windows DLAMI は以下のリージョンで利用できます。

リージョン コード

米国東部 (オハイオ) us-east-2

米国東部(バージニア北部) us-east-1

GovCloud us-gov-west-1

米国西部 (北カリフォルニア) us-west-1

米国西部 (オレゴン) us-west-2

北京(中国) cn-north-1

アジアパシフィック (ムンバイ) ap-south-1

アジアパシフィック (ソウル) ap-northeast-2

アジアパシフィック (シンガポール)

ap-southeast-1

アジアパシフィック (シドニー) ap-southeast-2

アジアパシフィック (東京) ap-northeast-1

16

Page 21: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドインスタンスの選択

リージョン コード

カナダ (中部) ca-central-1

欧州 (フランクフルト) eu-central-1

欧州 (アイルランド) eu-west-1

欧州 (ロンドン) eu-west-2

欧州 (パリ) eu-west-3

SA (サンパウロ) sa-east-1

DLAMI のインスタンスタイプを選択するインスタンスタイプを選択する作業は 1 つの難しい問題にもなります。ここでは、最適なタイプを選択する方法の参考になる、いくつかのポイントを紹介します。DLAMI は無料ですが、基盤となるコンピューティングリソースは有料になる点に注意してください。

• ディープラーニングを初めて導入する場合は、GPU が 1 つの「エントリレベル」のインスタンスの採用がお勧めかもしれません。

• 予算の制約が大きく、小さい規模から開始する必要がある場合は、CPU のみのインスタンスを検討するとよいでしょう。

• お客様の目的が、モデルをトレーニングすることではなく、推論と予測用にトレーニング済みモデルを実行することである場合は、Amazon Elastic Inference を実行してもかまいません。これにより、GPUの一部にアクセスするようにスケーリングして、コストを抑えることができます。大容量の推論サービスには、大容量のメモリを搭載した CPU インスタンスやそれらのクラスターが、より適したソリューションです。

• 大量のデータまたは大きなバッチサイズを持つ大規模なモデルを使用している場合は、より多くのメモリを持つより大きなインスタンスが必要になります。モデルを GPU のクラスターに配布することもできます。バッチサイズを小さくした場合、メモリの少ないインスタンスを使用すると改善されることがあります。これは、精度とトレーニング速度に影響を与える可能性があります。

• 大規模で高レベルのノード間通信を必要とする NVIDIA Collective Communications Library (NCCL) を使用した機械学習アプリケーションの実行に関心がある場合は、 Elastic Fabric Adapter (EFA) を使用できます。

DLAMI を利用できないリージョンはありますが、選択したリージョンに DLAMI をコピーすることは可能です。詳細については、AMI のコピー を参照してください。各リージョンでサポートされるインスタンスタイプの範囲はそれぞれ異なり、多くの場合、インスタンスタイプのコストもリージョンごとにわずかに違います。インスタンスコストのリストは、各 DLAMI のメインページにあります。リージョンの選択リストを確認し、必ず自社または自社の顧客に近いリージョンを選択してください。複数の DLAMI を使用する予定があり、クラスターを作成する可能性がある場合は、クラスター内のすべてのノードに同じリージョンを使う必要があります。

• インスタンスの詳細については、「 EC2 インスタンスタイプ」を参照してください。• リージョンの詳細については、「 EC2 リージョン」を参照してください。

これらのポイントをすべて考慮したうえで、現在のユースケースと予算に最も適合するインスタンスタイプを書き留めてください。このガイドの残りのトピックでは、より詳細な情報を説明します。

Important

ディープラーニング AMI には、ドライバ、ソフトウェアやツールキット (NVIDIA Corporation によって開発、所有あるいは提供) が含まれています。これらの NVIDIA ドライバ、ソフトウェア、

17

Page 22: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドGPU

ツールキットは、NVIDIA ハードウェアが含まれている Amazon EC2 インスタンスでのみ使用することにユーザーが同意するものとします。

トピック• 推奨 GPU インスタンス (p. 18)• 推奨 CPU インスタンス (p. 18)• DLAMI の料金表 (p. 19)

次回の予定

推奨 GPU インスタンス (p. 18)

推奨 GPU インスタンスGPU インスタンスは、ディープラーニングの大半の目的に推奨されます。新しいモデルのトレーニングはCPU インスタンス上よりも GPU インスタンス上の方が高速で実行でき、複数の GPU インスタンスがある場合や、トレーニングを複数の GPU インスタンスに分散した場合は、ほぼ直線的な拡張性を得ることができます。

Note

モデルのサイズは、インスタンスを選択する際の要因となります。モデルがインスタンスの使用可能な RAM を超えている場合は、アプリケーション用に十分なメモリを持つ別のインスタンスタイプを選択します。

• Amazon EC2 P3 インスタンス には最大 8 個の NVIDIA Tesla V100 GPU が搭載されています。• Amazon EC2 P2 インスタンス には最大 16 個の NVIDIA K80 GPU が搭載されています。• Amazon EC2 G3 インスタンス には最大 4 個の NVIDIA Tesla M60 GPU が搭載されています。• Amazon EC2 G4 インスタンス には最大 4 個の NVIDIA T4 GPU が搭載されています。• GPU インスタンスのさまざまなオプションについては、「 EC2 インスタンスタイプ」を参照し、「高

速コンピューティング」を選択してください。

次回の予定

推奨 CPU インスタンス (p. 18)

推奨 CPU インスタンス予算に制約がある場合、ディープラーニングを学習する目的の場合、または予測サービスの実行が唯一の目的である場合は、CPU のカテゴリに数多くの低価格な選択肢があります。一部のフレームワークは、C5 (一部のリージョンでのみ使用可)、C4 および C3 CPU インスタンスタイプにおけるトレーニングと推定を高速化する Intel の MKL DNN を活用しています。GPU インスタンスタイプでの推論も高速化されます。

• Amazon EC2 C5 インスタンス には最大 72 個の Intel vCPU が搭載されています。• Amazon EC2 C4 インスタンスには最大 36 個のインテル vCPU があります。• CPU インスタンスのさまざまなオプションについては、「 EC2 インスタンスタイプ」を参照し、「コ

ンピューティング最適化」を検索してください。

Note

C5 インスタンス (使用できないリージョンがあります) は、科学モデリング、バッチ処理、分散分析、高性能コンピューティング (HPC)、機械学習/ディープラーニングによる推論などに優れています。

18

Page 23: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイド料金表

Note

モデルのサイズは、インスタンスを選択する際の要因となります。モデルがインスタンスの使用可能な RAM を超えている場合は、アプリケーション用に十分なメモリを持つ別のインスタンスタイプを選択します。

Important

Caffe を使用する予定がある場合は、代わりに GPU インスタンスを選択する必要があります。DLAMI では、Caffe は GPU サポートでのみ作動し、CPU モードで実行することはできません。

次回の予定

DLAMI の料金表 (p. 19)

DLAMI の料金表DLAMI は無料ですが、Amazon EC2 その他の AWS のサービスのコストはお支払いいただく必要があります。含まれているディープラーニングフレームワークは無料で、それぞれに独自のオープンソースライセンスが付与されています。NVIDIA の GPU ソフトウェアは無料で、独自のライセンスが付与されています。

無料であり有料の部分もあるとはどのような仕組みなのか? 「Amazon EC2 またはその他の AWS のサービスのコスト」とは何を指しますか?

このような質問は多く寄せれます。Amazon EC2 のインスタンスタイプには無料とされているものがあります。これらは一般的には小さなインスタンスで、無料のインスタンスのいずれかで DLAMI を実行できます。これは、そのインスタンスの容量だけを使う場合は完全に無料という意味です。CPU コア数を増やす、ディスク容量を増やす、RAM を増やす、GPU を 1 つ以上使用するなど、より強力なインスタンスが必要な場合は、無料利用枠のインスタンスクラスに該当する可能性はほとんどありません。つまり、それらのコストを支払う必要があります。ソフトウェアは引き続き無料であるものの、基盤部分で使用しているハードウェアについてはお支払いいただく必要があると理解してください。

選択するインスタンスのサイズや、各タイプで提供される内容について詳しくは、「DLAMI のインスタンスタイプを選択する (p. 17)」を参照してください。

次のステップ

DLAMI を起動および設定する (p. 20)

19

Page 24: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドステップ 1: DLAMI を起動する

DLAMI を起動および設定するこのページを表示している場合は、起動する AMI について既に十分考慮済みかと思います。それ以外の場合は、「開始方法 (p. 4)」を通して提供される AMI 選択のガイドラインを使って DLAMI を選択するか、「AMI オプション (p. 8)」にある付録のセクションを参照してください。

さらに、選択するインスタンスタイプとリージョンを把握しておく必要があります。そうでない場合、「DLAMI のインスタンスタイプを選択する (p. 17)」を参照してください

Note

この例では、デフォルトのインスタンスタイプとして p2.xlarge を使用します。このインスタンスタイプは、予定しているものに置き換えてください。Important

Elastic Inference を使用する予定がある場合は、DLAMI を起動する前に完了する必要があるElastic Inference のセットアップがあります。

トピック• ステップ 1: DLAMI を起動する (p. 20)• EC2 コンソール (p. 21)• Marketplace 検索 (p. 21)• ステップ 2: DLAMI に接続する (p. 22)• ステップ 3: DLAMI インスタンスの保護 (p. 22)• ステップ 4: DLAMI をテストする (p. 22)• クリーンアップ (p. 22)• Jupyter ノートブックサーバーの設定 (p. 23)

ステップ 1: DLAMI を起動するNote

このウォークスルーでは、Deep Learning AMI (Ubuntu 16.04) に固有の内容に言及する可能性がありますが、異なる DLAMI を選択している場合でも、このガイドに従うことができます。

インスタンスを起動する

1. DLAMI の起動には 2 通りの方法があります。1 つを選択してください。

• EC2 コンソール (p. 21)• Marketplace 検索 (p. 21)

Tip

CLI のオプション: AWS CLI を使用した DLAMI の起動を選択した場合、AMI の ID、リージョンとインスタンスのタイプ、およびセキュリティトークンの情報が必要になります。AMI とインスタンス の ID があることを確かめてください。まだ AWS CLI をセットアップしていない場合は、『AWS コマンドラインインターフェイスのインストール』ガイドを参照して、まずセットアップを完了してください。

2. これらのいずれかのオプションのステップを完了したら、インスタンスの準備完了を待機します。この待機時間は通常わずか数分です。インスタンスの状態は EC2 コンソール で確認できます。

20

Page 25: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドEC2 コンソール

EC2 コンソールNote

Elastic Fabric Adapter (EFA) を使用してインスタンスを起動するには、以下のステップを参照してください。

1. EC2 コンソール を開きます。2. 最上部のナビゲーションバーで現在のリージョンを確認します。目的の AWS リージョンでない場

合、このオプションを変更して次に進みます。詳細については、「 EC2 リージョン」を参照してください。

3. [インスタンスの作成] を選択します。4. 目的のインスタンスを名前で検索します。

1. [AWS Marketplace] を選択します。または...2. [QuickStart] を選択します。 使用可能な DLAMI のサブセットのみがここに一覧表示されていま

す。3. 深層学習 AMI を検索します。また、必要な OS などのサブタイプや、Base、Conda、Source な

どを検索します。4. オプションを参照し、選択する項目で [Select] をクリックします。

5. 詳細を確認して [Continue] を選択します。6. インスタンスタイプを選択します。

Note

Elastic Inference (EI) を使用する場合は、[Configure Instance Details (インスタンスの詳細の設定)]、[Add an Amazon EI accelerator (Amazon EI アクセラレーターの追加)] の順に選択してから、Amazon EI アクセラレーターのサイズを選択します。

7. [Review and Launch] を選択します。8. 詳細と価格を確認します。[Launch] を選択します。

Tip

AWS Deep Learning AMI を使用してディープラーニングを始めてみましょう でスクリーンショット付きのウォークスルーをご覧ください。

次のステップ

ステップ 2: DLAMI に接続する (p. 22)

Marketplace 検索1. AWS Marketplace を参照し AWS Deep Learning AMI を検索します。2. オプションを参照し、選択する項目で [Select] をクリックします。3. 詳細を確認して [Continue] を選択します。4. [Region] の詳細を確認し、内容を書き留めます。目的の AWS リージョンでない場合、このオプショ

ンを変更して次に進みます。詳細については、「 EC2 リージョン」を参照してください。5. インスタンスタイプを選択します。6. キーペアを選択するか、デフォルトのキーペアを使用するか、新しいキーペアを作成します。7. 詳細と価格を確認します。8. [Launch with 1-Click] を選択します。

21

Page 26: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドステップ 2: DLAMI に接続する

次のステップ

ステップ 2: DLAMI に接続する (p. 22)

ステップ 2: DLAMI に接続するクライアント (Windows、MacOS、または Linux) から起動した DLAMI に接続します。詳細については、Linux インスタンス用 Amazon EC2 ユーザーガイド の「Linux インスタンスへの接続」を参照してください。

ログイン後に Jupyter のセットアップを実行する場合は、SSH ログインコマンドをコピーしていつでも参照できるようにしておきます。Jupyter ウェブページに接続する際に、このコマンドのバリエーションを使用します。

次のステップ

ステップ 3: DLAMI インスタンスの保護 (p. 22)

ステップ 3: DLAMI インスタンスの保護オペレーティングシステムやその他のインストールされているソフトウェアは、パッチや更新が利用可能になり次第適用して、常に最新の状態を保ってください。

Amazon Linux または Ubuntu を使用している場合は、DLAMI にログインしたときに、更新が利用可能であれば通知され、更新の手順が表示されます。Amazon Linux のメンテナンスの詳細については、「インスタンスソフトウェアの更新」を参照してください。Ubuntu インスタンスの場合は、Ubuntu の公式ドキュメントを参照してください。

Windows では、Windows Update でソフトウェアとセキュリティの更新を定期的にチェックします。必要に応じて、更新が自動的に適用されるようにします。

Important

Meltdown および Spectre に関する脆弱性の詳細およびその解決策としてオペレーティングシステムにパッチを適用する方法については、セキュリティ情報 AWS-2018-013 を参照してください。

ステップ 4: DLAMI をテストするDLAMI のバージョンに応じて、さまざまなテストのオプションを利用できます。

• Deep Learning AMI と Conda (p. 5) –Deep Learning AMI と Conda の使用 (p. 29) に移動します。• Deep Learning Base AMI (p. 6) – 目的のフレームワークのインストールに関するドキュメントを参照し

てください。

Jupyter ノートブックの作成、チュートリアルの実行、または Python によるコーディングの開始も可能です。詳細については、「Jupyter ノートブックサーバーの設定 (p. 23)」を参照してください。

クリーンアップDLAMI が不要になった場合は、停止または終了させることによって継続的な料金の発生を避けることができます。インスタンスを停止してもそのまま保持されるため、後で再開できます。設定、ファイル、およびその他の非揮発性情報は Amazon S3 のボリュームに格納されます。インスタンスの停止中は S3 の

22

Page 27: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドJupyter のセットアップ

料金がわずかに課金されますが、停止状態にある間はコンピューティングリソースへの課金は停止されます。再度インスタンスを起動すると、そのボリュームがマウントされ、データを利用できるようになります。インスタンスを終了した場合は、インスタンスは消去され、再度起動することはできません。実際にはデータがまだ S3 に存在するため、それ以降の変更を防止するためには、ボリュームも削除する必要があります。手順については、「Linux インスタンス用 Amazon EC2 ユーザーガイド」の「インスタンスの削除」を参照してください。

Jupyter ノートブックサーバーの設定Jupyter ノートブックは、ウェブブラウザを使用してノートブックドキュメントを管理できるウェブアプリケーションです。

Jupyter ノートブックを設定するには、次の作業を実行します。

• Amazon EC2 インスタンスで Jupyter ノートブックサーバーを設定する。• Jupyter ノートブックサーバーに接続できるようにクライアントを設定する。Windows クライアン

ト、macOS クライアント、および Linux クライアントの設定手順が用意されています。• Jupyter ノートブックサーバーにログインして、セットアップをテストする。

Jupyter ノートブックの詳細については、Jupyter を参照してください。

トピック• Jupyter サーバーの保護 (p. 23)• Jupyter ノートブックサーバーの起動 (p. 24)• Jupyter サーバーに接続するためのクライアントの設定 (p. 24)• Jupyter ノートブックサーバーへのログインによるテスト (p. 25)

Jupyter サーバーの保護ここでは、SSL およびカスタムパスワードで Jupyter を設定します。

Amazon EC2 インスタンスに接続した後、次の手順を実行します。

Jupyter サーバーの設定

1. Jupyter にはパスワードユーティリティが用意されています。次のコマンドを実行して、プロンプトに任意のパスワードを入力します。

$ jupyter notebook password

出力は次のようになります。

Enter password:Verify password:[NotebookPasswordApp] Wrote hashed password to /home/ubuntu/.jupyter/jupyter_notebook_config.json

2. 自己署名 SSL 証明書を作成します。プロンプトに従って、該当するローカリティを入力します。この回答は証明書の機能に影響を及ぼしません。

$ cd ~$ mkdir ssl

23

Page 28: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドサーバーの起動

$ cd ssl$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout mykey.key -out mycert.pem

Note

サードパーティが署名した定期的 SSL 証明書を作成して、ブラウザでセキュリティ警告が発生しないようにすることもできます。このプロセスは非常に複雑になります。詳細については、Jupyter ドキュメントを参照してください。

次のステップ

Jupyter ノートブックサーバーの起動 (p. 24)

Jupyter ノートブックサーバーの起動これで、インスタンスにログインし、前のステップで作成した SSL 証明書を使用して次のコマンドを実行して Jupyter サーバーを開始できます。

$ jupyter notebook --certfile=~/ssl/mycert.pem --keyfile ~/ssl/mykey.key

サーバーが起動していれば、クライアントコンピュータから SSH トンネルを通じてサーバーに接続できます。サーバーを実行すると、サーバーが実行中であることを確認するメッセージが Jupyter から出力されます。トンネルを作成するまでは機能しないため、このとき表示される localhost URL 経由でサーバーにアクセスできるという吹き出しは無視してください。

Note

Jupyter ウェブインターフェイスを使用してフレームワークを切り替えるとき、Jupyter は自動的に環境に切り替えを処理します。これについての詳細は、「Jupyter で環境を切り替える (p. 34)」を参照してください。

次のステップ

Jupyter サーバーに接続するためのクライアントの設定 (p. 24)

Jupyter サーバーに接続するためのクライアントの設定Jupyter ノートブックサーバーに接続するようにクライアントを設定した後、サーバー上のワークスペース内にノートブックを作成して、そのノートブックにアクセスしたり、サーバー上でディープラーニングコードを実行したりできます。

設定情報については、次のいずれかのリンクを選択してください。

トピック• Windows クライアントの設定 (p. 24)• Linux または macOS クライアントの設定 (p. 25)

Windows クライアントの設定準備次の情報が手元に揃っていることを確認します。これらの情報は、SSH トンネルをセットアップする際に必要です。

24

Page 29: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドJupyter ノートブックサーバーへのログイン

• Amazon EC2 インスタンスのパブリック DNS 名。パブリック DNS 名は、EC2 コンソールで確認できます。

• プライベートキーファイルのキーペア。キーペアへのアクセスの詳細については、Linux インスタンス用 Amazon EC2 Linux ユーザガイドの「Amazon EC2 キーペア」を参照してください。

Windows クライアントから Jupyter Norebooks を使用する

Windows クライアントから Amazon EC2 インスタンスに接続するときに、このガイドを参照してください。

1. インスタンスへの接続に関するトラブルシューティング2. PuTTY を使用した Windows から Linux インスタンスへの接続

実行中の Jupyter サーバーにトンネルを作成するとき、Windows クライアントに Git Bash をインストールして、Linux/macOS クライアントの説明に従うアプローチが推奨されます。ただし、ポートがマッピングされた SSH トンネルを開くためにどのアプローチを使用することもできます。詳細については、Jupyterのドキュメントを参照してください。

次のステップ

Linux または macOS クライアントの設定 (p. 25)

Linux または macOS クライアントの設定1. ターミナルを開きます。2. ローカルポート 8888 に対するすべてのリクエストをリモート Amazon EC2 インスタンスのポート

8888 に転送するために、次のコマンドを実行します。Amazon EC2 インスタンスにアクセスするキーの場所と Amazon EC2 インスタンスのパブリック DNS 名を置き換えて、コマンドを更新します。Amazon Linux AMI の場合、ユーザー名は ubuntu の代わりに ec2-user であることに注意してください。

$ ssh -i ~/mykeypair.pem -N -f -L 8888:localhost:8888 ubuntu@ec2-###-##-##-###.compute-1.amazonaws.com

このコマンドを実行すると、Jupyter ノートブックサーバーを実行しているリモート Amazon EC2 インスタンスとクライアントの間にトンネルが開通します。

次のステップ

Jupyter ノートブックサーバーへのログインによるテスト (p. 25)

Jupyter ノートブックサーバーへのログインによるテストJupyter ノートブックサーバーにログインする準備ができました。

次のステップでは、ブラウザを使用してサーバーへの接続をテストします。

1. ブラウザのアドレスバーに次の URL を入力するか、次のリンクをクリックしてください。https://localhost:8888

2. 自己署名 SSL 証明書を使用すると、ブラウザは警告を表示し、このウェブサイトの閲覧を続行しないように求められます。

25

Page 30: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドJupyter ノートブックサーバーへのログイン

この設定は自身が行ったものであるため、安全に続行できます。ブラウザによっては、「高度な設定」、「詳細の表示」などのボタンが表示されることがあります。

26

Page 31: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドJupyter ノートブックサーバーへのログイン

27

Page 32: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドJupyter ノートブックサーバーへのログイン

これをクリックして「localhost に進む」リンクをクリックします。接続に成功すると、Jupyter ノートブックサーバーのウェブページが表示されます。この時点で、前に設定したパスワードを入力するように求められます。

これで、DLAMI 上で実行中の Jupyter ノートブックサーバーにアクセスできるようになりました。新しいノートブックを作成することも、用意されている チュートリアル (p. 35) を実行することもできます。

28

Page 33: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドConda DLAMI

DLAMI を使用トピック

• Deep Learning AMI と Conda の使用 (p. 29)• Deep Learning Base AMI の使用 (p. 32)• Jupyter ノートブックチュートリアルを実行する (p. 33)• チュートリアル (p. 35)

以降のセクションでは、Deep Learning AMI と Conda を使用して環境を切り替える方法、各フレームワークからサンプルコードを実行する方法、および Jupyter を実行して、さまざまなノートブックチュートリアルを試す方法について説明します。

Deep Learning AMI と Conda の使用トピック

• Deep Learning AMI と Conda の概要 (p. 29)• ステップ 1: DLAMI へのログイン (p. 29)• ステップ 2: MXNet Python 3 環境の起動 (p. 31)• ステップ 3: 一部の MXNet コードのテスト (p. 31)• ステップ 4: TensorFlow 環境への切り替え (p. 32)• 環境を削除する (p. 32)

Deep Learning AMI と Conda の概要Conda は、Windows、macOS、および Linux で稼働するオープンソースのパッケージ管理システムおよび環境管理システムです。Conda では、パッケージとその依存関係を迅速にインストール、実行、および更新できます。また、ローカルコンピュータ上で簡単に環境を作成、保存、ロードし、環境を切り替えることができます。

Deep Learning AMI と Conda は、深層学習環境を簡単に切り替えられるように設定されています。次に示す手順では、conda での基本的なコマンドを説明します。これらのコマンドは、フレームワークの基本インポートが機能していることや、フレームワークでいくつかの簡単な操作を実行できることの確認にも役立ちます。その後、DLAMI で提供されているより詳細なチュートリアルや、各フレームワークのプロジェクトサイトにあるフレームワークの例に進むことができます。

ステップ 1: DLAMI へのログインサーバーにログインすると、サーバーの「その日のメッセージ (MOTD)」が表示され、さまざまなディープラーニングフレームワークを切り替えるための各種の Conda コマンドが示されます。以下に MOTD の例を示します。新しいバージョンの DLAMI がリリースされる事により、場合によっては特定の MOTD が異なる場合があります。

Note

v28 リリース以降、CNTK、Caffe、Caffe2、および Theano Conda 環境は AWS Deep LearningAMI に含まれなくなりました。これらの環境を含む AWS Deep Learning AMI の以前のリリースは引き続き利用できます。ただし、これらのフレームワークのオープンソースコミュニティによってセキュリティ修正が公開されている場合にのみ、AWS はこれらの環境の更新を提供します。

29

Page 34: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドステップ 1: DLAMI へのログイン

============================================================================= __| __|_ ) _| ( / Deep Learning AMI (Ubuntu 16.04) Version 26.0 ___|\___|___|=============================================================================

Welcome to Ubuntu 16.04.6 LTS (GNU/Linux 4.4.0-1098-aws x86_64v)

Please use one of the following commands to start the required environment with the framework of your choice:for MXNet(+Keras2) with Python3 (CUDA 10.1 and Intel MKL-DNN) ____________________________________ source activate mxnet_p36for MXNet(+Keras2) with Python2 (CUDA 10.1 and Intel MKL-DNN) ____________________________________ source activate mxnet_p27for MXNet(+Amazon Elastic Inference) with Python3 _______________________________________ source activate amazonei_mxnet_p36for MXNet(+Amazon Elastic Inference) with Python2 _______________________________________ source activate amazonei_mxnet_p27for MXNet(+AWS Neuron) with Python3 ___________________________________________________ source activate aws_neuron_mxnet_p36for TensorFlow(+Keras2) with Python3 (CUDA 10.0 and Intel MKL-DNN) __________________________ source activate tensorflow_p36for TensorFlow(+Keras2) with Python2 (CUDA 10.0 and Intel MKL-DNN) __________________________ source activate tensorflow_p27for TensorFlow 2(+Keras2) with Python3 (CUDA 10.0 and Intel MKL-DNN) _______________________ source activate tensorflow2_p36for TensorFlow 2(+Keras2) with Python2 (CUDA 10.0 and Intel MKL-DNN) _______________________ source activate tensorflow2_p27for Tensorflow(+Amazon Elastic Inference) with Python2 _____________________________ source activate amazonei_tensorflow_p27for Tensorflow(+Amazon Elastic Inference) with Python3 _____________________________ source activate amazonei_tensorflow_p36for Tensorflow(+AWS Neuron) with Python3 _________________________________________ source activate aws_neuron_tensorflow_p36for Theano(+Keras2) with Python3 (CUDA 9.0) _____________________________________________________ source activate theano_p36for Theano(+Keras2) with Python2 (CUDA 9.0) _____________________________________________________ source activate theano_p27for PyTorch with Python3 (CUDA 10.1 and Intel MKL) _____________________________________________ source activate pytorch_p36for PyTorch with Python2 (CUDA 10.1 and Intel MKL) _____________________________________________ source activate pytorch_p27for CNTK(+Keras2) with Python3 (CUDA 9.0 and Intel MKL-DNN) _______________________________________ source activate cntk_p36for CNTK(+Keras2) with Python2 (CUDA 9.0 and Intel MKL-DNN) _______________________________________ source activate cntk_p27for Caffe2 with Python2 (CUDA 9.0) ______________________________________________________________ source activate caffe2_p27for Caffe with Python2 (CUDA 8.0) ________________________________________________________________ source activate caffe_p27for Caffe with Python3 (CUDA 8.0) ________________________________________________________________ source activate caffe_p35for Chainer with Python2 (CUDA 10.0 and Intel iDeep) ___________________________________________ source activate chainer_p27for Chainer with Python3 (CUDA 10.0 and Intel iDeep) ___________________________________________ source activate chainer_p36for base Python2 (CUDA 10.0) _______________________________________________________________________ source activate python2for base Python3 (CUDA 10.0) _______________________________________________________________________ source activate python3

各 Conda コマンドのパターンを次に示します。

30

Page 35: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドステップ 2: MXNet Python 3 環境の起動

source activate framework_python-version

たとえば、for MXNet(+Keras1) with Python3 (CUDA 9) _____________________ sourceactivate mxnet_p36 と表示された場合は、環境に MXNet、Keras 1、Python 3、および CUDA 9 が存在しています。また、この環境を有効化するには、次のコマンドを使用します。

$ source activate mxnet_p36

別のバリエーションとして、次のものがあります。

$ source activate mxnet_p27

これは、環境に MXNet と Python 2 (Keras 1 と CUDA 9 を使用) が存在することを示します。

ステップ 2: MXNet Python 3 環境の起動最初に MXNet をテストし、MXNet がいかに簡単であるかを概説します。

Note

初めて Conda 環境を起動する際には、ロードするまで辛抱して待機してください。DeepLearning AMI と Conda は、EC2 インスタンスにフレームワークの最初のアクティベーションから最も最適化されたフレームワークのバージョンを自動的にインストールします。継続する遅延はありません。

• Python 3 用の MXNet 仮想環境を有効化します。

$ source activate mxnet_p36

これにより、Python 3 を使用する MXNet 環境が有効化されます。または、mxnet_p27 を有効化して、Python 2 を使用する環境を有効にすることもできます。

ステップ 3: 一部の MXNet コードのテストインストール環境をテストするには、NDArray API を使用して配列を作成および出力する MXNet コードを Python で作成します。詳細については、NDArray API を参照してください。

1. iPython ターミナルを起動します。

(mxnet_p36)$ ipython

2. MXNet をインポートします。

import mxnet as mx

サードパーティー製パッケージに関する警告メッセージが表示される場合があります。この署名は無視できます。

3. NDArray のインスタンスである 5x5 行列を作成します。各要素は 0 に初期設定します。配列を出力します。

mx.ndarray.zeros((5,5)).asnumpy()

結果を確認します。

31

Page 36: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドステップ 4: TensorFlow 環境への切り替え

array([[ 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0.]], dtype=float32)

MXNet のその他の例については、MXNet チュートリアルセクションを参照してください。

ステップ 4: TensorFlow 環境への切り替えここで TensorFlow に切り替えます。 iPython コンソールをまだ終了していない場合は、quit() を使用して、環境を切り替える準備を整えます。

1. Python 3 用の TensorFlow 仮想環境を有効化します。

$ source activate tensorflow_p36

2. iPython ターミナルを起動します。

(tensorflow_36)$ ipython

3. クイック TensorFlow プログラムを実行します。

import tensorflow as tfhello = tf.constant('Hello, TensorFlow!')sess = tf.Session()print(sess.run(hello))

"Hello, Tensorflow!" が表示されます。 以上で、2 つの異なるディープラーニングフレームワークのテストが完了し、フレームワークを切り替える方法について確認しました。

次回の予定

Jupyter ノートブックチュートリアルを実行する (p. 33)

環境を削除するDLAMI にスペースが足りない場合、使用していない Conda パッケージをアンインストールすることを選択できます。

conda env listconda env remove –-name <env_name>

Deep Learning Base AMI の使用Deep Learning Base AMI の使用Base AMI には、独自でカスタマイズしたディープラーニング環境をデプロイするための GPU ドライバの基盤プラットフォームとアクセラレーションライブラリが含まれています。AMI はデフォルトで NVIDIA

32

Page 37: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドCUDA のバージョンの設定

CUDA 10 環境に設定されています。ただし、CUDA 9 または CUDA 8 環境に切り替えることもできます。これを行う方法については、次の手順を参照してください。

CUDA のバージョンの設定次の Bash コマンドを使用して、特定の CUDA バージョンを選択して検証できます。

• CUDA 10.2:

$ sudo rm /usr/local/cudasudo ln -s /usr/local/cuda-10.2 /usr/local/cuda

• CUDA 10.1:

$ sudo rm /usr/local/cudasudo ln -s /usr/local/cuda-10.1 /usr/local/cuda

• CUDA 10:

$ sudo rm /usr/local/cudasudo ln -s /usr/local/cuda-10.0 /usr/local/cuda

• CUDA 9.2:

$ sudo rm /usr/local/cudasudo ln -s /usr/local/cuda-9.2 /usr/local/cuda

• CUDA 9:

$ sudo rm /usr/local/cudasudo ln -s /usr/local/cuda-9.0 /usr/local/cuda

• CUDA 8:

$ sudo rm /usr/local/cudasudo ln -s /usr/local/cuda-8.0 /usr/local/cuda

Tip

次に、NVIDIA の deviceQuery プログラムを実行して、CUDA バージョンを検証できます。

$ cd /usr/local/cuda/samples/1_Utilities/deviceQuerysudo make./deviceQuery

Jupyter ノートブックチュートリアルを実行する各深層学習プロジェクトにはチュートリアルと例が付属しています。ほとんどの場合、それらはすべてのDLAMI で実行することができます。Deep Learning AMI と Conda (p. 5) を選択した場合は、厳選されたチュートリアルが既にセットアップされ、すぐに試すことができるという利点があります。

Important

DLAMI にインストールされている Jupyter ノートブックチュートリアルを実行するには、「Jupyter ノートブックサーバーの設定 (p. 23)」の内容を実行する必要があります。

33

Page 38: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドインストールされたチュートリアルを操作する

Jupyter サーバー実行されたら、ウェブブラウザからチュートリアルを実行できます。Deep Learning AMIと Conda を実行している場合や、Python 環境をセットアップしている場合は、Jupyter ノートブックのインターフェイスから Python カーネルを切り替えることができます。フレームワーク固有のチュートリアルを実行する前に、適切なカーネルを選択してください。これに関するその他の例が Deep Learning AMIと Conda のユーザー向けに提供されています。

Note

多くのチュートリアルでは追加の Python モジュールが必要になりますが、それらが DLAMI にセットアップされていない可能性があります。"xyz module not found" などのエラーが発生した場合は、DLAMI にログインし、上記を参考に環境をアクティブ化して、必要なモジュールをインストールしてください。

Tip

ディープラーニングのチュートリアルや例の多くは、1 つ以上の GPU を必要とします。GPU を使用しないインスタンスタイプの場合、例のコードを実行するために、コードを一部変更することが必要になる可能性があります。

インストールされたチュートリアルを操作するJupyter サーバーにログインしてチュートリアルディレクトリが表示されると (Deep Learning AMI とConda 上のみ)、各フレームワークの名前別に整理されたチュートリアルのフォルダを確認できます。フレームワークのリストが表示されない場合は、現在の DLAMI で、そのフレームワークのチュートリアルが提供されていないことを示しています。フレームワークの名前をクリックし、リストされているチュートリアルを確認して、チュートリアルをクリックして起動します。

Deep Learning AMI と Conda でノートブックを初めて実行すると、使用する環境を指定するよう求められます。選択のためのリストがプロンプトで表示されます。それぞれの環境は、以下のパターンに従って命名されています。

Environment (conda_framework_python-version)

たとえば、"Environment (conda_mxnet_p36)" と表示された場合は、環境に MXNet と Python 3 が存在しています。別のバリエーションとして "Environment (conda_mxnet_p27)" があります。この場合は環境に MXNet と Python 2 が存在しています。

Tip

アクティブ化される CUDA のバージョンについて不明な点がある場合は、最初に DLAMI にログインする際の MOTD で確認できます。

Jupyter で環境を切り替える別のフレームワークのチュートリアルを試す場合は、現在実行中のカーネルを検証する必要があります。この情報は、Jupyter のインターフェイスの右上、ログアウトボタンの真下に表示されます。開いているノートブックでカーネルを変更するには、Jupyter のメニュー項目を [Kernel]、[Change Kernel] の順にクリックして、実行中のノートブックに適合する環境をクリックします。

カーネルに変更が加わると、これまでに実行したすべての項目の状態が消去されるため、この時点ですべてのセルを再度実行することが必要になります。

Tip

フレームワークの切り替えは、興味深くさまざまな情報も入手できる操作ですが、メモリ不足が発生する可能性があります。エラーが表示されるようになったら、実行中の Jupyter サーバーが表示されているターミナルウィンドウを確認してください。参考になるメッセージやエラー

34

Page 39: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドチュートリアル

ログをここで確認でき、メモリ不足のエラーもここに表示されます。この問題を修正するには、Jupyter サーバーのホームページにアクセスして、バックグラウンドで実行中でメモリを占有していると思われる各チュートリアルで、[Running] タブ、[Shutdown] の順にクリックします。

次回の予定

各フレームワークのその他の例やサンプルコードについては、[次] をクリックするか、「ApacheMXNet (p. 36)」に進んでください。

チュートリアルDeep Learning AMI と Conda のソフトウェアの使用方法のチュートリアルを以下に示します。

トピック• 10 分間チュートリアル (p. 35)• フレームワークのアクティブ化 (p. 35)• デバッグおよび視覚化 (p. 49)• 分散トレーニング (p. 53)• Elastic Fabric Adapter (p. 70)• GPU のモニタリングおよび最適化 (p. 78)• DLAMI による AWS Inferentia チップ (p. 84)• 推論 (p. 101)• ONNX でフレームワークを使用する (p. 105)• モデル提供 (p. 114)

10 分間チュートリアル• AWS Deep Learning AMI を起動します (10 分以内)• Amazon EC2 で AWS Deep Learning Containers を使用して深層学習をトレーニングする (10 分)

フレームワークのアクティブ化以下に示しているのは、Deep Learning AMI と Conda にインストールされている深層学習フレームワークです。フレームワークをクリックすると、そのフレームワークをアクティブ化する方法を参照できます。

トピック• Apache MXNet (p. 36)• Caffe2 (p. 37)• Chainer (p. 38)• CNTK (p. 39)• Keras (p. 41)• PyTorch (p. 42)• TensorFlow (p. 43)• TensorFlow 2 (p. 45)• TensorFlow (Horovod を使用) (p. 46)

35

Page 40: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドフレームワークのアクティブ化

• Horovod 付き TensorFlow 2 (p. 48)• Theano (p. 49)

Apache MXNetMXNet の有効化

このチュートリアルでは、Deep Learning AMI と Conda (DLAMI on Conda) を実行しているインスタンスで MXNet を有効化し、MXNet プログラムを実行する方法を示します。

フレームワークの安定版 Conda パッケージがリリースされると、DLAMI でテストされ事前にインストールされます。テストされていない最新のナイトリービルドを実行する場合は、手動で「MXNet のナイトリービルドのインストール (実験的) (p. 36)」ことができます。

DLAMI with Conda で MXNet を実行するには

1. フレームワークを有効にするには、DLAMI with Conda の Amazon Elastic Compute Cloud (AmazonEC2) インスタンスを開きます。• Python 3 ベースの MXNet と Keras 2 を CUDA 9.0 と MKL-DNN で使用する場合は、以下のコマ

ンドを実行します。

$ source activate mxnet_p36

• Python 2 ベースの MXNet と Keras 2 を CUDA 9.0 と MKL-DNN で使用する場合は、以下のコマンドを実行します。

$ source activate mxnet_p27

2. iPython ターミナルを起動します。

(mxnet_p36)$ ipython

3. クイック MXNet プログラムを実行します。NDArray のインスタンスである 5x5 行列を作成します。各要素は 0 に初期設定します。配列を出力します。

import mxnet as mxmx.ndarray.zeros((5,5)).asnumpy()

4. 結果を確認します。

array([[ 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0.]], dtype=float32)

MXNet のナイトリービルドのインストール (実験的)

最新の MXNet ビルドを Deep Learning AMI と Conda の MXNet Conda 環境のいずれかまたは両方にインストールできます。

ナイトリービルドから MXNet をインストールするには

1. • Python 3 MXNet 環境では、以下のコマンドを実行します。

36

Page 41: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドフレームワークのアクティブ化

$ source activate mxnet_p36

• Python 2 MXNet 環境では、以下のコマンドを実行します。

$ source activate mxnet_p27

2. 現在インストールされている MXNet を削除します。

Note

残りの手順は、mxnet_p36 環境を使用していることを前提としています。

(mxnet_p36)$ pip uninstall mxnet-cu90mkl

3. MXNet の最新のナイトリービルドをインストールします。

(mxnet_p36)$ pip install --pre mxnet-cu90mkl

4. 最新のナイトリービルドが正常にインストールされたことを確認するには、IPython ターミナルを起動して MXNet のバージョンを確認します。

(mxnet_p36)$ ipython

import mxnetprint (mxnet.__version__)

MXNet の最新の安定したバージョンが表示されます。

他のチュートリアル

その他のチュートリアルは、DLAMI のホームディレクトリの Deep Learning AMI と Conda tutorials フォルダにあります。

1. ResNet 50 モデルでの推論に Apache MXNet を使用する (p. 103)2. ONNX モデルでの推論に Apache MXNet を使用する (p. 102)3. Apache MXNet (MMS) のモデルサーバー (p. 114)

その他のチュートリアルと例については、フレームワークの公式 Python ドキュメント Python API forMXNet、または Apache MXNet のウェブサイトを参照してください。

Caffe2Note

v28 リリース以降、CNTK、Caffe、Caffe2、および Theano Conda 環境は AWS Deep LearningAMI に含まれなくなりました。これらの環境を含む AWS Deep Learning AMI の以前のリリースは引き続き利用できます。ただし、これらのフレームワークのオープンソースコミュニティによってセキュリティ修正が公開されている場合にのみ、AWS はこれらの環境の更新を提供します。

Caffe2 チュートリアル

フレームワークをアクティブ化するには、使用する Deep Learning AMI と Conda に関する以下の手順に従います。

37

Page 42: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドフレームワークのアクティブ化

Python 2 に CUDA 9 と cuDNN 7 を組み合わせたオプションのみが存在します。

$ source activate caffe2_p27

iPython ターミナルを起動します。

(caffe2_p27)$ ipython

クイック Caffe2 プログラムを実行します。

from caffe2.python import workspace, model_helperimport numpy as np# Create random tensor of three dimensionsx = np.random.rand(4, 3, 2)print(x)print(x.shape)workspace.FeedBlob("my_x", x)x2 = workspace.FetchBlob("my_x")print(x2)

最初に numpy ランダム配列が出力され、次に Caffe2 blob にロードされた配列が表示されます。それらはロード後は同じであることに注意してください。

他のチュートリアル

他のチュートリアルおよび例については、フレームワークの公式 Python ドキュメントである Python APIfor Caffe2 と Caffe2 のウェブサイトを参照してください。

ChainerChainer は、簡単で直観的に複雑なニューラルネットワークアーキテクチャを記述するための柔軟性のある Python ベースのフレームワークです。Chainer は、トレーニングにおけるマルチ GPU インスタンスの使用を簡単にします。また、Chainer は自動的に結果、グラフの損失および正確性をログに記録し、計算グラフ でニューラルネットワークを視覚化するための出力を実行します。これは Deep Learning AMI とConda (Conda の DLAMI) に含まれています。

Chainer の有効化

1. Deep Learning AMI と Conda を実行中のインスタンスに接続します。インスタンスを選択または接続する方法については、「the section called “インスタンスの選択” (p. 17)」または「Amazon EC2 ドキュメント」を参照してください。

2. • Python 3 Chainer 環境を有効化します。

$ source activate chainer_p36

• Python 2 Chainer 環境を有効化します。

$ source activate chainer_p27

3. iPython ターミナルを起動します。

(chainer_p36)$ ipython

4. Chainer のインポートをテストして、正常に機能することを確認します。

38

Page 43: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドフレームワークのアクティブ化

import chainer

いくつかの警告メッセージが表示されることがありますが、エラーではありません。

詳細

• 「Chainer (p. 53)」のチュートリアルをお試しください。• 先にダウンロードしたソース内の Chainer の例のフォルダには、その他の例が含まれています。実行

して、そのパフォーマンスを試してください。• Chainer についての詳細は、「Chainer ドキュメントウェブサイト」を参照してください。

CNTKNote

v28 リリース以降、CNTK、Caffe、Caffe2、および Theano Conda 環境は AWS Deep LearningAMI に含まれなくなりました。これらの環境を含む AWS Deep Learning AMI の以前のリリースは引き続き利用できます。ただし、これらのフレームワークのオープンソースコミュニティによってセキュリティ修正が公開されている場合にのみ、AWS はこれらの環境の更新を提供します。

CNTK の有効化

このチュートリアルでは、Deep Learning AMI と Conda (DLAMI on Conda) を実行しているインスタンスで CNTK を有効化し、CNTK プログラムを実行する方法を示します。

フレームワークの安定版 Conda パッケージがリリースされると、DLAMI でテストされ事前にインストールされます。テストされていない最新のナイトリービルドを実行する場合は、手動で「CNTK ナイトリービルドのインストール(試験段階) (p. 40)」ことができます。

DLAMI with Conda で CNTK を実行するには

1. CNTK を有効化するには、DLAMI with Conda の Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを開きます。• cuDNN 7 の CUDA 9 で Python 3 を使用している場合:

$ source activate cntk_p36

• cuDNN 7 の CUDA 9 で Python 2 を使用している場合:

$ source activate cntk_p27

2. iPython ターミナルを起動します。

(cntk_p36)$ ipython

3. • CPU インスタンスがある場合は、このクイック CNTK プログラムを実行します。

import cntk as CC.__version__c = C.constant(3, shape=(2,3))c.asarray()

39

Page 44: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドフレームワークのアクティブ化

CNTK のバージョンが表示され、次に 3 の 2x3 配列の出力が表示されます。• GPU インスタンスを使用している場合は、次のコード例でテストすることができます。True の

結果は、CNTK が GPU にアクセスできることを示しています。

from cntk.device import try_set_default_device, gputry_set_default_device(gpu(0))

CNTK ナイトリービルドのインストール(試験段階)最新の CNTK ビルドを Deep Learning AMI と Conda の CNTK Conda 環境のいずれかまたは両方にインストールできます。

ナイトリービルドから CNTK をインストールするには

1. • Python 3 ベースの CNTK と Keras 2 を CUDA 9.0 と MKL-DNN で使用する場合は、以下のコマンドを実行します。

$ source activate cntk_p36

• Python 2 ベースの CNTK と Keras 2 を CUDA 9.0 と MKL-DNN で使用する場合は、以下のコマンドを実行します。

$ source activate cntk_p27

2. 残りの手順は、cntk_p36 環境を使用していることを前提としています。現在インストールされている CNTK を削除します。

(cntk_p36)$ pip uninstall cntk

3. CNTK ナイトリービルドをインストールするには、まず、インストールするバージョンを CNTK ナイトリーウェブサイトから見つける必要があります。

4. • (GPU インスタンスのオプション) - ナイトリービルドをインストールするには、次を使用して必要なビルドを置き換えることができます。

(cntk_p36)$ pip install https://cntk.ai/PythonWheel/GPU/latest-nightly-build

前のコマンドの URL を現在の Python 環境の GPU バージョンに置き換えます。• (CPU インスタンスのオプション) - ナイトリービルドをインストールするには、次を使用して必

要なビルドを置き換えることができます。

(cntk_p36)$ pip install https://cntk.ai/PythonWheel/CPU-Only/latest-nightly-build

前のコマンドの URL を現在の Python 環境の CPU バージョンに置き換えます。5. 最新のナイトリービルドが正常にインストールされたことを確認するには、IPython ターミナルを起

動して CNTK のバージョンを確認します。

(cntk_p36)$ ipython

import cntkprint (cntk.__version__)

出力は 2.6-rc0.dev20181015 のように表示されます。

40

Page 45: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドフレームワークのアクティブ化

他のチュートリアル

その他のチュートリアルと例については、フレームワークの公式 Python ドキュメント Python API forCNTK、または CNTK のウェブサイトを参照してください。

KerasKeras チュートリアル

1. フレームワークをアクティブ化するには、the section called “Conda DLAMI” (p. 29)CLI で次のコマンドを使用します。• Keras 2 (cuDNN 7 の CUDA 9 で Python 3 を使用した MXNet バックエンド) の場合:

$ source activate mxnet_p36

• Keras 2 (cuDNN 7 の CUDA 9 で Python 2 を使用した MXNet バックエンド) の場合:

$ source activate mxnet_p27

• Keras 2 (cuDNN 7 の CUDA 9 で Python 3 を使用した TensorFlow バックエンド) の場合:

$ source activate tensorflow_p36

• Keras 2 (cuDNN 7 の CUDA 9 で Python 2 を使用した TensorFlow バックエンド) の場合:

$ source activate tensorflow_p27

2. Keras のインポートをテストして有効化されているバックエンドを確認するには、次のコマンドを使用します。

$ ipythonimport keras as k

画面に次のように表示されます。

Using MXNet backend

Keras が TensorFlow を使用している場合は、次のメッセージが表示されます。

Using TensorFlow backend

Note

エラーが発生した場合、または間違ったバックエンドが使用されている場合は、手動でKeras 設定を更新できます。~/.keras/keras.json ファイルを編集してバックエンド設定を mxnet または tensorflow に変更します。

他のチュートリアル

• MXNet バックエンドで Keras を使用したマルチ GPU チュートリアルについては、「Keras-MXNet マルチ GPU トレーニングチュートリアル (p. 63)」を参照してください。

• MXNet バックエンドを使用する Keras の例は Deep Learning AMI と Conda ~/examples/keras-mxnet ディレクトリにあります。

41

Page 46: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドフレームワークのアクティブ化

• TensorFlow バックエンドを使用する Keras の例は Deep Learning AMI と Conda ~/examples/kerasディレクトリにあります。

• その他のチュートリアルおよび例については、『Keras』のウェブサイトを参照してください。

PyTorchPyTorch の有効化

フレームワークの安定版 Conda パッケージがリリースされると、DLAMI でテストされ事前にインストールされます。テストされていない最新のナイトリービルドを実行する場合は、手動で「PyTorch のナイトリービルド (実験段階) をインストールする (p. 42)」ことができます。

現在インストールされているフレームワークをアクティブ化するには、使用する Deep Learning AMI とConda に関する以下の手順に従います。

Python 3 ベースの PyTorch を CUDA 10 と MKL-DNN で使用する場合は、以下のコマンドを実行します。

$ source activate pytorch_p36

Python 2 ベースの PyTorch を CUDA 10 と MKL-DNN で使用する場合は、以下のコマンドを実行します。

$ source activate pytorch_p27

iPython ターミナルを起動します。

(pytorch_p36)$ ipython

クイック PyTorch プログラムを実行します。

import torchx = torch.rand(5, 3)print(x)print(x.size())y = torch.rand(5, 3)print(torch.add(x, y))

最初のランダムな配列が出力された後、そのサイズが出力され、次に別のランダムな配列が追加で出力されます。

PyTorch のナイトリービルド (実験段階) をインストールする

ナイトリービルドから PyTorch をインストールする方法

最新の PyTorch ビルドを Deep Learning AMI と Conda の PyTorch Conda 環境のいずれかまたは両方にインストールできます。

1. • (Python 3 用オプション) - Python 3 PyTorch 環境を有効化します。

$ source activate pytorch_p36

• (Python 2 用オプション) - Python 2 PyTorch 環境を有効化します。

$ source activate pytorch_p27

42

Page 47: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドフレームワークのアクティブ化

2. 残りの手順は、pytorch_p36 環境を使用していることを前提としています。現在インストールされている PyTorch を削除します。

(pytorch_p36)$ pip uninstall torch

3. • (GPU インスタンス用オプション) - PyTorch と CUDA 10.0 の最新ナイトリービルドをインストールします:

(pytorch_p36)$ pip install torch_nightly -f https://download.pytorch.org/whl/nightly/cu100/torch_nightly.html

• (CPU インスタンス用オプション) - GPU を持たないインスタンスの場合は PyTorch の最新ナイトリービルドをインストールします:

(pytorch_p36)$ pip install torch_nightly -f https://download.pytorch.org/whl/nightly/cpu/torch_nightly.html

4. 最新のナイトリービルドが正常にインストールされたことを確認するには、IPython ターミナルを起動して PyTorch のバージョンを確認します。

(pytorch_p36)$ ipython

import torchprint (torch.__version__)

出力は 1.0.0.dev20180922 のように表示されます。5. PyTorch ナイトリービルドが MNIST のサンプルで正常に機能することを確認するには、PyTorch の

サンプルリポジトリからテストスクリプトを実行します。

(pytorch_p36)$ cd ~(pytorch_p36)$ git clone https://github.com/pytorch/examples.git pytorch_examples(pytorch_p36)$ cd pytorch_examples/mnist(pytorch_p36)$ python main.py || exit 1

他のチュートリアル

他のチュートリアルは、DLAMI のホームディレクトリの「Deep Learning AMI と Conda チュートリアル」フォルダにあります。他のチュートリアルおよび例については、フレームワークの公式ドキュメントである「PyTorch ドキュメント」と「PyTorch」のウェブサイトを参照してください。

• PyTorch to ONNX to MXNet チュートリアル (p. 112)• PyTorch to ONNX to CNTK チュートリアル (p. 110)

TensorFlowTensorFlow のアクティブ化

このチュートリアルでは、Deep Learning AMI と Conda (Conda の DLAMI) を実行するインスタンス上でTensorFlow を有効化して、TensorFlow プログラムを実行する方法を説明します。

フレームワークの安定版 Conda パッケージがリリースされると、DLAMI でテストされ事前にインストールされます。テストされていない最新のナイトリービルドを実行する場合は、手動で「TensorFlow のナイトリービルドをインストールする (実験的) (p. 44)」ことができます。

43

Page 48: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドフレームワークのアクティブ化

Conda の DLAMI 上で TensorFlow を実行するには

1. TensorFlow を有効化するには、Conda で DLAMI の Amazon Elastic Compute Cloud (Amazon EC2)インスタンスを開きます。• Python 3 ベースの TensorFlow および Keras 2 を CUDA 9.0 および MKL-DNN で使用する場合

は、以下のコマンドを実行します。

$ source activate tensorflow_p36

• Python 2 ベースの TensorFlow および Keras 2 を CUDA 9.0 および MKL-DNN で使用する場合は、以下のコマンドを実行します。

$ source activate tensorflow_p27

2. iPython ターミナルを起動します。

(tensorflow_p36)$ ipython

3. TensorFlow プログラムを実行して、正常に作動していることを確認します。

import tensorflow as tfhello = tf.constant('Hello, TensorFlow!')sess = tf.Session()print(sess.run(hello))

Hello, TensorFlow! が画面に表示される必要があります。

TensorFlow のナイトリービルドをインストールする (実験的)

Deep Learning AMI と Conda の TensorFlow Conda 環境のいずれかまたは両方に最新の TensorFlow ビルドをインストールできます。

ナイトリービルドから TensorFlow をインストールするには

1. • Python 3 TensorFlow 環境では、以下のコマンドを実行します。

$ source activate tensorflow_p36

• Python 2 TensorFlow 環境では、以下のコマンドを実行します。

$ source activate tensorflow_p27

2. 現在インストールされている TensorFlow を削除します。

Note

残りのステップは、tensorflow_p36 環境を使用していることを前提としています。

(tensorflow_p36)$ pip uninstall tensorflow

3. TensorFlow の最新のナイトリービルドをインストールします。

(tensorflow_p36)$ pip install tf-nightly

44

Page 49: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドフレームワークのアクティブ化

4. 最新のナイトリービルドが正常にインストールされたことを確認するには、IPython ターミナルを起動して TensorFlow のバージョンを確認します。

(tensorflow_p36)$ ipython

import tensorflowprint (tensorflow.__version__)

出力は 1.12.0-dev20181012 のように表示されます。

他のチュートリアルTensorFlow (Horovod を使用) (p. 63)

TensorBoard (p. 51)

TensorFlow Serving (p. 116)

チュートリアルについては、DLAMI のホームディレクトリで Deep Learning AMI # Condatutorials というフォルダを参照します。

その他のチュートリアルや例については、TensorFlow Python API の TensorFlow ドキュメントを参照するか、TensorFlow ウェブサイトを参照してください。

TensorFlow 2このチュートリアルでは、Deep Learning AMI と Conda (Conda の DLAMI)を実行するインスタンス上で TensorFlow 2 を有効化して、TensorFlow 2 プログラムを実行する方法を説明します。

フレームワークの安定版 Conda パッケージがリリースされると、DLAMI でテストされ事前にインストールされます。テストされていない最新のナイトリービルドを実行する場合は、手動で「TensorFlow 2 のナイトリービルドをインストールする(実験的) (p. 46)」ことができます。

TensorFlow 2 のアクティブ化Conda の DLAMI 上で TensorFlow を実行するには

1. TensorFlow 2 を有効化するには、Conda で DLAMI の Amazon Elastic Compute Cloud (Amazon EC2)インスタンスを開きます。• Python 3 ベースの TensorFlow 2 および Keras 2 を CUDA 10.0 および MKL-DNN で使用する場合

は、以下のコマンドを実行します。

$ source activate tensorflow2_p36

• Python 2 ベースの TensorFlow 2 および Keras 2 を CUDA 10.0 および MKL-DNN で使用する場合は、以下のコマンドを実行します。

$ source activate tensorflow2_p27

2. iPython ターミナルを起動します。

(tensorflow2_p36)$ ipython

3. TensorFlow 2 プログラムを実行して、正常に作動していることを確認します。

45

Page 50: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドフレームワークのアクティブ化

import tensorflow as tfhello = tf.constant('Hello, TensorFlow!')tf.print(hello)

Hello, TensorFlow! が画面に表示される必要があります。

TensorFlow 2 のナイトリービルドをインストールする(実験的)Deep Learning AMI と Conda の TensorFlow 2 Conda 環境のいずれかまたは両方に最新の TensorFlow 2ビルドをインストールできます。

ナイトリービルドから TensorFlow をインストールするには

1. • Python 3 TensorFlow 2 環境では、以下のコマンドを実行します。

$ source activate tensorflow2_p36

• Python 2 TensorFlow 2 環境では、以下のコマンドを実行します。

$ source activate tensorflow2_p27

2. 現在インストールされている TensorFlow を削除します。Note

残りのステップは、tensorflow2_p36 環境を使用していることを前提としています。

(tensorflow2_p36)$ pip uninstall tensorflow

3. TensorFlow の最新のナイトリービルドをインストールします。

(tensorflow2_p36)$ pip install tf-nightly

4. 最新のナイトリービルドが正常にインストールされたことを確認するには、IPython ターミナルを起動して TensorFlow のバージョンを確認します。

(tensorflow2_p36)$ ipython

import tensorflowprint (tensorflow.__version__)

出力は 2.1.0-dev20191122 のように表示されます。

他のチュートリアルチュートリアルについては、DLAMI のホームディレクトリで Deep Learning AMI # Condatutorials というフォルダを参照します。

その他のチュートリアルや例については、TensorFlow Python API の TensorFlow ドキュメントを参照するか、TensorFlow ウェブサイトを参照してください。

TensorFlow (Horovod を使用)このチュートリアルでは、Conda を使用する AWS Deep Learning AMI (DLAMI) において Horovod を使用する TensorFlow を有効化する方法を説明します。Horovod は Conda 環境に TensorFlow 用にプリインストールされています。Python3 環境の使用をお勧めします。

46

Page 51: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドフレームワークのアクティブ化

Note

サポートされているインスタンスタイプは、P3.*、P2.*、G3.* のみです。

TensorFlow を有効化して、 Conda を使用する Horovod を DLAMI でテストするには

1. Conda を使用する DLAMI の Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを開きます。DLAMI の開始方法については、「the section called “DLAMI の開始方法” (p. 4)」を参照してください。• (推奨) CUDA 9 を使用する Python 3 上の Horovod を使用する TensorFlow の場合は、次のコマン

ドを実行します。

$ source activate tensorflow_p36

• CUDA 9 を使用する Python 2 上の Horovod を使用する TensorFlow の場合は、次のコマンドを実行します。

$ source activate tensorflow_p27

2. iPython ターミナルを起動します。

(tensorflow_p36)$ ipython

3. Horovod を使用する TensorFlow のインポートをテストして、正常に機能することを確認します。

import horovod.tensorflow as hvdhvd.init()

次の画面が表示される場合があります (警告メッセージが表示されても無視して構いません)。

--------------------------------------------------------------------------[[55425,1],0]: A high-performance Open MPI point-to-point messaging modulewas unable to find any relevant network interfaces:

Module: OpenFabrics (openib) Host: ip-172-31-72-4

Another transport will be used instead, although this may result inlower performance.--------------------------------------------------------------------------

詳細

• TensorFlow (Horovod を使用) (p. 63)• チュートリアルについては、DLAMI のホームディレクトリで examples/horovod フォルダを参照して

ください。• 他のチュートリアルや例については、「Horovod GitHub プロジェクト」を参照してください。

47

Page 52: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドフレームワークのアクティブ化

Horovod 付き TensorFlow 2このチュートリアルでは、Conda を使用する AWS Deep Learning AMI (DLAMI) において Horovod を使用する TensorFlow 2 を有効化する方法を説明します。Horovod は Conda 環境に TensorFlow 2 用にプリインストールされています。Python3 環境の使用をお勧めします。

Note

サポートされているインスタンスタイプは、P3.*、P2.*、G3.* のみです。

TensorFlow 2 を有効化して、Conda を使用する Horovod を DLAMI でテストするには

1. Conda を使用する DLAMI の Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを開きます。DLAMI の開始方法については、「the section called “DLAMI の開始方法” (p. 4)」を参照してください。• (推奨) CUDA 10 を使用する Python 3 上の Horovod を使用する TensorFlow 2 の場合は、次の

コマンドを実行します。

$ source activate tensorflow2_p36

• CUDA 10 を使用する Python 2 上の Horovod を使用する TensorFlow 2 の場合は、次のコマンドを実行します。

$ source activate tensorflow2_p27

2. iPython ターミナルを起動します。

(tensorflow2_p36)$ ipython

3. Horovod を使用する TensorFlow 2 のインポートをテストして、正常に機能することを確認します。

import horovod.tensorflow as hvdhvd.init()

出力を受け取らなければ、Horovod は正常に動作しています。次の画面が表示される場合があります(警告メッセージが表示されても無視して構いません)。

--------------------------------------------------------------------------[[55425,1],0]: A high-performance Open MPI point-to-point messaging modulewas unable to find any relevant network interfaces:

Module: OpenFabrics (openib) Host: ip-172-31-72-4

Another transport will be used instead, although this may result inlower performance.--------------------------------------------------------------------------

詳細

• チュートリアルについては、DLAMI のホームディレクトリで examples/horovod フォルダを参照してください。

48

Page 53: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドデバッグおよび視覚化

• 他のチュートリアルや例については、「Horovod GitHub プロジェクト」を参照してください。

TheanoTheano チュートリアル

Note

v28 リリース以降、CNTK、Caffe、Caffe2、および Theano Conda 環境は AWS Deep LearningAMI に含まれなくなりました。これらの環境を含む AWS Deep Learning AMI の以前のリリースは引き続き利用できます。ただし、これらのフレームワークのオープンソースコミュニティによってセキュリティ修正が公開されている場合にのみ、AWS はこれらの環境の更新を提供します。

フレームワークをアクティブ化するには、使用する Deep Learning AMI と Conda に関する以下の手順に従います。

Theano + Keras (cuDNN 7 の CUDA 9 で Python 3 を使用) の場合:

$ source activate theano_p36

Theano + Keras (cuDNN 7 の CUDA 9 で Python 2 を使用) の場合:

$ source activate theano_p27

iPython ターミナルを起動します。

(theano_p36)$ ipython

クイック Theano プログラムを実行します。

import numpyimport theanoimport theano.tensor as Tfrom theano import ppx = T.dscalar('x')y = x ** 2gy = T.grad(y, x)pp(gy)

Theano によってシンボリック勾配が計算されていることを確認します。

他のチュートリアル他のチュートリアルおよび例については、フレームワークの公式ドキュメントである Theano Python APIと Theano のウェブサイトを参照してください。

デバッグおよび視覚化DLAMI のデバッグと可視化オプションについて説明します。いずれかのオプションをクリックして、使用方法をご覧ください。

トピック• MXBoard (p. 50)

49

Page 54: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドデバッグおよび視覚化

• TensorBoard (p. 51)

MXBoardMXBoard では、TensorBoard ソフトウェアを使用した視覚的な検査と MXNet の実行とグラフを解釈します。MXBoard は、MXBoard の可視化を表示して操作するウェブページを提供するウェブサーバーを実行します。

MXNet、TensorBoard、および MXBoard は Deep Learning AMI と Conda (Conda の DLAMI) にあらかじめインストールされています。このチュートリアルでは、MXBoard 関数を使用して TensorBoard と互換性のあるログを生成できます。

トピック• MXBoard で MXNet を使用する (p. 50)• 詳細 (p. 51)

MXBoard で MXNet を使用する

TensorBoard と互換性のある MXBoard ログデータを生成する

1. Conda の DLAMI で Amazon Elastic Compute Cloud (Amazon EC2) インスタンスに接続します。2. Python 3 MXNet 環境を有効化します。

$ source activate mxnet_p36

3. 通常の演算子で生成されたデータをイベントファイルに書き込むための Python スクリプトを準備します。データは、標準偏差が緩和されるにつれ 10 回生成され、イベントファイルに書き込まれます。データ分布は平均値を中心とし、徐々に集中していきます。なお、ログフォルダにイベントファイルを指定することに注意してください。このフォルダのパスを、TensorBoard バイナリに渡します。

$ vi mxboard_normal.py

4. 以下をファイルに貼り付け、保存します。

import mxnet as mxfrom mxboard import SummaryWriter

with SummaryWriter(logdir='./logs') as sw: for i in range(10): # create a normal distribution with fixed mean and decreasing std data = mx.nd.normal(loc=0, scale=10.0/(i+1), shape=(10, 3, 8, 8)) sw.add_histogram(tag='norml_dist', values=data, bins=200, global_step=i)

5. スクリプトを実行します。これにより、logs フォルダにログを生成し、可視化に使用できます。

$ python mxboard_normal.py

6. これで、TensorFlow 環境に切り替えて、TensorBoard と MXBoard を使用してログを可視化できます。これは、TensorBoard と MXBoard に必須の依存関係です。

$ source activate tensorflow_p36

50

Page 55: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドデバッグおよび視覚化

7. ログの場所を tensorboard に渡します。

$ tensorboard --logdir=./logs --host=127.0.0.1 --port=8888

TensorBoard は ポート 8888 でウェブサーバーの可視化を起動します。8. ローカルブラウザから簡単にアクセスするには、ウェブサーバーポートをポート 80 あるいは他の

ポートに変更できます。いずれのポートを使用する場合でも、DLAMI 用の EC2 セキュリティグループでポートを開く必要があります。また、ポートフォワーディングを使用できます。セキュリティグループの設定を変更する手順およびポートフォワーディングの手順に関しては、「Jupyter ノートブックサーバーの設定 (p. 23)」を参照してください。デフォルトの設定は、次のステップで説明します。

Note

Jupyter サーバーと MXBoard サーバーの両方を実行する場合は、それぞれに異なるポートを選択してください。

9. EC2 インスタンスでポート 8888 (または、ウェブサーバーを可視化するために指定したポート) を開きます。

a. Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) で EC2 インスタンスを開きます。

b. Amazon EC2 コンソールで、[ネットワーク & セキュリティ]、[セキュリティグループ] の順に選択します。

c. [セキュリティグループ] で最後に作成したセキュリティグループを選択します (詳細のタイムスタンプを参照してください)。

d. [インバウンド] タブを選択し、[編集] を選択します。e. [Add Rule] を選択します。f. 新しい行で次のように入力します。

タイプ : カスタム TCP Rule

プロトコル: TCP

ポート範囲: 8888 (または、可視化サーバーに割り当てたポート)

ソース: Anywhere (0.0.0.0/0,::/0)10. ローカルブラウザからのデータを可視化するには、次のコマンドを入力して、EC2 インスタンス上で

レンダリングするデータをローカルマシンに転送します。

$ ssh -Y -L localhost:8888:localhost:8888 user_id@ec2_instance_ip

11. Conda で DLAMI を実行する EC2 インスタンスのパブリック IP あるいは DNS アドレス、およびMXBoard 用に開いたポートを使用して、MXBoard の可視化のためにウェブページを開きます。

http://127.0.0.1:8888

詳細MXBoard についての詳細は、「MXBoard ウェブサイト」を参照してください。

TensorBoardTensorBoard は、視覚的な検査と TensorFlow の実行とグラフを解釈します。TensorBoardは、TensorBoard の可視化を表示して操作するウェブページを提供するウェブサーバーを実行します。

TensorFlow および TensorBoard は Deep Learning AMI と Conda (Conda の DLAMI) にあらかじめインストールされています。Conda の DLAMI には、MNIST モデルで拡張ログ記録機能を有効にしたトレーニン

51

Page 56: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドデバッグおよび視覚化

グをするために TensorFlow を使用するスクリプト例も含まれています。MNIST は、画像認識モデルのトレーニングによく使用される手書き数字のデータベースです。このチュートリアルでは、MNIST モデルのトレーニングにはスクリプトを使用し、可視化の作成には TensorBoard およびログを使用します。

トピック• MNIST モデルをトレーニングして、TensorBoard でトレーニングを可視化する (p. 52)• 詳細 (p. 53)

MNIST モデルをトレーニングして、TensorBoard でトレーニングを可視化する

MNIST モデルのトレーニングを TensorBoard で可視化する

1. Conda の DLAMI で Amazon Elastic Compute Cloud (Amazon EC2) インスタンスに接続します。2. Python 2.7 TensorFlow 環境を有効化し、TensorBoard のスクリプト例があるフォルダが格納されてい

るディレクトリに移動します。

$ source activate tensorflow_p27$ cd ~/examples/tensorboard/

3. MNIST モデルを拡張ログを有効化してトレーニングするスクリプトを実行します。

$ python mnist_with_summaries.py

このスクリプトは、/tmp/tensorflow/mnist にログを書き込みます。4. ログの場所を tensorboard に渡します。

$ tensorboard --logdir=/tmp/tensorflow/mnist

TensorBoard は ポート 6006 でウェブサーバーの可視化を起動します。5. ローカルブラウザから簡単にアクセスするには、ウェブサーバーポートをポート 80 あるいは他の

ポートに変更できます。いずれのポートを使用する場合でも、DLAMI 用の EC2 セキュリティグループでポートを開く必要があります。また、ポートフォワーディングを使用できます。セキュリティグループの設定を変更する手順およびポートフォワーディングの手順に関しては、「Jupyter ノートブックサーバーの設定 (p. 23)」を参照してください。デフォルトの設定は、次のステップで説明します。

Note

Jupyter サーバーと TensorBoard サーバーの両方を実行する場合は、それぞれに異なるポートを選択してください。

6. EC2 インスタンスでポート 6006 (または、ウェブサーバーを可視化するために指定したポート) を開きます。

a. Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) で EC2 インスタンスを開きます。

b. Amazon EC2 コンソールで、[ネットワーク & セキュリティ]、[セキュリティグループ] の順に選択します。

c. [セキュリティグループ] で最後に作成したセキュリティグループを選択します (詳細のタイムスタンプを参照してください)。

d. [インバウンド] タブを選択し、[編集] を選択します。e. [Add Rule] を選択します。f. 新しい行で次のように入力します。

タイプ : カスタム TCP Rule

52

Page 57: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイド分散トレーニング

プロトコル: TCP

ポート範囲: 6006 (または、可視化サーバーに割り当てたポート)

ソース: Anywhere (0.0.0.0/0,::/0)7. TensorBoard のビジュアライゼーションのウェブページを開くには、DLAMI を実行している EC2 イ

ンスタンスの公開 IP アドレスまたは DNS アドレスと、TensorBoard 用に開いたポートを使用します。

http:// YourInstancePublicDNS:6006

詳細

TensorBoard についての詳細は、「TensorBoard ウェブサイト」を参照してください。

分散トレーニングDLAMI に用意されている、複数の GPU を使用したトレーニングのオプションを説明します。パフォーマンスを向上させるには、オプションの 1 つ Elastic Fabric Adapter (p. 70) をクリックして使用方法をご確認ください。

トピック• Chainer (p. 53)• MXNet を使用する Keras (p. 62)• TensorFlow (Horovod を使用) (p. 63)

ChainerChainer は、簡単で直観的に複雑なニューラルネットワークアーキテクチャを記述するための柔軟性のある Python ベースのフレームワークです。Chainer は、トレーニングにおけるマルチ GPU インスタンスの使用を簡単にします。また、Chainer は自動的に結果、グラフの損失および正確性をログに記録し、計算グラフ でニューラルネットワークを視覚化するための出力を実行します。これは Deep Learning AMI とConda (Conda の DLAMI) に含まれています。

次のトピックでは、複数の GPU、単一の GPU および CPU でのトレーニング、視覚化の作成、およびChainer インストールをテストする方法を説明します。

トピック• Chainer におけるトレーニングモデル (p. 53)• Chainer を使用して複数の GPU でトレーニングする (p. 54)• Chainer を使用して単一の GPU でトレーニングする (p. 56)• Chainer を使用して CPU でトレーニングする (p. 57)• 結果のグラフ化 (p. 58)• Chainer のテスト (p. 62)• 詳細 (p. 62)

Chainer におけるトレーニングモデル

このチュートリアルでは、MNIST データセットでモデルをトレーニングする Chainer スクリプトの例を使用する方法を説明します。MNIST は、画像認識モデルのトレーニングによく使用される手書き数字のデー

53

Page 58: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイド分散トレーニング

タベースです。また、このチュートリアルでは、CPU と 1 つ以上の GPU におけるトレーニングのトレーニング速度の違いについても説明します。

Chainer を使用して複数の GPU でトレーニングする

複数の GPU でトレーニングするには

1. Deep Learning AMI と Conda を実行中のインスタンスに接続します。インスタンスを選択または接続する方法については、「the section called “インスタンスの選択” (p. 17)」または「Amazon EC2 ドキュメント」を参照してください。このチュートリアルを実行するには、少なくとも 2 つの GPU を持つインスタンスを使用します。

2. Python 3 Chainer 環境を有効化します。

$ source activate chainer_p36

3. 最新のチュートリアルを取得して Chainer レポジトリをクローンするには、例フォルダに移動します。

(chainer_p36) :~$ cd ~/src(chainer_p36) :~/src$ CHAINER_VERSION=v$(python -c "import chainer; print(chainer.__version__)")(chainer_p36) :~/src$ git clone -b $CHAINER_VERSION https://github.com/chainer/chainer.git(chainer_p36) :~/src$ cd chainer/examples/mnist

4. train_mnist_data_parallel.py スクリプトの例を実行します。デフォルトでは、スクリプトはDeep Learning AMI と Conda のインスタンスで実行されている GPU を使用します。このスクリプトは、最大 2 つの GPU 上で実行することができます。2 つを超える GPU は無視されます。1 つあるいは 2 つを自動的に検出します。GPU のないインスタンスを実行している場合には、このチュートリアルの Chainer を使用して CPU でトレーニングする (p. 57) にスキップしてください。

(chainer_p36) :~/src/chainer/examples/mnist$ python train_mnist_data_parallel.py

Note

この例では、ベータ機能の組み込みが DLAMI に含まれていないため、次のエラーを返します。chainerx ModuleNotFoundError: No module named 'chainerx'

Chainer スクリプトが MNIST データベースをトレーニング中に、各エポックごとの結果を表示できます。

次に、スクリプトが実行する例の出力が表示されます。次の出力例は、p3.8xlarge インスタンスで実行されました。スクリプトの出力は「GPU: 0, 1」と表示され、これは利用可能な 4 つの GPU の最初の 2 つを使用したことを示しています。このスクリプトは通常の場合、合計数の代わりにゼロで始まる GPU のインデックスを使用します。

GPU: 0, 1

# unit: 1000# Minibatch-size: 400# epoch: 20

epoch main/loss validation/main/loss main/accuracy validation/main/accuracy elapsed_time1 0.277561 0.114709 0.919933 0.9654 6.59261 2 0.0882352 0.0799204 0.973334 0.9752 8.25162

54

Page 59: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイド分散トレーニング

3 0.0520674 0.0697055 0.983967 0.9786 9.91661 4 0.0326329 0.0638036 0.989834 0.9805 11.5767 5 0.0272191 0.0671859 0.9917 0.9796 13.2341 6 0.0151008 0.0663898 0.9953 0.9813 14.9068 7 0.0137765 0.0664415 0.995434 0.982 16.5649 8 0.0116909 0.0737597 0.996 0.9801 18.2176 9 0.00773858 0.0795216 0.997367 0.979 19.8797 10 0.00705076 0.0825639 0.997634 0.9785 21.5388 11 0.00773019 0.0858256 0.9978 0.9787 23.2003 12 0.0120371 0.0940225 0.996034 0.9776 24.8587 13 0.00906567 0.0753452 0.997033 0.9824 26.5167 14 0.00852253 0.082996 0.996967 0.9812 28.1777 15 0.00670928 0.102362 0.997867 0.9774 29.8308 16 0.00873565 0.0691577 0.996867 0.9832 31.498 17 0.00717177 0.094268 0.997767 0.9802 33.152 18 0.00585393 0.0778739 0.998267 0.9827 34.8268 19 0.00764773 0.107757 0.9975 0.9773 36.4819 20 0.00620508 0.0834309 0.998167 0.9834 38.1389

5. トレーニングを実行中に、GPU の使用率を参照することは便利です。どの GPU がアクティブであるかを確認でき、その負荷を表示できます。NVIDIA は、このためのコマンド nvidia-smi を実行できるツールを提供しています。ただし、これは使用率のスナップショットのみを示すため、これと Linux コマンド watch を組み合わせることでより多くの情報を取得できます。次のコマンドでは、watch を nvidia-smi で使用して、10 秒ごとに GPU の現在の使用率を更新します。DLAMI に別のターミナルセッションを開き、次のコマンドを実行します。

(chainer_p36) :~$ watch -n0.1 nvidia-smi

以下のような出力結果が表示されるはずです。ctrl-c を使用してツールを閉じるか、最初のターミナルセッションでほかの例を試す間、実行を継続します。

Every 0.1s: nvidia-smi Wed Feb 28 00:28:50 2018

Wed Feb 28 00:28:50 2018+-----------------------------------------------------------------------------+| NVIDIA-SMI 384.111 Driver Version: 384.111 ||-------------------------------+----------------------+----------------------+| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC || Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. ||===============================+======================+======================|| 0 Tesla V100-SXM2... On | 00000000:00:1B.0 Off | 0 || N/A 46C P0 56W / 300W | 728MiB / 16152MiB | 10% Default |+-------------------------------+----------------------+----------------------+

55

Page 60: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイド分散トレーニング

| 1 Tesla V100-SXM2... On | 00000000:00:1C.0 Off | 0 || N/A 44C P0 53W / 300W | 696MiB / 16152MiB | 4% Default |+-------------------------------+----------------------+----------------------+| 2 Tesla V100-SXM2... On | 00000000:00:1D.0 Off | 0 || N/A 42C P0 38W / 300W | 10MiB / 16152MiB | 0% Default |+-------------------------------+----------------------+----------------------+| 3 Tesla V100-SXM2... On | 00000000:00:1E.0 Off | 0 || N/A 46C P0 40W / 300W | 10MiB / 16152MiB | 0% Default |+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+| Processes: GPU Memory || GPU PID Type Process name Usage ||=============================================================================|| 0 54418 C python 718MiB || 1 54418 C python 686MiB |+-----------------------------------------------------------------------------+

この例では、GPU 0 と GPU 1 はアクティブですが、GPU 2 と 3 はアクティブではありません。GPUごとにメモリ使用率を確認することもできます。

6. トレーニングが完了したら、最初のターミナルセッションの経過時間を書き留めます。この例では、経過時間は 38.1389 秒です。

Chainer を使用して単一の GPU でトレーニングする

この例は、単一の GPU でトレーニングする方法を示します。これは、1 つの GPU のみが利用可能である場合、または マルチ GPU トレーニングが Chainer でどのようにスケーリングされるかを確認する場合に実行します。

Chainer を使用して単一の GPU でトレーニングするには

• この例では、別のスクリプトである train_mnist.py を使用して、--gpu=0 引数で GPU 0 のみを使用するように指示します。nvidia-smi コンソールでアクティブな異なる GPU を確認するには、--gpu=1 を使用して GPU 番号 1 を使用するようにスクリプトに指示できます。

(chainer_p36) :~/src/chainer/examples/mnist$ python train_mnist.py --gpu=0

GPU: 0# unit: 1000# Minibatch-size: 100# epoch: 20

epoch main/loss validation/main/loss main/accuracy validation/main/accuracy elapsed_time1 0.192348 0.0909235 0.940934 0.9719 5.3861 2 0.0746767 0.069854 0.976566 0.9785 8.97146 3 0.0477152 0.0780836 0.984982 0.976 12.5596 4 0.0347092 0.0701098 0.988498 0.9783 16.1577 5 0.0263807 0.08851 0.991515 0.9793 19.7939 6 0.0253418 0.0945821 0.991599 0.9761 23.4643 7 0.0209954 0.0683193 0.993398 0.981 27.0317 8 0.0179036 0.080285 0.994149 0.9819 30.6325

56

Page 61: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイド分散トレーニング

9 0.0183184 0.0690474 0.994198 0.9823 34.2469 10 0.0127616 0.0776328 0.996165 0.9814 37.8693 11 0.0145421 0.0970157 0.995365 0.9801 41.4629 12 0.0129053 0.0922671 0.995899 0.981 45.0233 13 0.0135988 0.0717195 0.995749 0.9857 48.6271 14 0.00898215 0.0840777 0.997216 0.9839 52.2269 15 0.0103909 0.123506 0.996832 0.9771 55.8667 16 0.012099 0.0826434 0.996616 0.9847 59.5001 17 0.0066183 0.101969 0.997999 0.9826 63.1294 18 0.00989864 0.0877713 0.997116 0.9829 66.7449 19 0.0101816 0.0972672 0.996966 0.9822 70.3686 20 0.00833862 0.0899327 0.997649 0.9835 74.0063

この例では、単一の GPU の実行にほぼ 2 倍の時間がかかっています。 より大きなモデルやより大きなデータセットのトレーニングでは、この例とは異なる結果となるため、GPU のパフォーマンスをさらに評価するために試してみてください。

Chainer を使用して CPU でトレーニングする

ここでは、CPU 専用モードでトレーニングします。引数を使用せずに、同じスクリプトの pythontrain_mnist.py を実行します。

(chainer_p36) :~/src/chainer/examples/mnist$ python train_mnist.py

出力の GPU: -1 は、GPU が使用されていないことを示しています。

GPU: -1# unit: 1000# Minibatch-size: 100# epoch: 20

epoch main/loss validation/main/loss main/accuracy validation/main/accuracy elapsed_time1 0.192083 0.0918663 0.94195 0.9712 11.2661 2 0.0732366 0.0790055 0.977267 0.9747 23.9823 3 0.0485948 0.0723766 0.9844 0.9787 37.5275 4 0.0352731 0.0817955 0.987967 0.9772 51.6394 5 0.029566 0.0807774 0.990217 0.9764 65.2657 6 0.025517 0.0678703 0.9915 0.9814 79.1276 7 0.0194185 0.0716576 0.99355 0.9808 93.8085 8 0.0174553 0.0786768 0.994217 0.9809 108.648

57

Page 62: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイド分散トレーニング

9 0.0148924 0.0923396 0.994983 0.9791 123.737 10 0.018051 0.099924 0.99445 0.9791 139.483 11 0.014241 0.0860133 0.995783 0.9806 156.132 12 0.0124222 0.0829303 0.995967 0.9822 173.173 13 0.00846336 0.122346 0.997133 0.9769 190.365 14 0.011392 0.0982324 0.996383 0.9803 207.746 15 0.0113111 0.0985907 0.996533 0.9813 225.764 16 0.0114328 0.0905778 0.996483 0.9811 244.258 17 0.00900945 0.0907504 0.9974 0.9825 263.379 18 0.0130028 0.0917099 0.996217 0.9831 282.887 19 0.00950412 0.0850664 0.997133 0.9839 303.113 20 0.00808573 0.112367 0.998067 0.9778 323.852

この例では、MNIST は 323 秒でトレーニングされ、これは 2 つの GPU でのトレーニングより 11 倍以上かかっています。GPU の力が 2 倍であるとしても、この例ではどれだけ効果的であるかがわかります。

結果のグラフ化

また、Chainer は自動的に結果、グラフの損失および正確性をログに記録し、計算グラフのプロットに出力を実行します。

計算グラフを生成するには

1. トレーニングの実行が終了したら、result ディレクトリに移動して、実行の正確性および損失を自動的に生成される 2 つの画像で表示できます。今すぐ移動し、内容を一覧表示します。

(chainer_p36) :~/src/chainer/examples/mnist$ cd result(chainer_p36) :~/src/chainer/examples/mnist/result$ ls

result ディレクトリには、accuracy.png と loss.png の .png 形式の 2 つのファイルがあります。

2. グラフを表示するには、scp コマンドを使用してこの 2 つをローカルコンピューターにコピーします。

macOS ターミナルでは、次の scp コマンドを実行して 3 つのファイルすべてを Downloads フォルダーにダウンロードします。キーファイルの場所のプレースホルダ―とサーバーアドレスを使用する情報で置き換えます。他のオペレーティングシステムの場合は、適切な scp コマンド形式を使用します。Amazon Linux AMI の場合は、ユーザー名は ec2-user であることに注意してください。

(chainer_p36) :~/src/chainer/examples/mnist/result$ scp -i "your-key-file.pem" [email protected]:~/src/chainer/examples/mnist/result/*.png ~/Downloads

次の画像は、正確性、損失および計算グラフのそれぞれの例です。

58

Page 63: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイド分散トレーニング

59

Page 64: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイド分散トレーニング

60

Page 65: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイド分散トレーニング

61

Page 66: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイド分散トレーニング

Chainer のテスト

Chainer をテストして、GPU が事前インストールされているテストスクリプトをサポートするかを確認するには、次のコマンドを実行します。

(chainer_p36) :~/src/chainer/examples/mnist/result$ cd ~/src/bin(chainer_p36) :~/src/bin$ ./testChainer

これで Chainer ソースコードがダウンロードされ、Chainer マルチ GPU MNIST の例を実行します。

詳細

Chainer についての詳細は、「Chainer ドキュメントウェブサイト」を参照してください。Chainer 例フォルダには、より多くの例があります。実行して、そのパフォーマンスを試してください。

MXNet を使用する Kerasこのチュートリアルでは、Deep Learning AMI と Conda で MXNet バックエンドを使用し、Keras 2 をアクティブ化して使用する方法を説明します。

MXNet バックエンドを使用する Keras をアクティブ化し、Conda を使用した DLAMI でテストする

1. MXNet バックエンドを使用する Keras をアクティブ化するには、Conda を使用した DLAMI のAmazon Elastic Compute Cloud (Amazon EC2) インスタンスを開きます。• Python 3 では、次のコマンドを実行します。

$ source activate mxnet_p36

• Python 2 では、次のコマンドを実行します。

$ source activate mxnet_p27

2. iPython ターミナルを起動します。

(mxnet_p36)$ ipython

3. MXNet を使用する Keras のインポートをテストして、正常に機能することを確認します。

import keras as k

次の画面が表示されます (警告メッセージがいくつか表示される場合があります)。

Using MXNet backend

Note

エラーが発生した場合、または TensorFlow バックエンドが使用されている場合は、手動でKeras 設定を更新する必要があります。~/.keras/keras.json ファイルを編集してバックエンド設定を mxnet に変更します。

62

Page 67: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイド分散トレーニング

Keras-MXNet マルチ GPU トレーニングチュートリアル

畳み込みニューラルネットワーク (CNN) のトレーニング

1. DLAMI にターミナルと SSH を開きます。2. ~/examples/keras-mxnet/ フォルダに移動します。3. ターミナルウィンドウで nvidia-smi を実行して、DLAMI で使用可能な GPU の数を確認します。次

のステップでは、4 つの GPU を持っている場合、そのままスクリプトを実行します。4. (オプション) 次のコマンドを実行して、スクリプトを開き、編集します。

(mxnet_p36)$ vi cifar10_resnet_multi_gpu.py

5. (オプション) このスクリプトで、次の GPU の数を定義する行を探します。必要な場合は更新します。

model = multi_gpu_model(model, gpus=4)

6. 次にトレーニングを実行します。

(mxnet_p36)$ python cifar10_resnet_multi_gpu.py

Note

Keras-MXNet は、channels_first image_data_format セットで最大 2 倍高速で実行されます。channels_first に変更するには、Keras 設定ファイル (~/.keras/keras.json) を編集し、次のように設定します。"image_data_format": "channels_first"パフォーマンスチューニング技術の詳細については、「Keras-MXNet パフォーマンスチューニングガイド」を参照してください。

詳細

• MXNet バックエンドを使用する Keras の例は Deep Learning AMI と Conda ~/examples/keras-mxnet ディレクトリにあります。

• 他のチュートリアルや例については、「Keras-MXNet GitHub プロジェクト」を参照してください。

TensorFlow (Horovod を使用)このチュートリアルでは、Deep Learning AMI と Conda において Horovod を使用する TensorFlow を使用する方法を説明します。Horovod は Conda 環境に TensorFlow 用にプリインストールされています。Python 3 環境の使用をお勧めします。ここでの手順は、1 つ以上の GPU を搭載した DLAMI インスタンスが動作していることを前提としています。詳細については、「DLAMI の開始方法 (p. 4)」を参照してください。

Note

サポートされているインスタンスタイプは、P3.*、P2.*、G3.* のみです。Note

mpirun (OpenMPI 経由) は、/usr/bin および /home/ubuntu/anaconda3/envs/<env>/binの 2 か所にあります。env は、Tensorflow や Apache MXNet など、フレームワークに対応する環境です。conda 環境外の /usr/bin の mpirun バイナリは、CNTK フレームワークとの互換性を維持するために存在します。このフレームワークは、その場所に v1.10 を想定しています。新しいバージョンの OpenMPI は conda 環境にあります。mpi ワークロードを実行するには、mpirunバイナリの絶対パスまたは --prefix フラグを使用することをお勧めします。たとえば、Tensorflowpython36 環境では、次のいずれかを使用します。

63

Page 68: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイド分散トレーニング

/home/ubuntu/anaconda3/envs/tensorflow_p36/bin/mpirun <args>

or

mpirun --prefix /home/ubuntu/anaconda3/envs/tensorflow_p36/bin <args>

Horovod で TensorFlow を有効化してテストする

1. インスタンスにアクティブな GPU があることを確認します。NVIDIA が、このためのツールを提供しています。

$ nvidia-smi

2. Python 3 TensorFlow 環境を有効化します。

$ source activate tensorflow_p36

3. iPython ターミナルを起動します。

(tensorflow_p36)$ ipython

4. Horovod を使用する TensorFlow のインポートをテストして、正常に機能することを確認します。

import horovod.tensorflow as hvdhvd.init()

次の画面が表示される場合があります (警告メッセージがいくつか表示される場合があります)。

--------------------------------------------------------------------------[[55425,1],0]: A high-performance Open MPI point-to-point messaging modulewas unable to find any relevant network interfaces:

Module: OpenFabrics (openib) Host: ip-172-31-72-4

Another transport will be used instead, although this may result inlower performance.--------------------------------------------------------------------------

Horovod hosts ファイルを設定する

Horovod は、シングルノード、マルチ GPU トレーニング、またはマルチノード、マルチ GPU トレーニングに使用できます。分散型トレーニングに複数のノードを使用する予定がある場合は、各 DLAMI のプライベート IP アドレスを hosts ファイルに追加する必要があります。現在ログインしている DLAMI はリーダーと呼ばれます。クラスターに含まれる他の DLAMI インスタンスはメンバーと呼ばれます。

このセクションを開始する前に、1 つ以上の DLAMI を起動し、それらが [Ready (準備完了)] 状態になるのを待ちます。サンプルスクリプトには hosts ファイルが必要なため、DLAMI を 1 つだけ使用する予定の場合でも、1 つのエントリのみで hosts ファイルを作成します。トレーニングの開始後に hosts ファイルを編集する場合は、追加または削除されたホストが有効になるようにトレーニングを再び開始する必要があります。

Horovod をトレーニング用に設定するには

1. トレーニングスクリプトがある場所にディレクトリを変更します。

64

Page 69: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイド分散トレーニング

cd ~/examples/horovod/tensorflow

2. vim を使用して、リーダーのホームディレクトリにあるファイルを編集します。

vim hosts

3. Amazon Elastic Compute Cloud コンソールでいずれかのメンバーを選択すると、コンソールの説明ペインが表示されます。[プライベート IP] フィールドを見つけ、IP をコピーしてテキストファイルに貼り付けます。各メンバーのプライベート IP を新しい行にコピーします。その後、以下のように、各 IP の横にスペースに続けてテキスト slots=8 を追加します。これは、各インスタンスが搭載する GPU の数を表します。p3.16xlarge インスタンスは 8 個の GPU を搭載しているため、異なるインスタンスタイプを選択した場合は、インスタンスごとに GPU の実際の数を指定します。リーダーには、localhost を使用できます。4 ノードのクラスターでは、以下のようになります。

172.100.1.200 slots=8172.200.8.99 slots=8172.48.3.124 slots=8localhost slots=8

ファイルを保存し、リーダーのターミナルに戻ります。4. これで、リーダーは各メンバーに到達する方法がわかります。次は、プライベートネットワークイ

ンターフェイスで実行する手順です。短い bash 関数を使用して、各メンバーにコマンドを送信します。

function runclust(){ while read -u 10 host; do host=${host%% slots*}; ssh -o "StrictHostKeyChecking no" $host ""$2""; done 10<$1; };

5. 通常はまず、他のメンバーに「StrickHostKeyChecking」を行わないように指示することです。これにより、トレーニングがハングアップするのを避けます。

runclust hosts "echo \"StrictHostKeyChecking no\" >> ~/.ssh/config"

合成データによるトレーニング

DLAMI には、合成データでモデルをトレーニングするサンプルスクリプトが付属しています。このスクリプトは、リーダーがクラスターのメンバーと通信できるかどうかをテストします。hosts ファイルが必要です。手順については、「Horovod hosts ファイルを設定する (p. 64)」を参照してください。

サンプルデータを使用して Horovod トレーニングをテストするには

1. ~/examples/horovod/tensorflow/train_synthetic.sh のデフォルトは 8 GPU ですが、実行する GPU の数を指定できます。以下の例では、4 個の GPU を表す 4 をパラメータとして渡してスクリプトを実行します。

$ ./train_synthetic.sh 4

いくつかの警告メッセージが表示された後、Horovod が 4 個の GPU を使用していることを確認する以下の出力が表示されます。

PY3.6.5 |Anaconda custom (64-bit)| (default, Apr 29 2018, 16:14:56) [GCC 7.2.0]TF1.11.0Horovod size: 4

65

Page 70: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイド分散トレーニング

その後、他のいくつかの警告の後に、テーブルの先頭といくつかのデータポイントが表示されます。1,000 バッチを見る必要がない場合は、トレーニングを中断してください。

Step Epoch Speed Loss FinLoss LR 0 0.0 105.6 6.794 7.708 6.40000 1 0.0 311.7 0.000 4.315 6.38721 100 0.1 3010.2 0.000 34.446 5.18400 200 0.2 3013.6 0.000 13.077 4.09600 300 0.2 3012.8 0.000 6.196 3.13600 400 0.3 3012.5 0.000 3.551 2.30401

2. Horovod は、クラスターのメンバーの GPU を使用する前に、まずすべてのローカル GPU を使用します。したがって、クラスター全体で分散型トレーニングが機能していることを確認するには、使用する全数の GPU を試してください。たとえば、インスタンスタイプ p3.16xlarge のメンバーが 4 つある場合は、クラスター全体で 32 個の GPU があります。ここでは、32 個の GPU をすべて試すとします。

./train_synthetic.sh 32

出力は先ほどのテストのものと同様です。Horovod サイズは 32 で、速度は約 4 倍です。この実験が完了したら、リーダーのテストと、そのメンバーとの通信のテストは終了です。問題が発生した場合は、「トラブルシューティング (p. 69)」セクションを確認してください。

ImageNet データセットの準備

このセクションでは、ImageNet データセットをダウンロードし、raw データセットから TFRecord 形式のデータセットを生成します。DLAMI には、ImageNet にも、別のデータセットのテンプレートとしても使用できる ImageNet データセット用の一連の事前処理スクリプトが用意されています。ImageNet 用に設定された主なトレーニングスクリプトも用意されています。以下のチュートリアルでは、8 個の GPU を搭載した EC2 インスタンスで DLAMI を起動済みであることを前提としています。p3.16xlarge インスタンスタイプをお勧めします。

DLAMI の ~/examples/horovod/tensorflow/utils ディレクトリに以下のスクリプトがあります。

• utils/preprocess_imagenet.py - これを使用して raw ImageNet データセットを TFRecord 形式に変換します。

• utils/tensorflow_image_resizer.py - これを使用して、TFRecord データセットを ImageNet トレーニングに適したサイズに変更します。

ImageNet データセットの準備

1. image-net.org にアクセスしてアカウントを作成し、アクセスキーを取得してデータセットをダウンロードします。image-net.org は raw データセットをホストします。これをダウンロードするには、ImageNet アカウントとアクセスキーが必要です。アカウントは無料です。無料のアクセスキーを取得するには、ImageNet ライセンスに同意する必要があります。

2. イメージの事前処理スクリプトを使用して、raw ImageNet データセットから TFRecord 形式のデータセットを生成します。~/examples/horovod/tensorflow/utils ディレクトリから以下を実行します。

python preprocess_imagenet.py \ --local_scratch_dir=[YOUR DIRECTORY] \ --imagenet_username=[imagenet account] \ --imagenet_access_key=[imagenet access key]

66

Page 71: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイド分散トレーニング

3. イメージサイズ変更スクリプトを使用します。画像のサイズを変更することで、トレーニングがより迅速に実行され、より ResNet リファレンス白書に準拠します。~/examples/horovod/utils/preprocess ディレクトリから以下を実行します。

python tensorflow_image_resizer.py \ -d imagenet \ -i [PATH TO TFRECORD TRAINING DATASET] \ -o [PATH TO RESIZED TFRECORD TRAINING DATASET] \ --subset_name train \ --num_preprocess_threads 60 \ --num_intra_threads 2 \ --num_inter_threads 2

1 つの DLAMI で ResNet-50 ImageNet モデルをトレーニングするNote

• このチュートリアルのスクリプトでは、事前処理済みトレーニングデータが ~/data/tf-imagenet/ フォルダにあることを前提としています。手順については、「ImageNet データセットの準備 (p. 66)」を参照してください。

• hosts ファイルが必要です。手順については、「Horovod hosts ファイルを設定する (p. 64)」を参照してください。

Horovod を使用して ImageNet データセットで ResNet50 CNN をトレーニングします。

1. ~/examples/horovod/tensorflow フォルダに移動します。

cd ~/examples/horovod/tensorflow

2. 設定を確認し、トレーニングで使用する GPU の数を設定します。まず、スクリプトと同じフォルダにある hosts を確認します。このファイルは、GPU が 8 未満のインスタンスを使用する場合は更新する必要があります。デフォルトでは、localhost slots=8 と示されています。数字の 8 を使用する GPU の数に更新します。

3. 唯一のパラメータとして使用する予定の GPU 数を取得するシェルスクリプトが用意されています。このスクリプトを実行してトレーニングを開始します。以下の例では、4 GPU を表す 4 を使用します。

./train.sh 4

4. 完了までには数時間かかります。トレーニングは mpirun を使用して GPU 間に分散されます。

DLAMI のクラスターで ResNet-50 ImageNet モデルをトレーニングするNote

• このチュートリアルのスクリプトでは、事前処理済みトレーニングデータが ~/data/tf-imagenet/ フォルダにあることを前提としています。手順については、「ImageNet データセットの準備 (p. 66)」を参照してください。

• hosts ファイルが必要です。手順については、「Horovod hosts ファイルを設定する (p. 64)」を参照してください。

この例では、DLAMI のクラスター内の複数のノードにまたがる準備済みデータセットに対して ResNet-50モデルをトレーニングします。

67

Page 72: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイド分散トレーニング

• パフォーマンスを向上させるには、クラスターの各メンバーにデータセットをローカルに配置することをお勧めします。

この copyclust 関数を使用して、データを他のメンバーにコピーします。

function copyclust(){ while read -u 10 host; do host=${host%% slots*}; rsync -azv "$2" $host:"$3"; done 10<$1; };

あるいは、ファイルが S3 バケットにある場合は、runclust 関数を使用して、各メンバーにファイルを直接ダウンロードします。

runclust hosts "tmux new-session -d \"export AWS_ACCESS_KEY_ID=YOUR_ACCESS_KEY && export AWS_SECRET_ACCESS_KEY=YOUR_SECRET && aws s3 sync s3://your-imagenet-bucket ~/data/tf-imagenet/ && aws s3 sync s3://your-imagenet-validation-bucket ~/data/tf-imagenet/\""

一度に複数のノードを管理できるツールを使用すると、時間を大幅に節約できます。インスタンス別に各ステップの終了を待つことも、あるいは、tmux や screen などのツールを使用してセッションの切断と再開を行うこともできます。

コピーが完了したら、トレーニングを開始する準備ができました。この実行に使用する 32 個の GPU を表す 32 をパラメータとして渡して、スクリプトを実行します。セッションの切断と終了が心配な場合は、tmux のようなツールを使用して、トレーニングの実行を終了できます。

./train.sh 32

以下の出力は、32 個の GPU の ImageNet に対してトレーニングを実行したときのものです。32 個のGPU の処理には 90 ~ 110 分かかります。

Step Epoch Speed Loss FinLoss LR 0 0.0 440.6 6.935 7.850 0.00100 1 0.0 2215.4 6.923 7.837 0.00305 50 0.3 19347.5 6.515 7.425 0.10353 100 0.6 18631.7 6.275 7.173 0.20606 150 1.0 19742.0 6.043 6.922 0.30860 200 1.3 19790.7 5.730 6.586 0.41113 250 1.6 20309.4 5.631 6.458 0.51366 300 1.9 19943.9 5.233 6.027 0.61619 350 2.2 19329.8 5.101 5.864 0.71872 400 2.6 19605.4 4.787 5.519 0.82126 ... 13750 87.9 19398.8 0.676 1.082 0.00217 13800 88.2 19827.5 0.662 1.067 0.00156 13850 88.6 19986.7 0.591 0.997 0.00104 13900 88.9 19595.1 0.598 1.003 0.00064 13950 89.2 19721.8 0.633 1.039 0.00033 14000 89.5 19567.8 0.567 0.973 0.00012 14050 89.8 20902.4 0.803 1.209 0.00002 Finished in 6004.354426383972

トレーニングの実行が完了すると、スクリプトは続いて評価の実行を開始します。スクリプトはリーダーで十分高速に実行されるため、他のメンバーにジョブを分散させる必要はありません。以下に示しているのは、評価の実行の出力です。

Horovod size: 32EvaluatingValidation dataset size: 50000[ip-172-31-36-75:54959] 7 more processes have sent help message help-btl-vader.txt / cma-permission-denied

68

Page 73: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイド分散トレーニング

[ip-172-31-36-75:54959] Set MCA parameter "orte_base_help_aggregate" to 0 to see all help / error messages step epoch top1 top5 loss checkpoint_time(UTC) 14075 90.0 75.716 92.91 0.97 2018-11-14 08:38:28

以下に示しているのは、256 個の GPU でこのスクリプトを実行したときの出力例です。実行時間は 14 〜15 分となっています。

Step Epoch Speed Loss FinLoss LR 1400 71.6 143451.0 1.189 1.720 0.14850 1450 74.2 142679.2 0.897 1.402 0.10283 1500 76.7 143268.6 1.326 1.809 0.06719 1550 79.3 142660.9 1.002 1.470 0.04059 1600 81.8 143302.2 0.981 1.439 0.02190 1650 84.4 144808.2 0.740 1.192 0.00987 1700 87.0 144790.6 0.909 1.359 0.00313 1750 89.5 143499.8 0.844 1.293 0.00026Finished in 860.5105031204224

Finished evaluation1759 90.0 75.086 92.47 0.99 2018-11-20 07:18:18

トラブルシューティング

以下のコマンドは、Horovod を試しているときに発生した過去のエラーを取得するのに役立ちます。

• 何らかの理由でトレーニングがクラッシュした場合、mpirun は各マシン上のすべての Python プロセスをクリーンアップできないことがあります。その場合は、次のジョブを開始する前に、以下のようにすべてのマシン上の Python プロセスを強制終了します。

runclust hosts "pkill -9 python"

• プロセスがエラーなしで突然終了した場合は、ログフォルダを削除してみてください。

runclust hosts "rm -rf ~/imagenet_resnet/"

• 原因不明のその他の問題が発生した場合は、ディスク容量を確認してください。チェックアウトされた場合は、チェックポイントとデータがいっぱいなため、ログフォルダを削除してみてください。各メンバーのボリュームのサイズを大きくすることもできます。

runclust hosts "df /"

• 最後の手段として、リブートを試みることもできます。

runclust hosts "sudo reboot"

サポートされていないインスタンスタイプで TensorFlow と Horovod の使用を試みると、次のエラーが表示される可能性があります。

---------------------------------------------------------------------------NotFoundError Traceback (most recent call last)<ipython-input-3-e90ed6cabab4> in <module>()----> 1 import horovod.tensorflow as hvd

~/anaconda3/envs/tensorflow_p36/lib/python3.6/site-packages/horovod/tensorflow/__init__.py in <module>()

69

Page 74: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドElastic Fabric Adapter

** *34* check_extension('horovod.tensorflow', 'HOROVOD_WITH_TENSORFLOW', __file__, 'mpi_lib')** *35* ---> 36 from horovod.tensorflow.mpi_ops import allgather, broadcast, _allreduce** *37* from horovod.tensorflow.mpi_ops import init, shutdown** *38* from horovod.tensorflow.mpi_ops import size, local_size, rank, local_rank

~/anaconda3/envs/tensorflow_p36/lib/python3.6/site-packages/horovod/tensorflow/mpi_ops.py in <module>()** *56* ** *57* MPI_LIB = _load_library('mpi_lib' + get_ext_suffix(),---> 58 ['HorovodAllgather', 'HorovodAllreduce'])** *59* ** *60* _basics = _HorovodBasics(__file__, 'mpi_lib')

~/anaconda3/envs/tensorflow_p36/lib/python3.6/site-packages/horovod/tensorflow/mpi_ops.py in _load_library(name, op_list)** *43* """** *44* filename = resource_loader.get_path_to_datafile(name)---> 45 library = load_library.load_op_library(filename)** *46* for expected_op in (op_list or []):** *47* for lib_op in library.OP_LIST.op:

~/anaconda3/envs/tensorflow_p36/lib/python3.6/site-packages/tensorflow/python/framework/load_library.py in load_op_library(library_filename)** *59* RuntimeError: when unable to load the library or get the python wrappers.** *60* """---> 61 lib_handle = py_tf.TF_LoadLibrary(library_filename)** *62* ** *63* op_list_str = py_tf.TF_GetOpList(lib_handle)

NotFoundError: /home/ubuntu/anaconda3/envs/tensorflow_p36/lib/python3.6/site-packages/horovod/tensorflow/mpi_lib.cpython-36m-x86_64-linux-gnu.so: undefined symbol: _ZN10tensorflow14kernel_factory17OpKernelRegistrar12InitInternalEPKNS_9KernelDefEN4absl11string_viewEPFPNS_8OpKernelEPNS_20OpKernelConstructionEE

詳細

ユーティリティと例については、DLAMI のホームディレクトリの ~/examples/horovod フォルダを参照してください。

他のチュートリアルや例については、「Horovod GitHub プロジェクト」を参照してください。

Elastic Fabric AdapterElastic Fabric Adapter (EFA) は、ハイパフォーマンスコンピューティング (HPC) アプリケーションを高速化するために、DLAMI インスタンスにアタッチできるネットワークデバイスです。EFA では、AWS クラウドが提供するスケーラビリティ、柔軟性、伸縮性により、オンプレミスの HPC クラスターのアプリケーションパフォーマンスを実現できます。

以下のトピックでは、EFA と DLAMI の使用を開始する方法について説明します。

トピック• EFA で AWS Deep Learning AMI インスタンスを起動する (p. 70)• EFA で DLAMIを使用する (p. 74)

EFA で AWS Deep Learning AMI インスタンスを起動する最新版 DLAMI は EFA ととも に使用する準備ができており、GPU インスタンス用の必要なドライバ、カーネルモジュール、Libfabric、OpenMPI および NCCL OFI プラグイン が付属しています。

70

Page 75: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドElastic Fabric Adapter

サポートされている CUDA バージョン: EFA の NCCL アプリケーションは、CUDA-10.0 およびCUDA-10.1 でのみサポートされます。これは、NCCL OFI プラグインが 2.4.2 以下の NCCL バージョンを必要とするためです。

注意:

• EFA 上のmpirunを使用して NCCL アプリケーションを実行する際、以下のため、EFA がサポートされているインストレーションへの完全なパスを指定する必要があります。

/opt/amazon/openmpi/bin/mpirun <command>

• アプリケーションで EFA を使用するには、「EFA で DLAMIを使用する (p. 74)」に示すように、mpirun コマンドに FI_PROVIDER="efa" を追加します。

トピック• EFA 対応のセキュリティグループを準備する (p. 71)• インスタンスの起動 (p. 71)• EFA 添付ファイルの確認 (p. 72)

EFA 対応のセキュリティグループを準備する

EFA には、セキュリティグループ自体とのインバウンドおよびアウトバウンドのトラフィックをすべて許可するセキュリティグループが必要です。 詳細については、「EFA ドキュメント」を参照してください。

1. Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) を開きます。2. ナビゲーションペインで [Security Groups (セキュリティグループ)] を選択し、[Create Security Group

(セキュリティグループの作成)] を選択します。3. [Create Security Group (セキュリティグループの作成)] ウィンドウで以下を行います。

• [Security group name (セキュリティグループ名)] に、EFA-enabled security group のようなセキュリティグループがすぐ分かる名前を入力します。

• (オプション) [Description (説明)] に、セキュリティグループの簡単な説明を入力します。• [VPC] で、EFA 対応のインスタンスを起動する VPC を選択します。• [Create (作成)] を選択します。

4. 作成したセキュリティグループを選択し、[Description (説明)] タブで [Group ID (グループ ID)] をコピーします。

5. [Inbound (インバウンド)] タブおよび [Outbound (アウトバウンド)] タブで、次の手順を実行します。

• [Edit (編集)] を選択します。• [Type (タイプ) ] で、[All traffic (すべてのトラフィック)] を選択します。• [Source (ソース)] で [Custom (カスタム)] を選択します。• コピーしたセキュリティグループ ID をフィールドに貼り付けます。• [Save (保存)] を選択します。 

6. 「Linux インスタンスのインバウンドトラフィックの承認」を参照するインバウンドトラフィックを有効にします。このステップを抜かすと、DLAMI インスタンスと通信できなくなります。

インスタンスの起動

詳細については、「 クラスターのプレイスメントグループで EFA 対応のインスタンスを起動する」を参照してください。

1. Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) を開きます。

71

Page 76: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドElastic Fabric Adapter

2. [Launch Instance (インスタンスを起動)] を選択します。3. [Choose an AMI (AMI を選択してください)] のページで、[Deep Learning AMI (Ubuntu 18.04) Version

25.0 (深層学習 AMI (Ubuntu 18.04) バージョン 25.0)] を選択します。4. [Choose an Instance Type (インスタンスタイプの選択)] のページで、次のいずれかのサポート対象

のインスタンスタイプを選択し、[Next: Configure Instance Details (次の手順: インスタンスの詳細の設定)] を選択します。 対応インスタンスの一覧に関しては、https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa-start.htmlを参照してください。

5. [Configure Instance Details (インスタンスの詳細の設定)] ページで、以下の操作を実行します。

• [Number of instances (インスタンス数)] に、起動する EFA 対応のインスタンスの数を入力します。• [Network (ネットワーク)] および [Subnet (サブネット)] で、インスタンスを起動する VPC およびサ

ブネットを選択します。• [オプション] [Placement group (プレイスメントグループ)] で、[Add instance to placement group

(インスタンスをプレイスメントグループに追加)] を選択します。最適なパフォーマンスを得るには、プレイスメントグループ内でインスタンスを起動します。

• [オプション] [Placement group name (プレイスメントグループ名)] で、[Add to a new placementgroup (新しいプレイスメントグループに追加)] のチェックボックスをオンにし、プレイスメントグループに分かりやすい名前を入力して、[Placement group strategy (プレイスメントグループストラテジー)] で [Cluster (クラスター)] を選択します。

• このページで「Elastic Fabric Adapter」を有効にしてください。このオプションが無効になっている場合は、選択したインスタンスタイプに対応するサブネットに変更します。 

• [Network Interfaces (ネットワークインターフェイス) ] セクションの [eth0] で、[New networkinterface (新しいネットワークインターフェイス) ] を選択します。必要に応じて、プライマリ IPv4アドレスと 1 つ以上のセカンダリ IPv4 アドレスを指定できます。関連付けられている IPv6 CIDRブロックを持つサブネットにインスタンスを起動する場合は、必要に応じて、プライマリ IPv6 アドレスと 1 つ以上のセカンダリ IPv6 アドレスを指定することができます。

• [Next: Add Storage (次の手順: ストレージの追加) ] を選択します。6. [Add Storage (ストレージの追加)] のページで、AMI で指定されたボリュームとインスタンスにアタッ

チするボリューム (例: ルートデバイスのボリューム) を指定し、[Next: Add Tags (次へ: タグの追加)]を選択します。

7. [Add Tags (タグの追加)] のページで、ユーザーに分かりやすい名前などを使ってインスタンスのタグを指定し、[Next: Configure Security Group (次の手順: セキュリティグループの設定)] を選択します。

8. [Configure Security Group (セキュリティグループの設定)] のページの [Assign a security group (セキュリティグループの割り当て)] で、[Select an existing security group (既存のセキュリティグループの選択)] を選択し、前に作成したセキュリティグループを選択します。

9. [Review and Launch (確認および起動)] を選択します。10. [Review Instance Launch (インスタンス作成の確認)] のページで設定を確認し、[Launch (起動)] を選

択してキーペアを選択し、インスタンスを起動します。

EFA 添付ファイルの確認

コンソールから

インスタンスを起動したら、AWS コンソールでインスタンスの詳細を確認します。これを行うには、EC2コンソールでインスタンスを選択し、ページ下のペインにある [Description (説明)] タブを確認します。[Network Interfaces: eth0 (ネットワークインターフェイス: eth0)] というパラメータを探し、eth0 をクリックするとポップアップが開きます。「Elastic Fabric Adapter」が有効になっていることを確認します。

EFA が有効になっていない場合は、次のいずれかの方法でこれを修正できます。

• EC2 インスタンスを終了し、同じ手順で新しいインスタンスを起動します。EFA が添付されていることを確認します。

72

Page 77: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドElastic Fabric Adapter

• 既存のインスタンスに EFA を添付します。

1. EC2 コンソールで、[Network Interfaces (ネットワークインターフェイス)] に移動します。2. [Create a Network Interface (ネットワークインターフェイスを作成)] をクリックします。3. インスタンスが入っている同じサブネットを選択します。4. 必ず「Elastic Fabric Adapter」を有効にし、[Create (作成)] をクリックします。5. [EC2 Instances (EC2 インスタンス)] タブに戻り、インスタンスを選択します。6. [Actions: Instance State (アクション: インスタンスの状態)] に移動し、EFA に添付する前にインス

タンスを停止します。7. [Actions (アクション)] から、[Networking: Attach Network Interface (ネットワーキング: ネットワー

クインタフェイスの接続)] を選択します。8. 先ほど作成したインターフェイスを選択し、[Attach (接続)] をクリックします。9. インスタンスを再起動します。

インスタンスから

DLAMI にすでに、次のテストスクリプトが存在します。これを実行して、カーネルモジュールが正しくロードされていることを確認します。

$ fi_info -p efa

出力は以下のようになります。

provider: efa    fabric: EFA-fe80::e5:56ff:fe34:56a8    domain: efa_0-rdm    version: 2.0    type: FI_EP_RDM    protocol: FI_PROTO_EFAprovider: efa    fabric: EFA-fe80::e5:56ff:fe34:56a8    domain: efa_0-dgrm    version: 2.0    type: FI_EP_DGRAM    protocol: FI_PROTO_EFAprovider: efa;ofi_rxd    fabric: EFA-fe80::e5:56ff:fe34:56a8    domain: efa_0-dgrm    version: 1.0    type: FI_EP_RDM    protocol: FI_PROTO_RXD

セキュリティグループ構成の確認

DLAMI にすでに、次のテストスクリプトが存在します。これを実行して、作成したセキュリティグループが正しく設定されていることを確認します。

$ cd ~/src/bin/efa-tests/$ ./efa_test.sh

出力は以下のようになります。

Starting server...Starting client...bytes   #sent   #ack     total       time     MB/sec    usec/xfer   Mxfers/sec

73

Page 78: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドElastic Fabric Adapter

64      10      =10      1.2k        0.02s      0.06    1123.55       0.00256     10      =10      5k          0.00s     17.66      14.50       0.071k      10      =10      20k         0.00s     67.81      15.10       0.074k      10      =10      80k         0.00s    237.45      17.25       0.0664k     10      =10      1.2m        0.00s    921.10      71.15       0.011m      10      =10      20m         0.01s   2122.41     494.05       0.00

ハングアップしたり完了しない場合は、セキュリティグループに正しいインバウンド/アウトバウンドルールが設定されていることを確認します。

EFA で DLAMIを使用する次の項では、EFA を使用して、AWS Deep Learning AMI でマルチノードアプリケーションを実行する方法について説明します。

トピック• EFA でマルチノードアプリケーションを実行 (p. 74)

EFA でマルチノードアプリケーションを実行

ノードのクラスター全体でアプリケーションを実行するには、いくつかの構成が必要です。

パスワードレス SSH の有効化

クラスター内の 1 つのノードをリーダーノードとして選択します。残りのノードはメンバーノードと呼ばれます。 

1. リーダーノードで、RSA キーペアを生成します。

ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa

2. リーダーノードのプライベートキーの許可を変更します。

chmod 600 ~/.ssh/id_rsa

3. パブリックキーを ~/.ssh/id_rsa.pub にコピーし、クラスター内のメンバーノードの ~/.ssh/authorized_keys に追加します。

4. これで、プライベート IP を使用して、リーダーノードからメンバーノードに直接ログインできるようになります。

ssh <member private ip>

5. strictHostKeyChecking を無効にし、リーダーノードの ~/.ssh/config ファイルに以下を追加することで、リーダーノードでエージェント転送を有効化します。

Host * ForwardAgent yesHost * StrictHostKeyChecking no

6. Amazon Linux および Amazon Linux 2 インスタンスでは、リーダーノードで次のコマンドを実行して、設定ファイルへの正しいアクセス権限を付与します。

chmod 600 ~/.ssh/config

74

Page 79: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドElastic Fabric Adapter

Hosts ファイルの作成

リーダーノードで、クラスター内のノードを識別する Hosts ファイルを作成します。Hosts ファイルには、クラスター内の各ノードのエントリが必要です。〜/hosts ファイルを作成し、次のようにプライベート IP を使用して各ノードを追加します。 

localhost slots=8<private ip of node 1> slots=8<private ip of node 2> slots=8

P3dn.24xlarge での 2 ノード NCCL プラグインチェック

nccl_message_transfer は、NCCL OFI プラグインが期待どおりに動作していることを確認するための簡単なテストです。このテストでは、NCCL の接続の確立とデータ転送 API の機能を検証します。EFA でNCCL アプリケーションを実行と同時に、例に示すように mpirun への完全なパスを使用してください。クラスター内のインスタンス数と GPU に基づき、np と N のパラメータを変更します。詳細については、「AWS OFI NCCL ドキュメント」を参照してください。

/opt/amazon/openmpi/bin/mpirun -n 2 -N 1 --hostfile hosts ~/src/bin/efa-tests/efa-cuda-10.0/nccl_message_transfer

出力は次のようになります。出力を確認して、OFI プロバイダとして使用されていることを EFA 確認します。

INFO: Function: ofi_init Line: 702: NET/OFI Forcing AWS OFI ndev 4INFO: Function: ofi_init Line: 714: NET/OFI Selected Provider is efaINFO: Function: main Line: 49: NET/OFI Process rank 1 started. NCCLNet device used on ip-172-31-15-30 is AWS Libfabric.INFO: Function: main Line: 53: NET/OFI Received 4 network devicesINFO: Function: main Line: 57: NET/OFI Server: Listening on dev 0INFO: Function: ofi_init Line: 702: NET/OFI Forcing AWS OFI ndev 4INFO: Function: ofi_init Line: 714: NET/OFI Selected Provider is efaINFO: Function: main Line: 49: NET/OFI Process rank 0 started. NCCLNet device used on ip-172-31-15-30 is AWS Libfabric.INFO: Function: main Line: 53: NET/OFI Received 4 network devicesINFO: Function: main Line: 57: NET/OFI Server: Listening on dev 0INFO: Function: main Line: 96: NET/OFI Send connection request to rank 0INFO: Function: main Line: 69: NET/OFI Send connection request to rank 1INFO: Function: main Line: 100: NET/OFI Server: Start accepting requestsINFO: Function: main Line: 73: NET/OFI Server: Start accepting requestsINFO: Function: main Line: 103: NET/OFI Successfully accepted connection from rank 0INFO: Function: main Line: 107: NET/OFI Rank 1 posting 255 receive buffersINFO: Function: main Line: 76: NET/OFI Successfully accepted connection from rank 1INFO: Function: main Line: 80: NET/OFI Sent 255 requests to rank 1INFO: Function: main Line: 131: NET/OFI Got completions for 255 requests for rank 0INFO: Function: main Line: 131: NET/OFI Got completions for 255 requests for rank 1

P3dn.24xlarge でのマルチノード NCCL パフォーマンステスト

EFA で NCCL パフォーマンステストを確認するには、公式の NCCL-Tests Repo で実施可能な標準 NCCLパフォーマンステストを実施します。DLAMI には、CUDA 10 と CUDA 10.1 の両方に対して構築されたこのテストが付属しています。同様に、EFA を使用して独自のスクリプトを実行できます。

独自のスクリプトを作成する場合は、次のガイダンスを参照してください。

• FI_PROVIDER="efa" フラグを指定し、EFA を使用できるようにします。• EFA で NCCL アプリケーションを実行中に、例に示すように、mpirun への完全なパスを使用します。• クラスター内のインスタンスの数と GPU の数に基づいて、パラメータ np と N を変更します。• NCCL_DEBUG=INFO フラグを追加し、ログの使用状況が、[Selected Provider is EFA] EFA になってい

ることを確認します。

75

Page 80: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドElastic Fabric Adapter

• いずれかのメンバーノードでコマンド watch nvidia-smi を使用し、GPU の使用状況を監視します。

$ /opt/amazon/openmpi/bin/mpirun -x FI_PROVIDER="efa" -n 16 -N 8 -x NCCL_DEBUG=INFO -x FI_EFA_TX_MIN_CREDITS=64 -x NCCL_TREE_THRESHOLD=0 --hostfile hosts --mca btl tcp,self --mca btl_tcp_if_exclude lo,docker0 --bind-to none $HOME/src/bin/efa-tests/efa-cuda-10.0/all_reduce_perf -b 8 -e 1G -f 2 -g 1 -c 1 -n 100

出力は次のようになります。

# nThread 1 nGpus 1 minBytes 8 maxBytes 1073741824 step: 2(factor) warmup iters: 5 iters: 100 validation: 1## Using devices# Rank 0 Pid 3801 on ip-172-31-41-105 device 0 [0x00] Tesla V100-SXM2-32GB# Rank 1 Pid 3802 on ip-172-31-41-105 device 1 [0x00] Tesla V100-SXM2-32GB# Rank 2 Pid 3803 on ip-172-31-41-105 device 2 [0x00] Tesla V100-SXM2-32GB# Rank 3 Pid 3804 on ip-172-31-41-105 device 3 [0x00] Tesla V100-SXM2-32GB# Rank 4 Pid 3805 on ip-172-31-41-105 device 4 [0x00] Tesla V100-SXM2-32GB# Rank 5 Pid 3807 on ip-172-31-41-105 device 5 [0x00] Tesla V100-SXM2-32GB# Rank 6 Pid 3810 on ip-172-31-41-105 device 6 [0x00] Tesla V100-SXM2-32GB# Rank 7 Pid 3813 on ip-172-31-41-105 device 7 [0x00] Tesla V100-SXM2-32GB# Rank 8 Pid 4124 on ip-172-31-41-36 device 0 [0x00] Tesla V100-SXM2-32GB# Rank 9 Pid 4125 on ip-172-31-41-36 device 1 [0x00] Tesla V100-SXM2-32GB# Rank 10 Pid 4126 on ip-172-31-41-36 device 2 [0x00] Tesla V100-SXM2-32GB# Rank 11 Pid 4127 on ip-172-31-41-36 device 3 [0x00] Tesla V100-SXM2-32GB# Rank 12 Pid 4128 on ip-172-31-41-36 device 4 [0x00] Tesla V100-SXM2-32GB# Rank 13 Pid 4130 on ip-172-31-41-36 device 5 [0x00] Tesla V100-SXM2-32GB# Rank 14 Pid 4132 on ip-172-31-41-36 device 6 [0x00] Tesla V100-SXM2-32GB# Rank 15 Pid 4134 on ip-172-31-41-36 device 7 [0x00] Tesla V100-SXM2-32GBip-172-31-41-105:3801:3801 [0] NCCL INFO Bootstrap : Using [0]ens5:172.31.41.105<0>ip-172-31-41-105:3801:3801 [0] NCCL INFO NET/OFI Forcing AWS OFI ndev 4ip-172-31-41-105:3801:3801 [0] NCCL INFO NET/OFI Selected Provider is efaNCCL version 2.4.8+cuda10.0ip-172-31-41-105:3810:3810 [6] NCCL INFO Bootstrap : Using [0]ens5:172.31.41.105<0>ip-172-31-41-105:3810:3810 [6] NCCL INFO NET/OFI Forcing AWS OFI ndev 4ip-172-31-41-105:3810:3810 [6] NCCL INFO NET/OFI Selected Provider is efaip-172-31-41-105:3805:3805 [4] NCCL INFO Bootstrap : Using [0]ens5:172.31.41.105<0>ip-172-31-41-105:3805:3805 [4] NCCL INFO NET/OFI Forcing AWS OFI ndev 4ip-172-31-41-105:3805:3805 [4] NCCL INFO NET/OFI Selected Provider is efaip-172-31-41-105:3807:3807 [5] NCCL INFO Bootstrap : Using [0]ens5:172.31.41.105<0>ip-172-31-41-105:3807:3807 [5] NCCL INFO NET/OFI Forcing AWS OFI ndev 4ip-172-31-41-105:3807:3807 [5] NCCL INFO NET/OFI Selected Provider is efaip-172-31-41-105:3803:3803 [2] NCCL INFO Bootstrap : Using [0]ens5:172.31.41.105<0>ip-172-31-41-105:3803:3803 [2] NCCL INFO NET/OFI Forcing AWS OFI ndev 4ip-172-31-41-105:3803:3803 [2] NCCL INFO NET/OFI Selected Provider is efaip-172-31-41-105:3813:3813 [7] NCCL INFO Bootstrap : Using [0]ens5:172.31.41.105<0>ip-172-31-41-105:3802:3802 [1] NCCL INFO Bootstrap : Using [0]ens5:172.31.41.105<0>ip-172-31-41-105:3813:3813 [7] NCCL INFO NET/OFI Forcing AWS OFI ndev 4ip-172-31-41-105:3813:3813 [7] NCCL INFO NET/OFI Selected Provider is efaip-172-31-41-105:3802:3802 [1] NCCL INFO NET/OFI Forcing AWS OFI ndev 4ip-172-31-41-105:3802:3802 [1] NCCL INFO NET/OFI Selected Provider is efaip-172-31-41-105:3804:3804 [3] NCCL INFO Bootstrap : Using [0]ens5:172.31.41.105<0>ip-172-31-41-105:3804:3804 [3] NCCL INFO NET/OFI Forcing AWS OFI ndev 4ip-172-31-41-105:3804:3804 [3] NCCL INFO NET/OFI Selected Provider is efaip-172-31-41-105:3801:3862 [0] NCCL INFO Setting affinity for GPU 0 to ffffffff,ffffffff,ffffffffip-172-31-41-105:3801:3862 [0] NCCL INFO NCCL_TREE_THRESHOLD set by environment to 0.ip-172-31-41-36:4128:4128 [4] NCCL INFO Bootstrap : Using [0]ens5:172.31.41.36<0>ip-172-31-41-36:4128:4128 [4] NCCL INFO NET/OFI Forcing AWS OFI ndev 4ip-172-31-41-36:4128:4128 [4] NCCL INFO NET/OFI Selected Provider is efa

-----------------------------some output truncated-----------------------------------

76

Page 81: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドElastic Fabric Adapter

ip-172-31-41-105:3804:3869 [3] NCCL INFO comm 0x7f8c5c0025b0 rank 3 nranks 16 cudaDev 3 nvmlDev 3 - Init COMPLETE## out-of-place in-place# size count type redop time algbw busbw error time algbw busbw error# (B) (elements) (us) (GB/s) (GB/s) (us) (GB/s) (GB/s)ip-172-31-41-105:3801:3801 [0] NCCL INFO Launch mode Parallelip-172-31-41-36:4124:4191 [0] NCCL INFO comm 0x7f28400025b0 rank 8 nranks 16 cudaDev 0 nvmlDev 0 - Init COMPLETEip-172-31-41-36:4126:4192 [2] NCCL INFO comm 0x7f62240025b0 rank 10 nranks 16 cudaDev 2 nvmlDev 2 - Init COMPLETEip-172-31-41-105:3802:3867 [1] NCCL INFO comm 0x7f5ff00025b0 rank 1 nranks 16 cudaDev 1 nvmlDev 1 - Init COMPLETEip-172-31-41-36:4132:4193 [6] NCCL INFO comm 0x7ffa0c0025b0 rank 14 nranks 16 cudaDev 6 nvmlDev 6 - Init COMPLETEip-172-31-41-105:3803:3866 [2] NCCL INFO comm 0x7fe9600025b0 rank 2 nranks 16 cudaDev 2 nvmlDev 2 - Init COMPLETEip-172-31-41-36:4127:4188 [3] NCCL INFO comm 0x7f6ad00025b0 rank 11 nranks 16 cudaDev 3 nvmlDev 3 - Init COMPLETEip-172-31-41-105:3813:3868 [7] NCCL INFO comm 0x7f341c0025b0 rank 7 nranks 16 cudaDev 7 nvmlDev 7 - Init COMPLETEip-172-31-41-105:3810:3864 [6] NCCL INFO comm 0x7f5f980025b0 rank 6 nranks 16 cudaDev 6 nvmlDev 6 - Init COMPLETEip-172-31-41-36:4128:4187 [4] NCCL INFO comm 0x7f234c0025b0 rank 12 nranks 16 cudaDev 4 nvmlDev 4 - Init COMPLETEip-172-31-41-36:4125:4194 [1] NCCL INFO comm 0x7f2ca00025b0 rank 9 nranks 16 cudaDev 1 nvmlDev 1 - Init COMPLETEip-172-31-41-36:4134:4190 [7] NCCL INFO comm 0x7f0ca40025b0 rank 15 nranks 16 cudaDev 7 nvmlDev 7 - Init COMPLETEip-172-31-41-105:3807:3865 [5] NCCL INFO comm 0x7f3b280025b0 rank 5 nranks 16 cudaDev 5 nvmlDev 5 - Init COMPLETEip-172-31-41-36:4130:4189 [5] NCCL INFO comm 0x7f62080025b0 rank 13 nranks 16 cudaDev 5 nvmlDev 5 - Init COMPLETEip-172-31-41-105:3805:3863 [4] NCCL INFO comm 0x7fec100025b0 rank 4 nranks 16 cudaDev 4 nvmlDev 4 - Init COMPLETE 8 2 float sum 145.4 0.00 0.00 2e-07 152.8 0.00 0.00 1e-07 16 4 float sum 137.3 0.00 0.00 1e-07 137.2 0.00 0.00 1e-07 32 8 float sum 137.0 0.00 0.00 1e-07 137.4 0.00 0.00 1e-07 64 16 float sum 137.7 0.00 0.00 1e-07 137.5 0.00 0.00 1e-07 128 32 float sum 136.2 0.00 0.00 1e-07 135.3 0.00 0.00 1e-07 256 64 float sum 136.4 0.00 0.00 1e-07 137.4 0.00 0.00 1e-07 512 128 float sum 135.5 0.00 0.01 1e-07 151.0 0.00 0.01 1e-07 1024 256 float sum 151.0 0.01 0.01 2e-07 137.7 0.01 0.01 2e-07 2048 512 float sum 138.1 0.01 0.03 5e-07 138.1 0.01 0.03 5e-07 4096 1024 float sum 140.5 0.03 0.05 5e-07 140.3 0.03 0.05 5e-07 8192 2048 float sum 144.6 0.06 0.11 5e-07 144.7 0.06 0.11 5e-07 16384 4096 float sum 149.4 0.11 0.21 5e-07 149.3 0.11 0.21 5e-07 32768 8192 float sum 156.7 0.21 0.39 5e-07 183.9 0.18 0.33 5e-07 65536 16384 float sum 167.7 0.39 0.73 5e-07 183.6 0.36 0.67 5e-07

77

Page 82: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドGPU のモニタリングおよび最適化

131072 32768 float sum 193.8 0.68 1.27 5e-07 193.0 0.68 1.27 5e-07 262144 65536 float sum 243.9 1.07 2.02 5e-07 258.3 1.02 1.90 5e-07 524288 131072 float sum 309.0 1.70 3.18 5e-07 309.0 1.70 3.18 5e-07 1048576 262144 float sum 709.3 1.48 2.77 5e-07 693.2 1.51 2.84 5e-07 2097152 524288 float sum 1116.4 1.88 3.52 5e-07 1105.7 1.90 3.56 5e-07 4194304 1048576 float sum 2088.9 2.01 3.76 5e-07 2157.3 1.94 3.65 5e-07 8388608 2097152 float sum 2869.7 2.92 5.48 5e-07 2847.2 2.95 5.52 5e-07 16777216 4194304 float sum 4631.7 3.62 6.79 5e-07 4643.9 3.61 6.77 5e-07 33554432 8388608 float sum 8769.2 3.83 7.17 5e-07 8743.5 3.84 7.20 5e-07 67108864 16777216 float sum 16964 3.96 7.42 5e-07 16846 3.98 7.47 5e-07 134217728 33554432 float sum 33403 4.02 7.53 5e-07 33058 4.06 7.61 5e-07 268435456 67108864 float sum 59045 4.55 8.52 5e-07 58625 4.58 8.59 5e-07 536870912 134217728 float sum 115842 4.63 8.69 5e-07 115590 4.64 8.71 5e-07 1073741824 268435456 float sum 228178 4.71 8.82 5e-07 224997 4.77 8.95 5e-07# Out of bounds values : 0 OK# Avg bus bandwidth : 2.80613#

GPU のモニタリングおよび最適化次のセクションでは、GPU の最適化とモニタリングオプションについて説明します。このセクションは、モニタリング、監督、事前処理、トレーニングが伴う一般的なワークフローと同様に編成されています。

• モニタリング (p. 78)• CloudWatch を使用して GPU をモニタリングする (p. 79)

• 最適化 (p. 81)• 前処理 (p. 82)• トレーニング (p. 83)

モニタリングDLAMI には、いくつかの GPU モニタリングツールがプリインストールされています。このガイドでは、ダウンロードしてインストールするために利用できるツールについても言及されています。

• CloudWatch を使用して GPU をモニタリングする (p. 79) - Amazon CloudWatch での GPU 使用状況統計を報告するプリインストールされたユーティリティ。

• nvidia-smi CLI - 全体的な GPU コンピューティングおよびメモリ使用率をモニタリングするユーティリティ。これは、AWS Deep Learning AMI (DLAMI) にプリインストールされています。

• NVML C ライブラリ - GPU モニタリングおよび管理機能に直接アクセスできる C ベースの API。これは、内部の nvidia-smi CLI によって使用され、DLAMI にプリインストールされています。また、それらの言語での開発を容易にするため、Python および Perl がバインドされています。DLAMI にプリインストールされた gpumon.py ユーティリティは、nvidia-ml-py の pynvml パッケージを使用しています。

• NVIDIA DCGM - クラスター管理ツール。開発者ページにアクセスし、このツールをインストールして設定する方法を確認してください。

78

Page 83: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドGPU のモニタリングおよび最適化

Tip

NVIDIA の開発者ブログで、DLAMI にインストールされている CUDA ツールの使用方法に関する最新情報を確認してください。

• (「Monitoring TensorCore utilization using Nsight IDE and nvprof」)。

CloudWatch を使用して GPU をモニタリングする

GPU で DLAMI を使用すると、トレーニングや推論中にその使用状況を追跡する方法が必要になることがあります。これは、データパイプラインの最適化や深層学習ネットワークのチューニングに役立ちます。

gpumon.py というユーティリティは、DLAMI にプリインストールされています。これは、CloudWatch と統合されており、GPU ごとの使用状況 (GPU メモリ、GPU 温度、GPU 電源) のモニタリングをサポートしています。このスクリプトは、モニタリングしたデータを CloudWatch に定期的に送信します。スクリプトでいくつかの設定を変更することで、CloudWatch に送信されるデータの詳細度レベルを設定できます。ただし、スクリプトを開始する前に、CloudWatch がメトリクスを受け取るように設定する必要があります。

CloudWatch を使用した GPU モニタリングを設定して実行する方法

1. IAM ユーザーを作成するか、既存のユーザーを変更し、メトリクスを CloudWatch に発行するためのポリシーを追加します。新しいユーザーを作成する場合、認証情報をメモしてください。次のステップで必要になります。

検索する IAM ポリシーは「cloudwatch:PutMetricData」です。追加されるポリシーは次のようになります。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "cloudwatch:PutMetricData", ], "Effect": "Allow", "Resource": "*" } ]}

Tip

IAM ユーザーの作成と CloudWatch のポリシーの追加の詳細については、 CloudWatch のドキュメントを参照してください。

2. DLAMI で、AWS の設定を実行し、IAM ユーザー認証情報を指定します。

$ aws configure

3. 実行する前に、gpumon ユーティリティにいくつかの変更が必要になる場合があります。gpumonユーティリティと README は次の場所にあります。

Folder: ~/tools/GPUCloudWatchMonitorFiles: ~/tools/GPUCloudWatchMonitor/gpumon.py ~/tools/GPUCloudWatchMonitor/README

オプション:

79

Page 84: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドGPU のモニタリングおよび最適化

• インスタンスが us-east-1 でない場合、gpumon.py でリージョンを変更します。• CloudWatch namespace や、store_resolution によるレポートの期間などの他のパラメータを

変更します。4. 現在、スクリプトでは Python 2.7 のみがサポートされています。希望するフレームワークの Python

2.7 環境を有効化するか、DLAMI の一般的な Python 2.7 環境を有効化します。

$ source activate python2

5. gpumon ユーティリティをバックグラウンドで実行します。

(python2)$ gpumon.py &

6. ブラウザで https://console.aws.amazon.com/cloudwatch/ を開き、メトリクスを選択します。名前空間は「DeepLearningTrain」になります。

Tip

gpumon.py を変更することで名前空間を変更できます。store_resolution を調整することで、レポートの間隔を調整することもできます。

次に示すのは、p2.8xlarge インスタンス上のトレーニングジョブをモニタリングする gpumon.py の実行について報告する CloudWatch グラフの例です。

80

Page 85: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドGPU のモニタリングおよび最適化

必要に応じて、GPU モニタリングおよび最適化に関する他のトピックも参照できます。

• モニタリング (p. 78)• CloudWatch を使用して GPU をモニタリングする (p. 79)

• 最適化 (p. 81)• 前処理 (p. 82)• トレーニング (p. 83)

最適化GPU を最大限に活用するため、データパイプラインを最適化し、深層学習ネットワークをチューニングできます。次の図が示すように、ニューラルネットワークのネイティブまたは基本実装では、GPU が一貫性なく使用され、潜在能力が十分に引き出されない可能性があります。事前処理とデータのロードを最適化すると、CPU から GPU へのボトルネックを減らすことができます。ハイブリダイゼーションを使用し

81

Page 86: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドGPU のモニタリングおよび最適化

(フレームワークでサポートされている場合)、バッチサイズを調整してコールを同期することで、ニューラルネットワーク自体を調整することができます。ほとんどのフレームワークでは、多精度 (float16 または int8) トレーニングを使用することもできます。スループットの向上に劇的な効果が及ぶ可能性があります。

以下の図は、さまざまな最適化を適用した場合の累積的なパフォーマンス向上を示しています。結果は、処理するデータと最適化するネットワークによって異なります。

GPU パフォーマンスの最適化の例。グラフの出典: MXNet と Gluon のパフォーマンスのヒント

次のガイドでは、DLAMI を使用し、GPU パフォーマンスの向上に役立つオプションについて紹介します。

トピック• 前処理 (p. 82)• トレーニング (p. 83)

前処理トランスフォーメーションやオーグメンテーションによるデータの事前処理は、多くの場合、CPU バウンド処理であり、パイプライン全体でボトルネックになる可能性があります。フレームワークには、画像処理用の組み込み演算子がありますが、DALI (データオーグメンテーションライブラリ) はフレームワークの組み込みオプションよりパフォーマンスが上回ることを実証しています。

82

Page 87: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドGPU のモニタリングおよび最適化

• NVIDIA データオーグメンテーションライブラリ (DALI): DALI は、データオーグメンテーションを GPUにオフロードします。DLAMI にはプリインストールされていませんが、DLAMI や他の Amazon ElasticCompute Cloud インスタンスに DLAMI をインストールするか、サポートされているフレームワークコンテナをロードすることにより、DLAMI にアクセスできます。詳細については、NVIDIA ウェブサイトの DALI プロジェクトページを参照してください。

Tip

GPU Tech Conference ウェブサイトにあるデータパイプラインの最適化に関するビデオをご覧ください。これには、DALI を使用する MXNet、TensorFlow、および Caffe2 の例が含まれます。

• nvJPEG: C プログラマー向け GPU 加速 JPEG デコーダーライブラリ。1 つのイメージまたはバッチのデコードに加えて、深層学習に共通する後続のトランスフォーメーション操作もサポートされています。nvJPEG には DALI が組み込まれています。または、NVIDIA ウェブサイトの nvjpeg ページからダウンロードし、別個に使用することもできます。

必要に応じて、GPU モニタリングおよび最適化に関する他のトピックも参照できます。

• モニタリング (p. 78)• CloudWatch を使用して GPU をモニタリングする (p. 79)

• 最適化 (p. 81)• 前処理 (p. 82)• トレーニング (p. 83)

トレーニング

混合精度トレーニングでは、メモリの量が同じでより大規模なネットワークをデプロイしたり、単精度または倍精度ネットワークと比較してメモリの使用量を減らしたりすることができます。これにより、コンピューティングパフォーマンスが向上します。また、複数ノードに分散したトレーニングでは重要な要素である、少量かつ高速なデータ転送というメリットも得られます。混合精度トレーニングを利用するには、データキャスティングと損失スケーリングを調整する必要があります。混合精度をサポートするフレームワークでこれを行う方法について説明しているガイドを以下に示します。

• NVIDIA Deep Learning SDK - NVCaffe、Caffe2、CNTK、MXNet、PyTorch、TensorFlow、Theano の混合精度実装について説明している NVIDIA ウェブサイト上のドキュメント。

Tip

必ず、ウェブサイトで選択したフレームワークを確認し、「混合精度」または「fp16」を検索して最新の最適化手法を参照してください。以下の混合精度ガイドが役に立つ可能性があります。

• Mixed-precision training with TensorFlow (ビデオ) - NVIDIA ブログサイト上。• Mixed-precision training using float16 with MXNet - MXNet ウェブサイト上のよくある質問記

事。• NVIDIA Apex: a tool for easy mixed-precision training with PyTorch - NVIDIA ウェブサイトのブ

ログ記事。

必要に応じて、GPU モニタリングおよび最適化に関する他のトピックも参照できます。

• モニタリング (p. 78)• CloudWatch を使用して GPU をモニタリングする (p. 79)

• 最適化 (p. 81)• 前処理 (p. 82)

83

Page 88: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドAWS Inferentia

• トレーニング (p. 83)

DLAMI による AWS Inferentia チップAWS Inferentia は、AWS によって設計されたカスタム Machine Learning チップで、高性能な推論予測に使用できます。 チップを使用するには、Amazon Elastic Compute Cloud インスタンスをセットアップし、AWS Neuron ソフトウェア開発キット (SDK) を使用して Inferentia チップを呼び出します。お客様に最高の Inferentia エクスペリエンスを提供するために、Neuron に AWS Deep Learning AMI (DLAMI) が組み込まれています。

以下のトピックでは、Inferentia と DLAMI の使用を開始する方法について説明します。

目次• AWS Neuron で DLAMI インスタンスを起動する (p. 84)• AWS Neuron で DLAMI を使用する (p. 88)

AWS Neuron で DLAMI インスタンスを起動する最新の DLAMI は、AWS Inferentia で使用する準備ができており、AWS Neuron API パッケージが付属しています。DLAMI インスタンスを起動するには、DLAMI の起動と設定を参照してください。 DLAMI を起動したら、ここで説明するステップに従って、AWS Inferentia チップと AWS Neuron リソースがアクティブになっていることを確認します。

目次• ニューロンパッケージのアップグレード (p. 84)• インスタンスの確認 (p. 85)• AWS Inferentia デバイスの識別 (p. 85)• nr_hugepages (p. 85)• ニューロンランタイムデーモン (neuron-rtd) (p. 85)• NeuronCore グループ (p. 86)• モデルのリスト表示 (p. 87)• リソースの使用状況の表示 (p. 87)

ニューロンパッケージのアップグレード

Inf1 インスタンスに接続したら、次のコマンドを使用して Neuron パッケージをアップグレードします。

Amazon Linux 2 の場合、以下を実行します。

sudo yum install aws-neuron-runtime-basesudo yum install aws-neuron-runtimesudo yum install aws-neuron-toolssudo yum install tensorflow-model-server-neuron

Ubuntu Linux の場合は、以下を実行します。

sudo apt-get updatesudo apt-get install aws-neuron-runtime-basesudo apt-get install aws-neuron-runtimesudo apt-get install aws-neuron-toolssudo apt-get install tensorflow-model-server-neuron

84

Page 89: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドAWS Inferentia

インスタンスの確認

インスタンスを使用する前に、インスタンスが正しくセットアップされ、Neuron で設定されていることを確認します。

AWS Inferentia デバイスの識別

インスタンス上の Inferentia デバイスの数を確認するには、次のコマンドを使用します。

neuron-ls

インスタンスに Inferentia デバイスがアタッチされている場合、出力は次のようになります。

...+--------------+---------+--------+-----------+-----------+------+------+|   PCI BDF    | LOGICAL | NEURON |  MEMORY   |  MEMORY   | EAST | WEST ||              |   ID    | CORES  | CHANNEL 0 | CHANNEL 1 |      |      |+--------------+---------+--------+-----------+-----------+------+------+| 0000:00:1f.0 |       0 |      4 | 4096 MB   | 4096 MB   |    0 |    0 |+--------------+---------+--------+-----------+-----------+------+------+

指定された出力は inf1.2xlarge インスタンスから取得されます。最初の列には、PCI バスデバイスの関数 ID が表示されます。2 番目の列には、デバイスに割り当てられた論理 ID が表示されます。この論理ID は、ニューロンランタイムデーモン (neuron-rtd) 設定中に使用されます。3 番目の列は、利用可能なNeuronCores の数を示しています。最後の 2 つの列には、他の Inferentia デバイスへの接続が表示されます。これは単一の Inferentia インスタンスであるため、これらは空です。

nr_hugepages

vm.nr_hugepages は、標準の 4 KB ページサイズに加えて、メモリ内の huge ページを管理するためのシステム全体の設定です。この設定は、huge ページを使用するため、Neuron API にとって重要です。次のコマンドを実行して、このインスタンスの vm.nr_hugepages 設定を確認します。

grep HugePages_Total /proc/meminfo | awk {'print $2'}

最小 vm.nr_hugepages 要件は、AWS Inferentia デバイスあたり 128 です。 

ニューロンランタイムデーモン (neuron-rtd)

Inf1 インスタンスを起動すると、ニューロンランタイムデーモン (neuron-rtd) が自動的に起動します。 次のコマンドを使用して、neuron-rtd がアクティブであることを確認できます。

sudo systemctl status neuron-rtd

出力は以下のようになります。

# neuron-rtd.service - Neuron Runtime Daemon   Loaded: loaded (/usr/lib/systemd/system/neuron-rtd.service; enabled; vendor preset: disabled)   Active: active (running) since Thu 2019-11-14 09:53:47 UTC; 3min 0s ago Main PID: 3351 (neuron-rtd)

85

Page 90: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドAWS Inferentia

    Tasks: 14   Memory: 11.6M   CGroup: /system.slice/neuron-rtd.service           ##3351 /opt/aws/neuron/bin/neuron-rtd -c /opt/aws/neuron/config/neuron-rtd.config

Nov 14 09:53:16 ip-172-31-23-213.ec2.internal systemd[1]: Starting Neuron Runtime Daemon...Nov 14 09:53:18 ip-172-31-23-213.ec2.internal neuron-rtd[3351]: [NRTD:ParseArguments] Using all the BDFs in the ...on!Nov 14 09:53:18 ip-172-31-23-213.ec2.internal nrtd[3351]: [NRTD:krtd_main] krt build using:1.0.3952.0Nov 14 09:53:18 ip-172-31-23-213.ec2.internal nrtd[3351]: [TDRV:reset_mla] Resetting 0000:00:1f.0Nov 14 09:53:47 ip-172-31-16-98.ec2.internal nrtd[3351]: [TDRV:tdrv_init_one_mla_phase2] Initialized Inferentia...1f.0Nov 14 09:53:47 ip-172-31-16-98.ec2.internal neuron-rtd[3351]: E1114 09:53:47.511852663    3351 socket_utils_com...65}Nov 14 09:53:47 ip-172-31-16-98.ec2.internal systemd[1]: Started Neuron Runtime Daemon.Nov 14 09:53:47 ip-172-31-16-98.ec2.internal nrtd[3351]: [NRTD:RunServer] Server listening on unix:/run/neuron.sock

neuron-rtd を起動し、停止する状況がある場合があります。

neuron-rtd を起動するには、次のコマンドを使用します。

sudo systemctl restart neuron-rtd

neuron-rtd を停止するには、次のコマンドを使用します。

sudo systemctl stop neuron-rtd

NeuronCore グループ

NeuronCore (NC) は、Inferentia デバイス内の 4 つの実行ユニットです。複数の NC を組み合わせてニューロンコアグループ (NCG) を形成することができます。ニューロンフレームワークレイヤーは、デフォルトの NeuronCore グループを自動的に作成します。使用可能な NCG のリストを表示するには、次のコマンドを使用します。

neuron-cli list-ncg

アクティブな NCG が出力に次のように表示されます。

Device 1 NC count 4+-------+----------+--------------------+----------------+| NCG ID| NC COUNT | DEVICE START INDEX | NC START INDEX |+-------+----------+--------------------+----------------+|     1 |        1 |                  0 |              0 ||     2 |        1 |                  0 |              1 ||     3 |        2 |                  0 |              2 |+-------+----------+--------------------+----------------+

NCG を設定していない場合、このコマンドは次の出力を返します。

No NCG Found

86

Page 91: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドAWS Inferentia

すべてのモデルをアンロードし、フレームワークによって作成されたすべての NCG を削除する必要がある場合は、次のコマンドを使用します。

neuron-cli reset

モデルのリスト表示

モデルは NCG にロードできます。複数のモデルを 1 つの NCG にロードできますが、STARTED 状態になることができるのは 1 つのモデルだけです。推論は、STARTED 状態のモデルに対してのみ実行できます。

NCG にロードされたすべてのモデルを表示するには、次のコマンドを使用します。 

$ neuron-cli list-model

NCG にロードされたモデルは、次のように出力に表示されます。

Found 3 model10003 MODEL_STATUS_LOADED 110001 MODEL_STATUS_STARTED 110002 MODEL_STATUS_STARTED 1

この出力では、10001 と 10002 は NCG にロードされたモデルの一意の識別子です。モデルを NCG にロードしていない場合は、次の出力が表示されます。

Found 0 models

リソースの使用状況の表示

NCG にロードされた各モデルは、ホストとデバイス上のメモリ量と、NeuronCore の割合を消費します。 NGC の使用状況を表示するには、次のコマンドを実行します。

neuron-top

NGC の使用状況は、次のように出力に表示されます。

neuron-top - 2019-11-13 23:57:08NN Models: 3 total, 2 runningNumber of VNCs tracked: 20000:00:1f.0 Utilizations: Neuron core0 0.00, Neuron core1 0.00, Neuron core2 0, Neuron core3 0,DLR Model   Node ID   Subgraph   Exec. Unit       Host Mem   MLA Mem     Neuron core %10003       1         0          0000:00:1f.0:0   384        135660544   0.0010001       3         0          0000:00:1f.0:0   384        67633152    0.0010002       1         0          0000:00:1f.0:1   384        135660544   0.00

モデルをロードしていない場合、出力は次のようになります。

NN Models: 0 total, 0 runningNumber of VNCs tracked: 0

87

Page 92: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドAWS Inferentia

DLR Model   Node ID   Subgraph   Exec. Unit   Host Mem   MLA Mem   Neuron core %

次のステップ

AWS Neuron で DLAMI を使用する (p. 88)

AWS Neuron で DLAMI を使用するAWS Neuron SDK の一般的なワークフローは、以前にトレーニングを受けた Machine Learning モデルをコンパイルサーバー上でコンパイルすることです。その後、実行のために Inf1 インスタンスにアーティファクトを配布します。AWS Deep Learning AMI (DLAMI) は、Inferentia を使用する Inf1 インスタンスで推論をコンパイルして実行するために必要なものがすべてプリインストールされています。

ここでは、Inferentia で DLAMI を使用する方法について説明します。

目次• TensorFlow-Neuron と AWS Neuron コンパイラの使用 (p. 88)• AWS Neuron TensorFlow Serving の使用 (p. 91)• MXNet-Neuron と AWS Neuron コンパイラの使用 (p. 93)• MXNet-Neuron モデルサービングの使用 (p. 95)• PyTorch-Neuron と AWS Neuron コンパイラの使用 (p. 99)

TensorFlow-Neuron と AWS Neuron コンパイラの使用

このチュートリアルでは、AWS Neuron コンパイラを使用して Keras ResNet-50 モデルをコンパイルし、保存したモデルとして SavedModel 形式でエクスポートする方法について説明します。このフォーマットは、一般的な TensorFlow モデル交換可能な形式です。また、入力例を使用して Inf1 インスタンスで推論を実行する方法も学習します。 

Neuron SDK の詳細については、AWS Neuron SDK のドキュメントを参照してください。

コンテンツ• 前提条件 (p. 88)• Conda 環境のアクティブ化 (p. 88)• Resnet50 コンパイル (p. 89)• ResNet50 推論 (p. 90)

前提条件

このチュートリアルを使用する前に、AWS Neuron で DLAMI を使用する (p. 88) の設定ステップを完了しておく必要があります。また、深層学習および DLAMI の使用にも精通している必要があります。

Conda 環境のアクティブ化

次のコマンドを使用して、TensorFlow-Neuron Conda 環境をアクティブにします。

source activate aws_neuron_tensorflow_p36

次のコマンドを使用して、Neuron パッケージをインストールします。

88

Page 93: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドAWS Inferentia

conda update tensorflow-neuron

現在の Conda 環境を終了するには、次のコマンドを実行します。

source deactivate

Resnet50 コンパイル

次の内容を含む tensorflow_compile_resnet50.py という Python スクリプトを作成します。このPython スクリプトは、Keras ResNet50 モデルをコンパイルし、保存されたモデルとしてエクスポートします。

import osimport timeimport shutilimport tensorflow as tfimport tensorflow.neuron as tfnimport tensorflow.compat.v1.keras as kerasfrom tensorflow.keras.applications.resnet50 import ResNet50from tensorflow.keras.applications.resnet50 import preprocess_input

# Create a workspaceWORKSPACE = './ws_resnet50'os.makedirs(WORKSPACE, exist_ok=True)

# Prepare export directory (old one removed)model_dir = os.path.join(WORKSPACE, 'resnet50')compiled_model_dir = os.path.join(WORKSPACE, 'resnet50_neuron')shutil.rmtree(model_dir, ignore_errors=True)shutil.rmtree(compiled_model_dir, ignore_errors=True)

# Instantiate Keras ResNet50 modelkeras.backend.set_learning_phase(0)model = ResNet50(weights='imagenet')

# Export SavedModeltf.saved_model.simple_save( session            = keras.backend.get_session(), export_dir         = model_dir, inputs             = {'input': model.inputs[0]}, outputs            = {'output': model.outputs[0]})

# Compile using Neurontfn.saved_model.compile(model_dir, compiled_model_dir)

# Prepare SavedModel for uploading to Inf1 instanceshutil.make_archive(compiled_model_dir, 'zip', WORKSPACE, 'resnet50_neuron')

次のコマンドを使用してモデルをコンパイルします。

python tensorflow_compile_resnet50.py

コンパイル処理には数分かかります。完了すると、出力は次のようになります。

...INFO:tensorflow:fusing subgraph neuron_op_d6f098c01c780733 with neuron-cc

89

Page 94: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドAWS Inferentia

INFO:tensorflow:Number of operations in TensorFlow session: 4638INFO:tensorflow:Number of operations after tf.neuron optimizations: 556INFO:tensorflow:Number of operations placed on Neuron runtime: 554INFO:tensorflow:Successfully converted ./ws_resnet50/resnet50 to ./ws_resnet50/resnet50_neuron...

コンパイル後、保存されたモデルは ws_resnet50/resnet50_neuron.zip に圧縮されます。以下のコマンドを使用して、モデルを解凍し、推論用のサンプルイメージをダウンロードします。

unzip ws_resnet50/resnet50_neuron.zip -d .curl -O https://raw.githubusercontent.com/awslabs/mxnet-model-server/master/docs/images/kitten_small.jpg

ResNet50 推論

次の内容を含む tensorflow_infer_resnet50.py という Python スクリプトを作成します。このスクリプトは、以前にコンパイルされた推論モデルを使用して、ダウンロードしたモデルに対して推論を実行します。

import osimport numpy as npimport tensorflow as tffrom tensorflow.keras.preprocessing import imagefrom tensorflow.keras.applications import resnet50

# Create input from imageimg_sgl = image.load_img('kitten_small.jpg', target_size=(224, 224))img_arr = image.img_to_array(img_sgl)img_arr2 = np.expand_dims(img_arr, axis=0)img_arr3 = resnet50.preprocess_input(img_arr2)# Load modelCOMPILED_MODEL_DIR = './resnet50_neuron/'predictor_inferentia = tf.contrib.predictor.from_saved_model(COMPILED_MODEL_DIR)# Run inferencemodel_feed_dict={'input': img_arr3}infa_rslts = predictor_inferentia(model_feed_dict);# Display resultsprint(resnet50.decode_predictions(infa_rslts["output"], top=5)[0])

次のコマンドを使用して、モデルに対して推論を実行します。

python tensorflow_infer_resnet50.py

出力は次のようになります。

...[('n02123045', 'tabby', 0.6918919), ('n02127052', 'lynx', 0.12770271), ('n02123159', 'tiger_cat', 0.08277027), ('n02124075', 'Egyptian_cat', 0.06418919), ('n02128757', 'snow_leopard', 0.009290541)]

次のステップ

AWS Neuron TensorFlow Serving の使用 (p. 91)

90

Page 95: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドAWS Inferentia

AWS Neuron TensorFlow Serving の使用

このチュートリアルでは、TensorFlow Serving で使用するために保存されたモデルをエクスポートする前に、グラフを作成し、AWS Neuron コンパイルステップを追加する方法を示します。TensorFlowServing は、ネットワーク全体で推論をスケールアップすることを可能にする提供システムです。NeuronTensorFlow Serving は通常の TensorFlow Serving と同じ API を使用します。唯一の違いは、保存されたモデルを AWS Inferentia 用にコンパイルする必要があり、エントリポイントは名前の異なるバイナリ tensorflow_model_server_neuron であることですバイナリは、/usr/local/bin/tensorflow_model_server_neuron にあり、DLAMI にあらかじめインストールされています。

Neuron SDK の詳細については、AWS Neuron SDK のドキュメントを参照してください。

コンテンツ• 前提条件 (p. 91)• Conda 環境のアクティブ化 (p. 91)• 保存したモデルのコンパイルとエクスポート (p. 91)• 保存したモデルの提供 (p. 92)• モデルサーバーへの推論リクエストを生成する (p. 92)

前提条件

このチュートリアルを使用する前に、AWS Neuron で DLAMI を使用する (p. 88) の設定ステップを完了しておく必要があります。また、深層学習および DLAMI の使用にも精通している必要があります。

Conda 環境のアクティブ化

次のコマンドを使用して、TensorFlow-Neuron Conda 環境をアクティブにします。

source activate aws_neuron_tensorflow_p36

次のコマンドを使用して、Neuron パッケージをインストールします。

conda update tensorflow-neuron

現在の Conda 環境を終了する必要がある場合は、次のコマンドを実行します。

source deactivate

保存したモデルのコンパイルとエクスポート

次の内容で tensorflow-model-server-compile.py という Python スクリプトを作成します。 このスクリプトは、グラフを作成し、Neuron を使用してコンパイルします。次に、コンパイルされたグラフを保存されたモデルとしてエクスポートします。 

import tensorflow as tfimport os

tf.keras.backend.set_learning_phase(0)model = tf.keras.applications.ResNet50(weights='imagenet')sess = tf.keras.backend.get_session()inputs = {'input': model.inputs[0]}

91

Page 96: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドAWS Inferentia

outputs = {'output': model.outputs[0]}

# save the model using tf.saved_model.simple_savemodeldir = "./resnet50/1"tf.saved_model.simple_save(sess, modeldir, inputs, outputs)

# compile the model for Inferentianeuron_modeldir = os.path.join(os.path.expanduser('~'), 'resnet50_inf1', '1')tf.neuron.saved_model.compile(modeldir, neuron_modeldir, batch_size=1)

次のコマンドを使用してモデルをコンパイルします。

python tensorflow-model-server-compile.py

出力は次のようになります。

...INFO:tensorflow:fusing subgraph neuron_op_d6f098c01c780733 with neuron-ccINFO:tensorflow:Number of operations in TensorFlow session: 4638INFO:tensorflow:Number of operations after tf.neuron optimizations: 556INFO:tensorflow:Number of operations placed on Neuron runtime: 554INFO:tensorflow:Successfully converted ./resnet50/1 to /home/ubuntu/resnet50_inf1/1

保存したモデルの提供

モデルをコンパイルしたら、次のコマンドを使用して、保存したモデルにtensorflow_model_server_neuron バイナリを提供できます。

tensorflow_model_server_neuron --model_name=resnet50_inf1 \    --model_base_path=$HOME/resnet50_inf1/ --port=8500 &

出力は次のようになります。コンパイルされたモデルは、推論の準備のためにサーバーによって Inferentiaデバイスの DRAM にステージングされます。

...2019-11-22 01:20:32.075856: I external/org_tensorflow/tensorflow/cc/saved_model/loader.cc:311] SavedModel load for tags { serve }; Status: success. Took 40764 microseconds.2019-11-22 01:20:32.075888: I tensorflow_serving/servables/tensorflow/saved_model_warmup.cc:105] No warmup data file found at /home/ubuntu/resnet50_inf1/1/assets.extra/tf_serving_warmup_requests2019-11-22 01:20:32.075950: I tensorflow_serving/core/loader_harness.cc:87] Successfully loaded servable version {name: resnet50_inf1 version: 1}2019-11-22 01:20:32.077859: I tensorflow_serving/model_servers/server.cc:353] Running gRPC ModelServer at 0.0.0.0:8500 ...

モデルサーバーへの推論リクエストを生成する

次の内容で tensorflow-model-server-infer.py という Python スクリプトを作成します。このスクリプトは、サービスフレームワークである gRPC を介して推論を実行します。

import numpy as npimport grpcimport tensorflow as tf

92

Page 97: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドAWS Inferentia

from tensorflow.keras.preprocessing import imagefrom tensorflow.keras.applications.resnet50 import preprocess_inputfrom tensorflow_serving.apis import predict_pb2from tensorflow_serving.apis import prediction_service_pb2_grpcfrom tensorflow.keras.applications.resnet50 import decode_predictions

if __name__ == '__main__':    channel = grpc.insecure_channel('localhost:8500')    stub = prediction_service_pb2_grpc.PredictionServiceStub(channel)    img_file = tf.keras.utils.get_file(        "./kitten_small.jpg",        "https://raw.githubusercontent.com/awslabs/mxnet-model-server/master/docs/images/kitten_small.jpg")    img = image.load_img(img_file, target_size=(224, 224))    img_array = preprocess_input(image.img_to_array(img)[None, ...])    request = predict_pb2.PredictRequest()    request.model_spec.name = 'resnet50_inf1'    request.inputs['input'].CopyFrom(        tf.contrib.util.make_tensor_proto(img_array, shape=img_array.shape))    result = stub.Predict(request)    prediction = tf.make_ndarray(result.outputs['output'])    print(decode_predictions(prediction))

次のコマンドで gRPC を使用して、モデルの推論を実行します。

python tensorflow-model-server-infer.py

出力は次のようになります。

[[('n02123045', 'tabby', 0.6918919), ('n02127052', 'lynx', 0.12770271), ('n02123159', 'tiger_cat', 0.08277027), ('n02124075', 'Egyptian_cat', 0.06418919), ('n02128757', 'snow_leopard', 0.009290541)]]

MXNet-Neuron と AWS Neuron コンパイラの使用

MXNet-Neuron コンパイル API は、AWS Inferentia デバイスで実行できるモデルグラフを方法するメソッドを提供します。

この例では、API を使用して ResNet-50 モデルをコンパイルし、それを使用して推論を実行します。

Neuron SDK の詳細については、AWS Neuron SDK のドキュメントを参照してください。

コンテンツ• 前提条件 (p. 93)• Conda 環境のアクティブ化 (p. 93)• Resnet50 コンパイル (p. 94)• ResNet50 推論 (p. 94)

前提条件

このチュートリアルを使用する前に、AWS Neuron で DLAMI を使用する (p. 88) の設定ステップを完了しておく必要があります。また、深層学習および DLAMI の使用にも精通している必要があります。

Conda 環境のアクティブ化

次のコマンドを使用して、MXNet-Neuron Conda 環境をアクティブにします。

93

Page 98: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドAWS Inferentia

source activate aws_neuron_mxnet_p36

次のコマンドを使用して、Neuron パッケージをインストールします。

conda update mxnet-neuron

現在の Conda 環境を終了するには、次のコマンドを実行します。

source deactivate

Resnet50 コンパイル

次の内容で mxnet_compile_resnet50.py という Python スクリプトを作成します。このスクリプトは、MXNet-Neuron コンパイル Python API を使用して、ResNet-50 モデルをコンパイルします。

import mxnet as mximport numpy as np

print("downloading...")path='http://data.mxnet.io/models/imagenet/'mx.test_utils.download(path+'resnet/50-layers/resnet-50-0000.params')mx.test_utils.download(path+'resnet/50-layers/resnet-50-symbol.json')print("download finished.")

sym, args, aux = mx.model.load_checkpoint('resnet-50', 0)

print("compile for inferentia using neuron... this will take a few minutes...")inputs = { "data" : mx.nd.ones([1,3,224,224], name='data', dtype='float32') }

sym, args, aux = mx.contrib.neuron.compile(sym, args, aux, inputs)

print("save compiled model...")mx.model.save_checkpoint("compiled_resnet50", 0, sym, args, aux)

次のコマンドを使用してモデルをコンパイルします。

python mxnet_compile_resnet50.py

コンパイルには数分かかります。 コンパイルが終了すると、次のファイルが現在のディレクトリに表示されます。

resnet-50-0000.paramsresnet-50-symbol.jsoncompiled_resnet50-0000.paramscompiled_resnet50-symbol.json

ResNet50 推論

次の内容で mxnet_infer_resnet50.py という Python スクリプトを作成します。このスクリプトは、サンプルイメージをダウンロードし、それを使用して、コンパイルされたモデルを持つ推論を実行します。

94

Page 99: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドAWS Inferentia

import mxnet as mximport numpy as np

path='http://data.mxnet.io/models/imagenet/'mx.test_utils.download(path+'synset.txt')

fname = mx.test_utils.download('https://raw.githubusercontent.com/awslabs/mxnet-model-server/master/docs/images/kitten_small.jpg')img = mx.image.imread(fname)

# convert into format (batch, RGB, width, height)img = mx.image.imresize(img, 224, 224) # resizeimg = img.transpose((2, 0, 1)) # Channel firstimg = img.expand_dims(axis=0) # batchifyimg = img.astype(dtype='float32')

sym, args, aux = mx.model.load_checkpoint('compiled_resnet50', 0)softmax = mx.nd.random_normal(shape=(1,))args['softmax_label'] = softmaxargs['data'] = img# Inferentia contextctx = mx.neuron()

exe = sym.bind(ctx=ctx, args=args, aux_states=aux, grad_req='null')with open('synset.txt', 'r') as f:    labels = [l.rstrip() for l in f]

exe.forward(data=img)prob = exe.outputs[0].asnumpy()# print the top-5prob = np.squeeze(prob)a = np.argsort(prob)[::-1] for i in a[0:5]:    print('probability=%f, class=%s' %(prob[i], labels[i]))

次のコマンドを使用して、コンパイルされたモデルで推論を実行します。

python mxnet_infer_resnet50.py

出力は次のようになります。

probability=0.642454, class=n02123045 tabby, tabby catprobability=0.189407, class=n02123159 tiger catprobability=0.100798, class=n02124075 Egyptian catprobability=0.030649, class=n02127052 lynx, catamountprobability=0.016278, class=n02129604 tiger, Panthera tigris

次のステップ

MXNet-Neuron モデルサービングの使用 (p. 95)

MXNet-Neuron モデルサービングの使用

このチュートリアルでは、事前にトレーニングされた MXNet モデルを使用して、マルチモデルサーバー(MMS) でリアルタイムのイメージ分類を実行する方法を学習します。MMS は、Machine Learning や深層

95

Page 100: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドAWS Inferentia

学習フレームワークを使用してトレーニングされた深層学習モデルを提供するための、柔軟で使いやすいツールです。このチュートリアルでは、AWS Neuron を使用したコンパイルステップと MXNet を使用した MMS の実装について説明します。

Neuron SDK の詳細については、AWS Neuron SDK のドキュメントを参照してください。

コンテンツ• 前提条件 (p. 96)• Conda 環境のアクティブ化 (p. 96)• コード例のダウンロード (p. 96)• モデルのコンパイル (p. 96)• 推論の実行 (p. 98)

前提条件

このチュートリアルを使用する前に、AWS Neuron で DLAMI を使用する (p. 88) の設定ステップを完了しておく必要があります。また、深層学習および DLAMI の使用にも精通している必要があります。

Conda 環境のアクティブ化

次のコマンドを使用して、MXNet-Neuron Conda 環境をアクティブにします。

source activate aws_neuron_mxnet_p36

次のコマンドを使用して、Neuron パッケージをインストールします。

conda update mxnet-neuron

現在の Conda 環境を終了するには、次のコマンドを実行します。

source deactivate

コード例のダウンロード

この例を実行するには、次のコマンドを使用してコード例をダウンロードします。

git clone https://github.com/awslabs/multi-model-servercd multi-model-server/examples/mxnet_vision

モデルのコンパイル

次の内容で multi-model-server-compile.py という Python スクリプトを作成します。このスクリプトは、ResNet50 モデルを Inferentia デバイスターゲットにコンパイルします。

import mxnet as mxfrom mxnet.contrib import neuronimport numpy as np

path='http://data.mxnet.io/models/imagenet/'mx.test_utils.download(path+'resnet/50-layers/resnet-50-0000.params')

96

Page 101: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドAWS Inferentia

mx.test_utils.download(path+'resnet/50-layers/resnet-50-symbol.json')mx.test_utils.download(path+'synset.txt')

nn_name = "resnet-50"

#Load a modelsym, args, auxs = mx.model.load_checkpoint(nn_name, 0)

#Define compilation parameters#  - input shape and dtypeinputs = {'data' : mx.nd.zeros([1,3,224,224], dtype='float32') }

# compile graph to inferentia targetcsym, cargs, cauxs = neuron.compile(sym, args, auxs, inputs)

# save compiled modelmx.model.save_checkpoint(nn_name + "_compiled", 0, csym, cargs, cauxs)

モデルをコンパイルするには、次のコマンドを使用します。

python multi-model-server-compile.py

出力は次のようになります。

...[21:18:40] src/nnvm/legacy_json_util.cc:209: Loading symbol saved by previous version v0.8.0. Attempting to upgrade...[21:18:40] src/nnvm/legacy_json_util.cc:217: Symbol successfully upgraded![21:19:00] src/operator/subgraph/build_subgraph.cc:698: start to execute partition graph.[21:19:00] src/nnvm/legacy_json_util.cc:209: Loading symbol saved by previous version v0.8.0. Attempting to upgrade...[21:19:00] src/nnvm/legacy_json_util.cc:217: Symbol successfully upgraded!

次の内容を含むと signature.json いう名前のファイルを作成し、入力名と形状を設定します。

{  "inputs": [    {      "data_name": "data",      "data_shape": [        1,        3,        224,        224      ]    }  ]}

次のコマンドを使用して synset.txt ファイルを呼び出すことができます。このファイルは、ImageNet予測クラスの名前の一覧です。

curl -O https://s3.amazonaws.com/model-server/model_archive_1.0/examples/squeezenet_v1.1/synset.txt

model_server_template フォルダ内のテンプレートに続くカスタムサービスクラスを作成します。次のコマンドを使用して、テンプレートを現在の作業ディレクトリにコピーします。

97

Page 102: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドAWS Inferentia

cp -r ../model_service_template/* .

次のように mxnet_model_service.py モジュールを編集して、mx.cpu() コンテキストをmx.neuron() コンテキストに置き換えます。MXNet-Neuron は NDArray および Gluon API をサポートしていないため、model_input の不要なデータコピーをコメントアウトする必要があります。

...self.mxnet_ctx = mx.neuron() if gpu_id is None else mx.gpu(gpu_id)...#model_input = [item.as_in_context(self.mxnet_ctx) for item in model_input]

次のコマンドを使用して、モデルアーカイバでモデルをパッケージ化します。

cd ~/multi-model-server/examplesmodel-archiver --force --model-name resnet-50_compiled --model-path mxnet_vision --handler mxnet_vision_service:handle

推論の実行

マルチモデルサーバーを起動し、次のコマンドを使用して RESTful API を使用するモデルをロードします。neuron-rtd がデフォルト設定で実行されていることを確認します。

cd ~/multi-model-server/multi-model-server --start --model-store examples > /dev/null # Pipe to log file if you want to keep a log of MMScurl -v -X POST "http://localhost:8081/models?initial_workers=1&max_workers=4&synchronous=true&url=resnet-50_compiled.mar"sleep 10 # allow sufficient time to load model

以下のコマンドでサンプルイメージを使用して推論を実行します。

curl -O https://raw.githubusercontent.com/awslabs/multi-model-server/master/docs/images/kitten_small.jpgcurl -X POST http://127.0.0.1:8080/predictions/resnet-50_compiled -T kitten_small.jpg

出力は次のようになります。

[  {    "probability": 0.6388034820556641,    "class": "n02123045 tabby, tabby cat"  },  {    "probability": 0.16900072991847992,    "class": "n02123159 tiger cat"  },  {    "probability": 0.12221276015043259,    "class": "n02124075 Egyptian cat"  },  {    "probability": 0.028706775978207588,    "class": "n02127052 lynx, catamount"

98

Page 103: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドAWS Inferentia

  },  {    "probability": 0.01915954425930977,    "class": "n02129604 tiger, Panthera tigris"  }]

テスト後にクリーンアップするには、RESTful API を使用して削除コマンドを発行し、次のコマンドを使用してモデルサーバーを停止します。

curl -X DELETE http://127.0.0.1:8081/models/resnet-50_compiled

multi-model-server --stop

neuron-cli reset

次のような出力が表示されます。

{  "status": "Model \"resnet-50_compiled\" unregistered"}Model server stopped.Found 1 models and 1 NCGs.Unloading 10001 (MODEL_STATUS_STARTED) :: successDestroying NCG 1 :: success

PyTorch-Neuron と AWS Neuron コンパイラの使用

PyTorch-Neuron コンパイル API は、AWS Inferentia デバイスで実行できるモデルグラフを方法するメソッドを提供します。

トレーニング済みモデルは、Inf1 インスタンスにデプロイする前に、Inferentia ターゲットにコンパイルする必要があります。以下のチュートリアルでは、torchvision ResNet50 モデルをコンパイルし、保存された TorchScript モジュールとしてエクスポートします。このモデルは、推論を実行するために使用されます。

便宜上、このチュートリアルではコンパイルと推論の両方に Inf1 インスタンスを使用します。実際には、c5 インスタンスファミリーなどの別のインスタンスタイプを使用してモデルをコンパイルできます。その後、コンパイルされたモデルを Inf1 推論サーバーにデプロイする必要があります。詳細については、AWS Neuron PyTorch SDK のドキュメントを参照してください。

コンテンツ• 前提条件 (p. 99)• Conda 環境のアクティブ化 (p. 99)• Resnet50 コンパイル (p. 100)• ResNet50 推論 (p. 100)

前提条件

このチュートリアルを使用する前に、AWS Neuron で DLAMI を使用する (p. 88) の設定ステップを完了しておく必要があります。また、深層学習および DLAMI の使用にも精通している必要があります。

Conda 環境のアクティブ化

次のコマンドを使用して、PyTorch-Neuron Conda 環境をアクティブにします。

99

Page 104: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドAWS Inferentia

source activate aws_neuron_pytorch_p36

現在の Conda 環境を終了するには、次のコマンドを実行します。

source deactivate

Resnet50 コンパイル

次の内容で pytorch_trace_resnet50.py という Python スクリプトを作成します。このスクリプトは、PyTorch-Neuron コンパイル Python API を使用して、ResNet-50 モデルをコンパイルします。

import torchimport numpy as npimport osimport torch_neuronfrom torchvision import models

image = torch.zeros([1, 3, 224, 224], dtype=torch.float32)

## Load a pretrained ResNet50 modelmodel = models.resnet50(pretrained=True)

## Tell the model we are using it for evaluation (not training)model.eval()model_neuron = torch.neuron.trace(model, example_inputs=[image])

## Export to saved modelmodel_neuron.save("resnet50_neuron.pt")

コンパイルスクリプトを実行します。

python pytorch_trace_resnet50.py

コンパイルには数分かかります。 コンパイルが完了すると、コンパイルされたモデルはresnet50_neuron.pt としてローカルディレクトリに保存されます。

ResNet50 推論

次の内容で pytorch_infer_resnet50.py という Python スクリプトを作成します。このスクリプトは、サンプルイメージをダウンロードし、それを使用して、コンパイルされたモデルを持つ推論を実行します。

import osimport timeimport torchimport torch_neuronimport jsonimport numpy as np

from urllib import request

from torchvision import models, transforms, datasets

## Create an image directory containing a small kittenos.makedirs("./torch_neuron_test/images", exist_ok=True)request.urlretrieve("https://raw.githubusercontent.com/awslabs/mxnet-model-server/master/docs/images/kitten_small.jpg",

100

Page 105: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイド推論

"./torch_neuron_test/images/kitten_small.jpg")

## Fetch labels to output the top classificationsrequest.urlretrieve("https://s3.amazonaws.com/deep-learning-models/image-models/imagenet_class_index.json","imagenet_class_index.json")idx2label = []

with open("imagenet_class_index.json", "r") as read_file: class_idx = json.load(read_file) idx2label = [class_idx[str(k)][1] for k in range(len(class_idx))]

## Import a sample image and normalize it into a tensornormalize = transforms.Normalize( mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])

eval_dataset = datasets.ImageFolder( os.path.dirname("./torch_neuron_test/"), transforms.Compose([ transforms.Resize([224, 224]), transforms.ToTensor(), normalize, ]))

image, _ = eval_dataset[0]image = torch.tensor(image.numpy()[np.newaxis, ...])

## Load modelmodel_neuron = torch.jit.load( 'resnet50_neuron.pt' )

## Predictresults = model_neuron( image )

# Get the top 5 resultstop5_idx = results[0].sort()[1][-5:]

# Lookup and print the top 5 labelstop5_labels = [idx2label[idx] for idx in top5_idx]

print("Top 5 labels:\n {}".format(top5_labels) )

次のコマンドを使用して、コンパイルされたモデルで推論を実行します。

python pytorch_infer_resnet50.py

出力は次のようになります。

Top 5 labels: ['tiger', 'lynx', 'tiger_cat', 'Egyptian_cat', 'tabby']

推論このセクションでは、DLAMI のフレームワークとツールを使用して推論を実行する方法についてチュートリアルを提供します。

Elastic Inference 使用のチュートリアルについては、「Working with Amazon Elastic Inference」を参照してください。

101

Page 106: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイド推論

フレームワークによる推論• ONNX モデルでの推論に Apache MXNet を使用する (p. 102)• ResNet 50 モデルでの推論に Apache MXNet を使用する (p. 103)• ONNX モデルでの推論に CNTK を使用する (p. 104)

推論ツール• Apache MXNet (MMS) のモデルサーバー (p. 114)• TensorFlow Serving (p. 116)

ONNX モデルでの推論に Apache MXNet を使用するMXNet での画像推論に ONNX モデルを使用する方法

1. • (Python 3 用オプション) - Python 3 MXNet 環境を有効化します。

$ source activate mxnet_p36

• (Python 2 用オプション) - Python 2 MXNet 環境を有効化します。

$ source activate mxnet_p27

2. 残りの手順は、mxnet_p36 環境を使用していることを前提としています。3. ハスキーの画像をダウンロードします。

$ curl -O https://upload.wikimedia.org/wikipedia/commons/b/b5/Siberian_Husky_bi-eyed_Flickr.jpg

4. このモデルで動作するクラスのリストをダウンロードします。

$ curl -O https://gist.githubusercontent.com/yrevar/6135f1bd8dcf2e0cc683/raw/d133d61a09d7e5a3b36b8c111a8dd5c4b5d560ee/imagenet1000_clsid_to_human.pkl

5. 任意のテキストエディタを使用して、以下の内容のスクリプトを作成します。このスクリプトは、ハスキーの画像を使用して、事前トレーニング済みモデルから予測結果を取得します。その後、クラスのファイルでこの結果を調べて、予測結果を返します。

import mxnet as mximport numpy as npfrom collections import namedtuplefrom PIL import Imageimport pickle

# Preprocess the imageimg = Image.open("Siberian_Husky_bi-eyed_Flickr.jpg")img = img.resize((224,224))rgb_img = np.asarray(img, dtype=np.float32) - 128bgr_img = rgb_img[..., [2,1,0]]img_data = np.ascontiguousarray(np.rollaxis(bgr_img,2))img_data = img_data[np.newaxis, :, :, :].astype(np.float32)

# Define the model's inputdata_names = ['data']Batch = namedtuple('Batch', data_names)

102

Page 107: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイド推論

# Set the context to cpu or gpuctx = mx.cpu()

# Load the modelsym, arg, aux = onnx_mxnet.import_model("vgg16.onnx")mod = mx.mod.Module(symbol=sym, data_names=data_names, context=ctx, label_names=None)mod.bind(for_training=False, data_shapes=[(data_names[0],img_data.shape)], label_shapes=None)mod.set_params(arg_params=arg, aux_params=aux, allow_missing=True, allow_extra=True)

# Run inference on the imagemod.forward(Batch([mx.nd.array(img_data)]))predictions = mod.get_outputs()[0].asnumpy()top_class = np.argmax(predictions)print(top_class)labels_dict = pickle.load(open("imagenet1000_clsid_to_human.pkl", "rb"))print(labels_dict[top_class])

6. 次に、スクリプトを実行し、次のように結果が表示されます。

248Eskimo dog, husky

ResNet 50 モデルでの推論に Apache MXNet を使用するSymbol API による MXNet での画像推論に事前トレーニング済み MXNet モデルを使用する方法

1. • (Python 3 用オプション) - Python 3 MXNet 環境を有効化します。

$ source activate mxnet_p36

• (Python 2 用オプション) - Python 2 MXNet 環境を有効化します。

$ source activate mxnet_p27

2. 残りの手順は、mxnet_p36 環境を使用していることを前提としています。3. 任意のテキストエディタを使用して、以下の内容のスクリプトを作成します。このスクリプト

は、ResNet-50 モデルファイル (resnet-50-0000.params および resnet-50-symbol.json) とラベルリスト (synset.txt) をダウンロードし、猫の画像をダウンロードして、事前トレーニング済みモデルから予測結果を取得します。その後、ラベルリストでこの結果を調べて、予測結果を返します。

import mxnet as mximport numpy as np

path='http://data.mxnet.io/models/imagenet/'[mx.test_utils.download(path+'resnet/50-layers/resnet-50-0000.params'), mx.test_utils.download(path+'resnet/50-layers/resnet-50-symbol.json'), mx.test_utils.download(path+'synset.txt')]

ctx = mx.cpu()

with open('synset.txt', 'r') as f: labels = [l.rstrip() for l in f]

sym, args, aux = mx.model.load_checkpoint('resnet-50', 0)

fname = mx.test_utils.download('https://github.com/dmlc/web-data/blob/master/mxnet/doc/tutorials/python/predict_image/cat.jpg?raw=true')img = mx.image.imread(fname)

103

Page 108: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイド推論

# convert into format (batch, RGB, width, height)img = mx.image.imresize(img, 224, 224) # resizeimg = img.transpose((2, 0, 1)) # Channel firstimg = img.expand_dims(axis=0) # batchifyimg = img.astype(dtype='float32')args['data'] = img

softmax = mx.nd.random_normal(shape=(1,))args['softmax_label'] = softmax

exe = sym.bind(ctx=ctx, args=args, aux_states=aux, grad_req='null')

exe.forward()prob = exe.outputs[0].asnumpy()# print the top-5prob = np.squeeze(prob)a = np.argsort(prob)[::-1]for i in a[0:5]: print('probability=%f, class=%s' %(prob[i], labels[i]))

4. 次に、スクリプトを実行し、次のように結果が表示されます。

probability=0.418679, class=n02119789 kit fox, Vulpes macrotisprobability=0.293495, class=n02119022 red fox, Vulpes vulpesprobability=0.029321, class=n02120505 grey fox, gray fox, Urocyon cinereoargenteusprobability=0.026230, class=n02124075 Egyptian catprobability=0.022557, class=n02085620 Chihuahua

ONNX モデルでの推論に CNTK を使用するNote

v28 リリース以降、CNTK、Caffe、Caffe2、および Theano Conda 環境は AWS Deep LearningAMI に含まれなくなりました。これらの環境を含む AWS Deep Learning AMI の以前のリリースは引き続き利用できます。ただし、これらのフレームワークのオープンソースコミュニティによってセキュリティ修正が公開されている場合にのみ、AWS はこれらの環境の更新を提供します。Note

このチュートリアルで使用する VGG-16 モデルは、大量のメモリを消費します。 インスタンスを選択するときに、30 GB を超える RAM を持つインスタンスが必要になる場合があります。

CNTK での推論で ONNX モデルを使用する方法

1. • (Python 3 用オプション) - Python 3 CNTK 環境を有効化します。

$ source activate cntk_p36

• (Python 2 用オプション) - Python 2 CNTK 環境を有効化します。

$ source activate cntk_p27

2. 残りの手順は、cntk_p36 環境を使用していることを前提としています。3. テキストエディタを使用して新しいファイルを作成し、スクリプトで次のプログラムを使用し

て、CNTK で ONNX 形式ファイルを開きます。

import cntk as C# Import the Chainer model into CNTK via the CNTK import APIz = C.Function.load("vgg16.onnx", device=C.device.cpu(), format=C.ModelFormat.ONNX)

104

Page 109: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドONNX でフレームワークを使用する

print("Loaded vgg16.onnx!")

このスクリプトを実行した後、CNTK はモデルをロードします。4. CNTK で推論を実行することもできます。まず、ハスキーの画像をダウンロードします。

$ curl -O https://upload.wikimedia.org/wikipedia/commons/b/b5/Siberian_Husky_bi-eyed_Flickr.jpg

5. 次に、このモデルで動作するクラスのリストをダウンロードします。

$ curl -O https://gist.githubusercontent.com/yrevar/6135f1bd8dcf2e0cc683/raw/d133d61a09d7e5a3b36b8c111a8dd5c4b5d560ee/imagenet1000_clsid_to_human.pkl

6. 以前に作成したスクリプトを編集して、次の内容にします。この新しいバージョンでは、ハスキーのイメージを使用して予測結果を取得し、クラスのファイルを参照して、予測結果を返します。

import cntk as Cimport numpy as npfrom PIL import Imagefrom IPython.core.display import displayimport pickle

# Import the model into CNTK via the CNTK import APIz = C.Function.load("vgg16.onnx", device=C.device.cpu(), format=C.ModelFormat.ONNX)print("Loaded vgg16.onnx!")img = Image.open("Siberian_Husky_bi-eyed_Flickr.jpg")img = img.resize((224,224))rgb_img = np.asarray(img, dtype=np.float32) - 128bgr_img = rgb_img[..., [2,1,0]]img_data = np.ascontiguousarray(np.rollaxis(bgr_img,2))predictions = np.squeeze(z.eval({z.arguments[0]:[img_data]}))top_class = np.argmax(predictions)print(top_class)labels_dict = pickle.load(open("imagenet1000_clsid_to_human.pkl", "rb"))print(labels_dict[top_class])

7. 次に、スクリプトを実行し、次のように結果が表示されます。

248Eskimo dog, husky

ONNX でフレームワークを使用するDeep Learning AMI と Conda では、一部のフレームワークで Open Neural Network Exchange (ONNX) モデルがサポートされるようになりました。以下のトピックのいずれかを選択して Deep Learning AMI とConda で ONNX を使用する方法を確認します。

ONNX についてOpen Neural Network Exchange (ONNX) は深層学習モデルを表すために使用されるオープンフォーマットです。ONNX は、Amazon Web Services、Microsoft、Facebook、およびその他のいくつかのパートナーでサポートされています。深層学習モデルは、選択するどのようなフレームワークでも設計、トレーニング、デプロイできます。ONNX モデルの利点は、簡単にフレームワーク間を移動することができることです。

Deep Learning AMI と Conda では、現在、ONNX の機能を次のチュートリアルのコレクションでハイライトしています。

105

Page 110: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドONNX でフレームワークを使用する

• Apache MXNet から ONNX から CNTK へのチュートリアル (p. 106)• Chainer to ONNX to CNTK チュートリアル (p. 107)• Chainer to ONNX to MXNet チュートリアル (p. 109)• PyTorch to ONNX to CNTK チュートリアル (p. 110)• PyTorch to ONNX to MXNet チュートリアル (p. 112)

また、ONNX プロジェクトのドキュメントとチュートリアルも参照してください。

• GitHub の ONNX プロジェクト• ONNX のチュートリアル

Apache MXNet から ONNX から CNTK へのチュートリアルNote

v28 リリース以降、CNTK、Caffe、Caffe2、および Theano Conda 環境は AWS Deep LearningAMI に含まれなくなりました。これらの環境を含む AWS Deep Learning AMI の以前のリリースは引き続き利用できます。ただし、これらのフレームワークのオープンソースコミュニティによってセキュリティ修正が公開されている場合にのみ、AWS はこれらの環境の更新を提供します。

ONNX の概要

Open Neural Network Exchange (ONNX) は深層学習モデルを表すために使用されるオープンフォーマットです。ONNX は、Amazon Web Services、Microsoft、Facebook、およびその他のいくつかのパートナーでサポートされています。深層学習モデルは、選択するどのようなフレームワークでも設計、トレーニング、デプロイできます。ONNX モデルの利点は、簡単にフレームワーク間を移動することができることです。

このチュートリアルでは、ONNX で Deep Learning AMI と Conda を使用する方法を示します。これらのステップに従えば、モデルを訓練したり、事前トレーニング済みのモデルを他のフレームワークからロードしたり、このモデルを ONNX にエクスポートしたり、別のフレームワークでモデルをインポートしたりできます。

ONNX 前提条件

この ONNX チュートリアルを使用するには、Deep Learning AMI と Conda バージョン 12 以降が必要です。Deep Learning AMI と Conda の開始方法の詳細については、「Deep Learning AMI と Conda (p. 5)」を参照してください。

Important

これらの例では、最大 8 GB (またはそれ以上) のメモリが必要な関数を使用しています。十分なメモリを搭載したインスタンスのタイプを選択してください。

Deep Learning AMI と Conda でターミナルセッションを起動し、次のチュートリアルを開始します。

Apache MXNet (incubating) モデルを ONNX に変換し、そのモデルを CNTK にロードする

Apache MXNet (incubating) からモデルをエクスポートする方法

最新の MXNet ビルドを Deep Learning AMI と Conda の MXNet Conda 環境のいずれかまたは両方にインストールできます。

106

Page 111: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドONNX でフレームワークを使用する

1. • (Python 3 用オプション) - Python 3 MXNet 環境を有効化します。

$ source activate mxnet_p36

• (Python 2 用オプション) - Python 2 MXNet 環境を有効化します。

$ source activate mxnet_p27

2. 残りの手順は、mxnet_p36 環境を使用していることを前提としています。3. モデルファイルをダウンロードします。

curl -O https://s3.amazonaws.com/onnx-mxnet/model-zoo/vgg16/vgg16-symbol.jsoncurl -O https://s3.amazonaws.com/onnx-mxnet/model-zoo/vgg16/vgg16-0000.params

4. モデルファイルを MXNet から ONNX 形式にエクスポートするには、テキストエディタを使用して新しいファイルを作成し、スクリプトで次のプログラムを使用します。

import numpy as npimport mxnet as mxfrom mxnet.contrib import onnx as onnx_mxnetconverted_onnx_filename='vgg16.onnx'

# Export MXNet model to ONNX format via MXNet's export_model APIconverted_onnx_filename=onnx_mxnet.export_model('vgg16-symbol.json', 'vgg16-0000.params', [(1,3,224,224)], np.float32, converted_onnx_filename)

# Check that the newly created model is valid and meets ONNX specification.import onnxmodel_proto = onnx.load(converted_onnx_filename)onnx.checker.check_model(model_proto)

いくつかの警告メッセージが表示されることがありますが、今は無視してかまいません。このスクリプトを実行すると、同じディレクトリに新しく作成された .onnx ファイルが表示されます。

5. ONNX ファイルを用意できたところで、以下の例でそのファイルを使用して推論の実行を試すことができます。

• ONNX モデルでの推論に CNTK を使用する (p. 104)

ONNX のチュートリアル

• Apache MXNet から ONNX から CNTK へのチュートリアル (p. 106)• Chainer to ONNX to CNTK チュートリアル (p. 107)• Chainer to ONNX to MXNet チュートリアル (p. 109)• PyTorch to ONNX to MXNet チュートリアル (p. 112)• PyTorch to ONNX to CNTK チュートリアル (p. 110)

Chainer to ONNX to CNTK チュートリアルNote

v28 リリース以降、CNTK、Caffe、Caffe2、および Theano Conda 環境は AWS Deep LearningAMI に含まれなくなりました。これらの環境を含む AWS Deep Learning AMI の以前のリリースは引き続き利用できます。ただし、これらのフレームワークのオープンソースコミュニティによってセキュリティ修正が公開されている場合にのみ、AWS はこれらの環境の更新を提供します。

107

Page 112: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドONNX でフレームワークを使用する

ONNX の概要

Open Neural Network Exchange (ONNX) は深層学習モデルを表すために使用されるオープンフォーマットです。ONNX は、Amazon Web Services、Microsoft、Facebook、およびその他のいくつかのパートナーでサポートされています。深層学習モデルは、選択するどのようなフレームワークでも設計、トレーニング、デプロイできます。ONNX モデルの利点は、簡単にフレームワーク間を移動することができることです。

このチュートリアルでは、ONNX で Deep Learning AMI と Conda を使用する方法を示します。これらのステップに従えば、モデルを訓練したり、事前トレーニング済みのモデルを他のフレームワークからロードしたり、このモデルを ONNX にエクスポートしたり、別のフレームワークでモデルをインポートしたりできます。

ONNX 前提条件

この ONNX チュートリアルを使用するには、Deep Learning AMI と Conda バージョン 12 以降が必要です。Deep Learning AMI と Conda の開始方法の詳細については、「Deep Learning AMI と Conda (p. 5)」を参照してください。

Important

これらの例では、最大 8 GB (またはそれ以上) のメモリが必要な関数を使用しています。十分なメモリを搭載したインスタンスのタイプを選択してください。

Deep Learning AMI と Conda でターミナルセッションを起動し、次のチュートリアルを開始します。

Chainer モデルを ONNX に変換し、モデルを CNTK にロードする

まず、Chainer 環境をアクティブ化します。

$ source activate chainer_p36

テキストエディタを使用して新しいファイルを作成し、スクリプトで次のプログラムを使用して Chainerモデルズーでモデルを取得し、ONNX 形式にエクスポートします。

import numpy as npimport chainerimport chainercv.links as Limport onnx_chainer

# Fetch a vgg16 modelmodel = L.VGG16(pretrained_model='imagenet')

# Prepare an input tensorx = np.random.rand(1, 3, 224, 224).astype(np.float32) * 255

# Run the model on the datawith chainer.using_config('train', False): chainer_out = model(x).array

# Export the model to a .onnx fileout = onnx_chainer.export(model, x, filename='vgg16.onnx')

# Check that the newly created model is valid and meets ONNX specification.import onnxmodel_proto = onnx.load("vgg16.onnx")onnx.checker.check_model(model_proto)

108

Page 113: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドONNX でフレームワークを使用する

このスクリプトを実行すると、同じディレクトリに新しく作成された .onnx ファイルが表示されます。

ONNX ファイルを用意できたところで、以下の例でそのファイルを使用して推論の実行を試すことができます。

• ONNX モデルでの推論に CNTK を使用する (p. 104)

ONNX のチュートリアル

• Apache MXNet から ONNX から CNTK へのチュートリアル (p. 106)• Chainer to ONNX to CNTK チュートリアル (p. 107)• Chainer to ONNX to MXNet チュートリアル (p. 109)• PyTorch to ONNX to MXNet チュートリアル (p. 112)• PyTorch to ONNX to CNTK チュートリアル (p. 110)

Chainer to ONNX to MXNet チュートリアルONNX の概要

Open Neural Network Exchange (ONNX) は深層学習モデルを表すために使用されるオープンフォーマットです。ONNX は、Amazon Web Services、Microsoft、Facebook、およびその他のいくつかのパートナーでサポートされています。深層学習モデルは、選択するどのようなフレームワークでも設計、トレーニング、デプロイできます。ONNX モデルの利点は、簡単にフレームワーク間を移動することができることです。

このチュートリアルでは、ONNX で Deep Learning AMI と Conda を使用する方法を示します。これらのステップに従えば、モデルを訓練したり、事前トレーニング済みのモデルを他のフレームワークからロードしたり、このモデルを ONNX にエクスポートしたり、別のフレームワークでモデルをインポートしたりできます。

ONNX 前提条件

この ONNX チュートリアルを使用するには、Deep Learning AMI と Conda バージョン 12 以降が必要です。Deep Learning AMI と Conda の開始方法の詳細については、「Deep Learning AMI と Conda (p. 5)」を参照してください。

Important

これらの例では、最大 8 GB (またはそれ以上) のメモリが必要な関数を使用しています。十分なメモリを搭載したインスタンスのタイプを選択してください。

Deep Learning AMI と Conda でターミナルセッションを起動し、次のチュートリアルを開始します。

Chainer モデルを ONNX に変換し、モデルを MXNet にロードする

まず、Chainer 環境をアクティブ化します。

$ source activate chainer_p36

テキストエディタを使用して新しいファイルを作成し、スクリプトで次のプログラムを使用して Chainerモデルズーでモデルを取得し、ONNX 形式にエクスポートします。

import numpy as np

109

Page 114: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドONNX でフレームワークを使用する

import chainerimport chainercv.links as Limport onnx_chainer

# Fetch a vgg16 modelmodel = L.VGG16(pretrained_model='imagenet')

# Prepare an input tensorx = np.random.rand(1, 3, 224, 224).astype(np.float32) * 255

# Run the model on the datawith chainer.using_config('train', False): chainer_out = model(x).array

# Export the model to a .onnx fileout = onnx_chainer.export(model, x, filename='vgg16.onnx')

# Check that the newly created model is valid and meets ONNX specification.import onnxmodel_proto = onnx.load("vgg16.onnx")onnx.checker.check_model(model_proto)

このスクリプトを実行すると、同じディレクトリに新しく作成された .onnx ファイルが表示されます。

ONNX ファイルを用意できたところで、以下の例でそのファイルを使用して推論の実行を試すことができます。

• ONNX モデルでの推論に Apache MXNet を使用する (p. 102)

ONNX のチュートリアル

• Apache MXNet から ONNX から CNTK へのチュートリアル (p. 106)• Chainer to ONNX to CNTK チュートリアル (p. 107)• Chainer to ONNX to MXNet チュートリアル (p. 109)• PyTorch to ONNX to MXNet チュートリアル (p. 112)• PyTorch to ONNX to CNTK チュートリアル (p. 110)

PyTorch to ONNX to CNTK チュートリアルNote

v28 リリース以降、CNTK、Caffe、Caffe2、および Theano Conda 環境は AWS Deep LearningAMI に含まれなくなりました。これらの環境を含む AWS Deep Learning AMI の以前のリリースは引き続き利用できます。ただし、これらのフレームワークのオープンソースコミュニティによってセキュリティ修正が公開されている場合にのみ、AWS はこれらの環境の更新を提供します。

ONNX の概要

Open Neural Network Exchange (ONNX) は深層学習モデルを表すために使用されるオープンフォーマットです。ONNX は、Amazon Web Services、Microsoft、Facebook、およびその他のいくつかのパートナーでサポートされています。深層学習モデルは、選択するどのようなフレームワークでも設計、トレーニング、デプロイできます。ONNX モデルの利点は、簡単にフレームワーク間を移動することができることです。

このチュートリアルでは、ONNX で Deep Learning AMI と Conda を使用する方法を示します。これらのステップに従えば、モデルを訓練したり、事前トレーニング済みのモデルを他のフレームワークからロー

110

Page 115: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドONNX でフレームワークを使用する

ドしたり、このモデルを ONNX にエクスポートしたり、別のフレームワークでモデルをインポートしたりできます。

ONNX 前提条件

この ONNX チュートリアルを使用するには、Deep Learning AMI と Conda バージョン 12 以降が必要です。Deep Learning AMI と Conda の開始方法の詳細については、「Deep Learning AMI と Conda (p. 5)」を参照してください。

Important

これらの例では、最大 8 GB (またはそれ以上) のメモリが必要な関数を使用しています。十分なメモリを搭載したインスタンスのタイプを選択してください。

Deep Learning AMI と Conda でターミナルセッションを起動し、次のチュートリアルを開始します。

PyTorch モデルを ONNX に変換し、モデルを CNTK にロードする

まず、PyTorch 環境をアクティブ化します。

$ source activate pytorch_p36

テキストエディタを使用して新しいファイルを作成し、スクリプトで次のプログラムを使用して PyTorchでモックモデルをトレーニングし、ONNX 形式にエクスポートします。

# Build a Mock Model in Pytorch with a convolution and a reduceMean layer\import torchimport torch.nn as nnimport torch.nn.functional as Fimport torch.optim as optimfrom torchvision import datasets, transformsfrom torch.autograd import Variableimport torch.onnx as torch_onnx

class Model(nn.Module): def __init__(self): super(Model, self).__init__() self.conv = nn.Conv2d(in_channels=3, out_channels=32, kernel_size=(3,3), stride=1, padding=0, bias=False)

def forward(self, inputs): x = self.conv(inputs) #x = x.view(x.size()[0], x.size()[1], -1) return torch.mean(x, dim=2)

# Use this an input trace to serialize the modelinput_shape = (3, 100, 100)model_onnx_path = "torch_model.onnx"model = Model()model.train(False)

# Export the model to an ONNX filedummy_input = Variable(torch.randn(1, *input_shape))output = torch_onnx.export(model, dummy_input, model_onnx_path, verbose=False)

このスクリプトを実行すると、同じディレクトリに新しく作成された .onnx ファイルが表示されます。ここで、CNTK Conda 環境に切り替え CNTK を使用してモデルをロードします。

111

Page 116: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドONNX でフレームワークを使用する

次に、CNTK 環境をアクティブ化します。

$ source deactivate$ source activate cntk_p36

テキストエディタを使用して新しいファイルを作成し、スクリプトで次のプログラムを使用して、CNTKで ONNX 形式ファイルを開きます。

import cntk as C# Import the PyTorch model into CNTK via the CNTK import APIz = C.Function.load("torch_model.onnx", device=C.device.cpu(), format=C.ModelFormat.ONNX)

このスクリプトを実行した後、CNTK はモデルをロードします。

また、前のスクリプトに以下を追加して実行することで、CNTK を使用して ONNX にエクスポートする事もできます。

# Export the model to ONNX via the CNTK export APIz.save("cntk_model.onnx", format=C.ModelFormat.ONNX)

ONNX のチュートリアル

• Apache MXNet から ONNX から CNTK へのチュートリアル (p. 106)• Chainer to ONNX to CNTK チュートリアル (p. 107)• Chainer to ONNX to MXNet チュートリアル (p. 109)• PyTorch to ONNX to MXNet チュートリアル (p. 112)• PyTorch to ONNX to CNTK チュートリアル (p. 110)

PyTorch to ONNX to MXNet チュートリアルONNX の概要

Open Neural Network Exchange (ONNX) は深層学習モデルを表すために使用されるオープンフォーマットです。ONNX は、Amazon Web Services、Microsoft、Facebook、およびその他のいくつかのパートナーでサポートされています。深層学習モデルは、選択するどのようなフレームワークでも設計、トレーニング、デプロイできます。ONNX モデルの利点は、簡単にフレームワーク間を移動することができることです。

このチュートリアルでは、ONNX で Deep Learning AMI と Conda を使用する方法を示します。これらのステップに従えば、モデルを訓練したり、事前トレーニング済みのモデルを他のフレームワークからロードしたり、このモデルを ONNX にエクスポートしたり、別のフレームワークでモデルをインポートしたりできます。

ONNX 前提条件

この ONNX チュートリアルを使用するには、Deep Learning AMI と Conda バージョン 12 以降が必要です。Deep Learning AMI と Conda の開始方法の詳細については、「Deep Learning AMI と Conda (p. 5)」を参照してください。

Important

これらの例では、最大 8 GB (またはそれ以上) のメモリが必要な関数を使用しています。十分なメモリを搭載したインスタンスのタイプを選択してください。

112

Page 117: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドONNX でフレームワークを使用する

Deep Learning AMI と Conda でターミナルセッションを起動し、次のチュートリアルを開始します。

PyTorch モデルを ONNX に変換し、モデルを MXNet にロードする

まず、PyTorch 環境をアクティブ化します。

$ source activate pytorch_p36

テキストエディタを使用して新しいファイルを作成し、スクリプトで次のプログラムを使用して PyTorchでモックモデルをトレーニングし、ONNX 形式にエクスポートします。

# Build a Mock Model in PyTorch with a convolution and a reduceMean layerimport torchimport torch.nn as nnimport torch.nn.functional as Fimport torch.optim as optimfrom torchvision import datasets, transformsfrom torch.autograd import Variableimport torch.onnx as torch_onnx

class Model(nn.Module): def __init__(self): super(Model, self).__init__() self.conv = nn.Conv2d(in_channels=3, out_channels=32, kernel_size=(3,3), stride=1, padding=0, bias=False)

def forward(self, inputs): x = self.conv(inputs) #x = x.view(x.size()[0], x.size()[1], -1) return torch.mean(x, dim=2)

# Use this an input trace to serialize the modelinput_shape = (3, 100, 100)model_onnx_path = "torch_model.onnx"model = Model()model.train(False)

# Export the model to an ONNX filedummy_input = Variable(torch.randn(1, *input_shape))output = torch_onnx.export(model, dummy_input, model_onnx_path, verbose=False)print("Export of torch_model.onnx complete!")

このスクリプトを実行すると、同じディレクトリに新しく作成された .onnx ファイルが表示されます。ここで、MXNet Conda 環境に切り替え MXNet モデルをロードします。

次に、MXNet 環境をアクティブ化します。

$ source deactivate$ source activate mxnet_p36

テキストエディタを使用して新しいファイルを作成し、スクリプトで次のプログラムを使用して、MXNetで ONNX 形式ファイルを開きます。

import mxnet as mxfrom mxnet.contrib import onnx as onnx_mxnetimport numpy as np

113

Page 118: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドモデル提供

# Import the ONNX model into MXNet's symbolic interfacesym, arg, aux = onnx_mxnet.import_model("torch_model.onnx")print("Loaded torch_model.onnx!")print(sym.get_internals())

このスクリプトを実行した後、MXNet はモデルをロードし、基本的なモデル情報が出力されます。

ONNX のチュートリアル

• Apache MXNet から ONNX から CNTK へのチュートリアル (p. 106)• Chainer to ONNX to CNTK チュートリアル (p. 107)• Chainer to ONNX to MXNet チュートリアル (p. 109)• PyTorch to ONNX to MXNet チュートリアル (p. 112)• PyTorch to ONNX to CNTK チュートリアル (p. 110)

モデル提供Deep Learning AMI と Conda にインストールされているモデル提供のオプションを以下に示します。いずれかのオプションをクリックして、使用方法をご覧ください。

トピック• Apache MXNet (MMS) のモデルサーバー (p. 114)• TensorFlow Serving (p. 116)

Apache MXNet (MMS) のモデルサーバーModel Server for Apache MXNet (MMS) は、Apache MXNet (インキュベーション) からエクスポートされた、または Open Neural Network Exchange (ONNX) モデル形式にエクスポートされた深層学習モデルを提供するための柔軟なツールです。MMS は Conda の DLAMI にあらかじめインストールされています。MMS のこのチュートリアルでは、画像分類モデルの提供方法を示します。

トピック• MMS のイメージ分類モデルを供給する (p. 114)• その他の例 (p. 116)• 詳細 (p. 116)

MMS のイメージ分類モデルを供給する

このチュートリアルでは、MMS でイメージ分類モデルを供給する方法を説明します。このモデルは MMSModel Zoo を通して提供され、MMS を開始すると自動的にダウンロードされます。サーバーが実行されると、このサーバーによって予測リクエストがリッスンされます。イメージをアップロードすると (この例では猫の画像)、サーバーはモデルがトレーニングされた 1000 クラスから最適な 5 つの一致するクラスの予測を返します。モデルに関する詳細、トレーニング方法、およびモデルをテストする方法については、「MMS Model Zoo」を参照してください。

MMS のイメージ分類モデル例を供給するには

1. Deep Learning AMI と Conda の Amazon Elastic Compute Cloud (Amazon EC2) インスタンスに接続します。

2. MXNet 環境を有効化します。

114

Page 119: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドモデル提供

• Python 3 ベースの MXNet と Keras 2 を CUDA 9.0 と MKL-DNN で使用する場合は、以下のコマンドを実行します。

$ source activate mxnet_p36

• Python 2 ベースの MXNet と Keras 2 を CUDA 9.0 と MKL-DNN で使用する場合は、以下のコマンドを実行します。

$ source activate mxnet_p27

3. 次のコマンドで MMS を実行します。 > /dev/null を追加すると、以降のテストの実行中にログ出力が停止します。

$ mxnet-model-server --start > /dev/null

これで MMS がホストで実行され、推定リクエストをリッスンします。4. 次に、curl コマンドを使用して MMS の管理エンドポイントでどのようなモデルを提供するかを指定

します。

$ curl -X POST "http://localhost:8081/models?url=https%3A%2F%2Fs3.amazonaws.com%2Fmodel-server%2Fmodels%2Fsqueezenet_v1.1%2Fsqueezenet_v1.1.model"

5. MMS には、使用するワーカーの数が渡される必要があります。このテストでは、3 を試すことができます。

$ curl -v -X PUT "http://localhost:8081/models/squeezenet_v1.1?min_worker=3"

6. 猫の画像をダウンロードして MMS 予測エンドポイントに送信します。

$ curl -O https://s3.amazonaws.com/model-server/inputs/kitten.jpg$ curl -X POST http://127.0.0.1:8080/predictions/squeezenet_v1.1 -T kitten.jpg

予測エンドポイントは次のような上位 5 つの予測に類似する予測を JSON で返します。ここでは、エジプシャンマウが含まれている可能性が 94%、続いてオオヤマネコあるいはヤマネコである可能性が5.5% となります。

{ "prediction": [ [{ "class": "n02124075 Egyptian cat", "probability": 0.940 }, { "class": "n02127052 lynx, catamount", "probability": 0.055 }, { "class": "n02123045 tabby, tabby cat", "probability": 0.002 }, { "class": "n02123159 tiger cat", "probability": 0.0003 }, { "class": "n02123394 Persian cat", "probability": 0.0002

115

Page 120: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドモデル提供

} ] ]}

7. いくつかの画像をテストするか、テストが終了したら、サーバーを停止します。

$ mxnet-model-server --stop

このチュートリアルでは、基本的なモデルを中心に提供します。MMS は、モデル提供による ElasticInference の使用もサポートしています。詳細については、「Model Serving with Amazon ElasticInference」を参照してください。

他の MMS 機能の詳細を見る準備ができたら、GitHub の MMS ドキュメントを参照してください。

その他の例

MMS には、DLAMI で実行できるさまざまな例があります。それらの例は MMS プロジェクトリポジトリで見つかります。

詳細

Docker により MMS を設定する方法や最新の MMS 機能を利用する方法を説明したドキュメントなど、MMS の他のドキュメントについては、GitHub の MMS プロジェクトページに Star を付けてください。

TensorFlow ServingTensorFlow Serving は、機械学習モデル向けの柔軟で高パフォーマンスの処理システムです。

tensorflow-serving-api は Deep Learning AMI と Conda にあらかじめインストールされています。 MNIST モデルをトレーニング、エクスポート、処理するサンプルスクリプトが、~/examples/tensorflow-serving/ にあります。

これらの例を実行するには、まず Deep Learning AMI と Conda に接続し、Python 2.7 TensorFlow 環境を有効化します。サンプルスクリプトは Python 3.x とは互換性がありません。

$ source activate tensorflow_p27

ここで、処理するサンプルスクリプトのフォルダにディレクトリを変更します。

$ cd ~/examples/tensorflow-serving/

事前トレーニング済み Inception モデルを提供する

以下に示しているのは、Inception のような異なるモデルを提供するために試すことができる例です。原則として、提供可能なモデルとクライアントスクリプトが DLAMI にすでにダウンロードされている必要があります。

インセプションモデルによる推論の提供とテスト

1. モデルをダウンロードします。

$ curl -O https://s3-us-west-2.amazonaws.com/aws-tf-serving-ei-example/inception.zip

116

Page 121: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドモデル提供

2. モデルを展開します。

$ unzip inception.zip

3. ハスキーの画像をダウンロードします。

$ curl -O https://upload.wikimedia.org/wikipedia/commons/b/b5/Siberian_Husky_bi-eyed_Flickr.jpg

4. サーバーを起動します。Amazon Linux の場合、model_base_path に使用されるディレクトリを /home/ubuntu から /home/ec2-user に変更する必要があります。

$ tensorflow_model_server --model_name=inception --model_base_path=/home/ubuntu/examples/tensorflow-serving/SERVING_INCEPTION --port=9000

5. サーバーをフォアグラウンドで実行している場合、続行するには別のターミナルセッションを開始する必要があります。新しいターミナルを開き、TensorFlow を source activatetensorflow_p27 で有効化します。次に、任意のテキストエディタを使用して、以下の内容のスクリプトを作成します。このスクリプトに inception_client.py とい名前を付けます。このスクリプトは画像のファイル名をパラメータとして受け取り、事前トレーニング済みモデルから予測結果を取得します。

from __future__ import print_function

import grpcimport tensorflow as tf

from tensorflow_serving.apis import predict_pb2from tensorflow_serving.apis import prediction_service_pb2_grpc

tf.app.flags.DEFINE_string('server', 'localhost:9000', 'PredictionService host:port')tf.app.flags.DEFINE_string('image', '', 'path to image in JPEG format')FLAGS = tf.app.flags.FLAGS

def main(_): channel = grpc.insecure_channel(FLAGS.server) stub = prediction_service_pb2_grpc.PredictionServiceStub(channel) # Send request with open(FLAGS.image, 'rb') as f: # See prediction_service.proto for gRPC request/response details. data = f.read() request = predict_pb2.PredictRequest() request.model_spec.name = 'inception' request.model_spec.signature_name = 'predict_images' request.inputs['images'].CopyFrom( tf.contrib.util.make_tensor_proto(data, shape=[1])) result = stub.Predict(request, 10.0) # 10 secs timeout print(result) print("Inception Client Passed")

if __name__ == '__main__': tf.app.run()

6. サーバーの場所、ポート、ハスキーの写真のファイル名をパラメータとして渡してスクリプトを実行します。

$ python inception_client.py --server=localhost:9000 --image Siberian_Husky_bi-eyed_Flickr.jpg

117

Page 122: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドモデル提供

MNIST モデルをトレーニングして提供する

このチュートリアルでは、モデルをエクスポートして、tensorflow_model_server アプリケーションで処理します。最終的に、サンプルのクライアントスクリプトを使用してモデルサーバーをテストできます。

MNIST モデルをトレーニングおよびエクスポートするスクリプトを実行します。スクリプトの唯一の引数として、モデルを保存するフォルダのロケーションを指定する必要があります。ここでは、mnist_modelに入力するだけです。スクリプトによってフォルダが作成されます。

$ python mnist_saved_model.py /tmp/mnist_model

このスクリプトは出力に時間がかかることがあるため、少し待ちます。トレーニングが完了して最後にモデルがエクスポートされると、次の内容が表示されます。

Done training!Exporting trained model to mnist_model/1Done exporting!

次のステップでは、tensorflow_model_server を実行してエクスポートされたモデルを処理します。

$ tensorflow_model_server --port=9000 --model_name=mnist --model_base_path=/tmp/mnist_model

サーバーをテストするクライアントスクリプトが用意されています。

これ テストするには、新しいターミナルウィンドウを開く必要があります。

$ python mnist_client.py --num_tests=1000 --server=localhost:9000

その他の機能と例

TensorFlow Serving について詳しくお知りになりたい場合は、TensorFlow ウェブサイトを参照してください。

Amazon Elastic Inference を TensorFlow Serving で使用することもできます。詳細については、ElasticInference を TensorFlow Serving で使用する方法のガイドを参照してください。

118

Page 123: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドDLAMI のアップグレード

DLAMI のアップグレードここでは、DLAMI のアップグレードについての情報および DLAMI 上のソフトウェアを更新するためのヒントを示します。

トピック• DLAMI の新しいバージョンへのアップグレード (p. 119)• ソフトウェア更新のヒント (p. 119)

DLAMI の新しいバージョンへのアップグレードDLAMI のシステムイメージは、新しい深層学習フレームワークのリリース、CUDA やその他のソフトウェア更新、およびパフォーマンスチューニングを活用するため、定期的に更新されています。DLAMI をしばらく使用していて、更新を活用したい場合は、新しいインスタンスを起動する必要があります。また、データセット、チェックポイント、またはその他の重要なデータを手動で移行する必要があります。代わりに、Amazon EBS を使用してデータを保持し、新しい DLAMI にアタッチできます。このようにして頻繁にアップグレードし、データの移行にかかる時間を最小限に抑えることができます。

Note

DLAMI 間で Amazon EBS ボリュームをアタッチおよび移行する場合は、DLAMI と新しいボリュームの両方が同じアベイラビリティーゾーンにある必要があります。

1. Amazon EC2 コンソールを使用して、新しい Amazon EBS ボリュームを作成します。詳細な手順については、「Amazon EBS ボリュームを作成する」を参照してください。

2. 新しく作成した Amazon EBS ボリュームを既存の DLAMI にアタッチします。詳細な手順については、「Amazon EBS ボリュームのアタッチ」を参照してください。

3. データセット、チェックポイント、設定ファイルなどのデータを転送します。4. DLAMI を起動します。詳細な手順については、「DLAMI を起動および設定する (p. 20)」を参照して

ください。5. 古い DLAMI から Amazon EBS ボリュームをデタッチします。詳細な手順については、「Amazon

EBS ボリュームのデタッチ」を参照してください。6. Amazon EBS ボリュームを新しい DLAMI インスタンスにアタッチします。ステップ 2 から手順に

従ってボリュームをアタッチします。7. データが新しい DLAMI で利用できることを確認したら、古い DLAMI を停止して削除します。詳細な

クリーンアップ手順については、「クリーンアップ (p. 22)」を参照してください。

ソフトウェア更新のヒント時として、DLAMI のソフトウェアを手動で更新する必要がある場合があります。一般的には、pip を使用して Python パッケージを更新することをお勧めします。また、Deep Learning AMI と Conda の Conda 環境内のパッケージの更新にも pip を使用してください。特定のフレームワークまたはソフトウェアのアップグレードとインストールの手順については、それぞれのウェブサイトを参照してください。

特定のパッケージの最新のマスターブランチを実行する場合は、該当の環境を有効化して、pip install--upgrade コマンドの最後に --pre を追加します。以下に例を示します。

119

Page 124: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドソフトウェアの更新

source activate mxnet_p36pip install --upgrade mxnet --pre

120

Page 125: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドデータ保護

AWS Deep Learning AMI でのセキュリティ

AWS では、クラウドのセキュリティが最優先事項です。AWS のお客様は、セキュリティを最も重視する組織の要件を満たすように構築されたデータセンターとネットワークアーキテクチャーから利点を得られます。

セキュリティは、AWS とお客様の間の共有責任です。責任共有モデルでは、これをクラウドのセキュリティおよびクラウド内のセキュリティと説明しています。

• クラウドのセキュリティ – AWS は、AWS クラウド内で AWS サービスを実行するインフラストラクチャを保護する責任を担います。また、AWS は、使用するサービスを安全に提供します。AWSコンプライアンスプログラムの一環として、サードパーティーの監査が定期的にセキュリティの有効性をテストおよび検証しています。DLAMI に適用するコンプライアンスプログラムの詳細については、「コンプライアンスプログラムによる AWS 対象範囲内のサービス」を参照してください。

• クラウド内のセキュリティ – お客様の責任はお客様が使用する AWS のサービスによって決まります。また、お客様は、お客様のデータの機密性、企業の要件、および適用可能な法律および規制などの他の要因についても責任を担います。

このドキュメントでは、DLAMI を使用する際に責任共有モデルを適用する方法について説明します。以下のトピックでは、セキュリティおよびコンプライアンスの目的を達成するために DLAMI を設定する方法を示します。また、DLAMI リソースのモニタリングや保護に役立つ他の AWS のサービスの使用方法についても説明します。

詳細については、「Amazon EC2 におけるセキュリティ」を参照してください。

トピック• AWS Deep Learning AMI でのデータ保護 (p. 121)• AWS Deep Learning AMI での Identity and Access Management (p. 122)• AWS Deep Learning AMI でのログ記録とモニタリング (p. 126)• AWS Deep Learning AMI のコンプライアンス検証 (p. 126)• AWS Deep Learning AMI の耐障害性 (p. 126)• AWS Deep Learning AMI でのインフラストラクチャセキュリティ (p. 127)

AWS Deep Learning AMI でのデータ保護AWS Deep Learning AMI は、データ保護の規制やガイドラインを含む AWS 責任共有モデルに準拠しています。AWS は、AWS のすべてのサービスを実行するグローバルなインフラストラクチャを保護する責任を担います。また、AWS は、カスタマーコンテンツおよび個人データを取り扱うためのセキュリティ構成の統制など、このインフラストラクチャ上でホストされるデータ管理を維持します。データコントローラーまたはデータプロセッサとして機能する AWS のお客様および APN パートナーは、AWS クラウドに保存された個人データに対する責任を担います。

データ保護目的の場合、AWS アカウント認証情報を保護して IAM (AWS Identity and AccessManagement) で個々のユーザーアカウントをセットアップし、そのユーザーに各自の職務を果たすために必要なアクセス許可のみが付与されるようにすることをお勧めします。また、以下の方法でデータを保護することをお勧めします。

• 各アカウントで多要素認証 (MFA) を使用します。

121

Page 126: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドIdentity and Access Management

• SSL/TLS を使用して AWS リソースと通信します。• AWS CloudTrail で API とユーザーアクティビティログをセットアップします。• AWS 暗号化ソリューションを、AWS サービス内のすべてのデフォルトのセキュリティ管理と一緒に使

用します。• Amazon Macie などの高度なマネージドセキュリティサービスを使用します。これにより、Amazon S3

に保存される個人データの検出と保護が支援されます。

顧客のアカウント番号などの機密の識別情報は、[名前] フィールドなどの自由形式のフィールドに配置しないことを強くお勧めします。これは、コンソール、API、AWS CLI、AWS SDK で DLAMI または他のAWS サービスを使用する場合も同様です。DLAMI または他のサービスに入力したデータはすべて、診断ログの内容として取得される可能性があります。外部サーバーへの URL を指定するときは、そのサーバーへのリクエストを検証するための認証情報を URL に含めないでください。

データ保護の詳細については、「Amazon EC2 におけるデータ保護」および AWS セキュリティブログのAWS Shared Responsibility Model and GDPR」ブログ投稿を参照してください。

AWS Deep Learning AMI での Identity and AccessManagement

AWS Identity and Access Management (IAM) は、管理者が AWS リソースへのアクセスを安全にコントロールするために役立つ AWS のサービスです。IAM 管理者は、DLAMI リソースを使用するために認証(サインイン) および承認 (アクセス許可を持つ) される者を制御します。IAM は、追加料金なしで使用できる AWS のサービスです。

Identity and Access Management の詳細については、「Amazon EC2 の Identity and AccessManagement」を参照してください。

トピック• アイデンティティを使用した認証 (p. 122)• ポリシーを使用したアクセスの管理 (p. 124)• IAM を Amazon EMR (p. 126)

アイデンティティを使用した認証認証は、アイデンティティ認証情報を使用して AWS にサインインする方法です。AWS マネジメントコンソール を使用するサインインの詳細については、IAM ユーザーガイド の「IAM コンソールとサインインページ」を参照してください。

AWS アカウントのルートユーザー、IAM ユーザーとして、または IAM ロールを引き受けて、認証されている (AWS にサインインしている) 必要があります。会社のシングルサインオン認証を使用することも、Google や Facebook を使用してサインインすることもできます。このような場合、管理者は以前にIAM ロールを使用して ID フェデレーションを設定しました。他の会社の認証情報を使用して AWS にアクセスした場合、ロールを間接的に割り当てられています。

AWS マネジメントコンソール へ直接サインインするには、ルートユーザー E メールまたは IAM ユーザー名とパスワードを使用します。ルートユーザー または IAM を使用して AWS にプログラム的にアクセスできます。AWS では、SDK とコマンドラインツールを提供して、お客様の認証情報を使用して、リクエストに暗号で署名できます。AWS ツールを使用しない場合は、リクエストに自分で署名する必要があります。これには、インバウンド API リクエストを認証するためのプロトコル、署名バージョン 4 を使用します。リクエストの認証の詳細については、AWS General Referenceの「署名バージョン 4 の署名プロセス」を参照してください。

122

Page 127: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドアイデンティティを使用した認証

使用する認証方法を問わず、追加のセキュリティ情報の提供を要求される場合もあります。たとえば、AWS では多要素認証 (MFA) を使用してアカウントのセキュリティを高めることを推奨しています。詳細については、IAM ユーザーガイドの「AWS のデバイスに多要素認証 (MFA) を使用」を参照してください。

AWS アカウントのルートユーザーAWS アカウントを初めて作成する場合は、このアカウントのすべての AWS サービスとリソースに対して完全なアクセス権限を持つシングルサインインアイデンティティで始めます。このアイデンティティはAWS アカウント ルートユーザー と呼ばれ、アカウントの作成に使用した E メールアドレスとパスワードでのサインインによりアクセスします。強くお勧めしているのは、日常的なタスクには、それが管理者タスクであっても、ルートユーザーを使用しないことです。代わりに、最初の IAM ユーザーを作成するためだけに ルートユーザー を使用するというベストプラクティスに従います。その後、ルートユーザー認証情報を安全な場所に保管し、それらを使用して少数のアカウントおよびサービス管理タスクのみを実行します。

IAM ユーザーとグループIAM ユーザーは、単一のユーザーまたはアプリケーションに特定のアクセス許可がある AWS アカウント内のアイデンティティです。IAM ユーザーは、ユーザー名とパスワード、アクセスキーのセットなど、長期的な認証情報を持つことができます。アクセスキーを生成する方法の詳細については、IAM ユーザーガイド の「IAM ユーザーのアクセスキーの管理」を参照してください。IAM ユーザーにアクセスキーを生成するとき、必ずキーペアを表示して安全に保存してください。後になって、シークレットアクセスキーを回復することはできません。新しいアクセスキーペアを生成する必要があります。

IAM グループは、IAM ユーザーのコレクションを指定するアイデンティティです。グループとしてサインインすることはできません。グループを使用して、一度に複数のユーザーに対してアクセス許可を指定できます。多数の組のユーザーがある場合、グループを使用すると管理が容易になります。たとえば、IAMAdmin という名前のグループを設定して、そのグループに IAM リソースを管理するアクセス許可を与えることができます。

ユーザーは、ロールとは異なります。ユーザーは 1 人の特定の人またはアプリケーションに一意に関連付けられますが、ロールはそれを必要とする任意の人が引き受けるようになっています。ユーザーには永続的な長期の認証情報がありますが、ロールでは一時的な認証情報が利用できます。詳細については、IAMユーザーガイド の「IAM ユーザーの作成が適している場合 (ロールではなく)」を参照してください。

IAM ロールIAM ロールは、特定のアクセス許可を持つ、AWS アカウント内のアイデンティティです。これは IAMユーザーに似ていますが、特定のユーザーに関連付けられていません。ロールを切り替えて、AWS マネジメントコンソール で IAM ロールを一時的に引き受けることができます。ロールを引き受けるには、AWSCLI または AWS API オペレーションを呼び出すか、カスタム URL を使用します。ロールを使用する方法の詳細については、IAM ユーザーガイド の「IAM ロールの使用」を参照してください。

IAM ロールと一時的な認証情報は、次の状況で役立ちます。

• 一時的な IAM ユーザーアクセス許可 – IAM ユーザーは、特定のタスクに対して複数の異なるアクセス許可を一時的に IAM ロールで引き受けることができます。

• フェデレーティッドユーザーアクセス – IAM ユーザーを作成する代わりに、AWS Directory Service、エンタープライズユーザーディレクトリ、またはウェブ ID プロバイダーに既存のアイデンティティを使用できます。このようなユーザーはフェデレーティッドユーザーと呼ばれます。AWS では、ID プロバイダーを通じてアクセスがリクエストされたとき、フェデレーティッドユーザーにロールを割り当てます。フェデレーティッドユーザーの詳細については、IAM ユーザーガイドの「フェデレーティッドユーザーとロール」を参照してください。

• クロスアカウントアクセス – IAM ロールを使用して、自分のアカウントのリソースにアクセスすることを別のアカウントの信頼済みプリンシパルに許可できます。ロールは、クロスアカウントアクセスを許

123

Page 128: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドポリシーを使用したアクセスの管理

可する主な方法です。ただし、一部の AWS のサービスでは、(ロールをプロキシとして使用する代わりに) リソースにポリシーを直接アタッチできます。クロスアカウントアクセスでのロールとリソースベースのポリシーの違いの詳細については、IAM ユーザーガイド の「IAM ロールとリソースベースのポリシーとの相違点」を参照してください。

• AWS サービスアクセス – サービスロールは、サービスがお客様に代わってお客様のアカウントでアクションを実行するために引き受ける IAM ロールです。一部の AWS のサービス環境を設定するときに、サービスが引き受けるロールを定義する必要があります。このサービスロールには、サービスが必要とする AWS のリソースにサービスがアクセスするために必要なすべてのアクセス権限を含める必要があります。サービスロールはサービスによって異なりますが、多くのサービスロールでは、そのサービスの文書化された要件を満たしている限り、アクセス権限を選択することができます。サービスロールは、お客様のアカウント内のみでアクセスを提供します。他のアカウントのサービスへのアクセス権を付与するためにサービスロールを使用することはできません。IAM 内部からロールを作成、修正、削除できます。たとえば、Amazon Redshift がお客様に代わって Amazon S3 バケットにアクセスし、バケットからデータを Amazon Redshift クラスターにロードすることを許可するロールを作成できます。詳細については、IAM ユーザーガイドのAWS サービスにアクセス権限を委任するロールの作成を参照してください。

• Amazon EC2で実行されているアプリケーション – IAM ロールを使用して、EC2 インスタンスで実行され、AWS CLI または AWS API リクエストを作成しているアプリケーションの一時的な認証情報を管理できます。これは、EC2 インスタンス内でのアクセスキーの保存に推奨されます。AWS ロールを EC2インスタンスに割り当て、そのすべてのアプリケーションで使用できるようにするには、インスタンスにアタッチされたインスタンスプロファイルを作成します。インスタンスプロファイルにはロールが含まれ、EC2 インスタンスで実行されるプログラムは一時認証情報を取得することができます。詳細については、IAM ユーザーガイドの「Amazon EC2 インスタンスで実行されるアプリケーションに IAM ロールを使用してアクセス権限を付与する」を参照してください。

IAM ロールを使用するべきかどうかについては、IAM ユーザーガイド の「IAM ロール (ユーザーではない)の作成が適している場合」を参照してください。

ポリシーを使用したアクセスの管理AWS でアクセスをコントロールするには、ポリシーを作成して IAM アイデンティティや AWS リソースにアタッチします。ポリシーは AWS のオブジェクトであり、アイデンティティやリソースに関連付けて、これらのアクセス許可を定義します。AWS は、エンティティ (ルートユーザー、IAM ユーザーまたはIAM ロール) によってリクエストが行われると、それらのポリシーを評価します。ポリシーでのアクセス許可により、リクエストが許可されるか拒否されるかが決まります。大半のポリシーは JSON ドキュメントとして AWS に保存されます。JSON ポリシードキュメントの構造と内容の詳細については、IAM ユーザーガイド の「JSON ポリシー概要」を参照してください。

IAM 管理者は、ポリシーを使用して、AWS リソースへのアクセスを許可するユーザーと、これらのリソースで実行できるアクションを指定できます。すべての IAM エンティティ (ユーザーまたはロール) は、アクセス許可のない状態からスタートします。言い換えると、デフォルト設定では、ユーザーは何もできず、自分のパスワードを変更することすらできません。何かを実行するアクセス許可をユーザーに付与するには、管理者がユーザーにアクセス許可ポリシーをアタッチする必要があります。また、管理者は、必要なアクセス許可があるグループにユーザーを追加できます。管理者がグループにアクセス許可を付与すると、そのグループ内のすべてのユーザーにこれらのアクセス許可が付与されます。

IAM ポリシーは、オペレーションの実行方法を問わず、アクションのアクセス許可を定義します。たとえば、iam:GetRole アクションを許可するポリシーがあるとします。このポリシーがあるユーザーは、AWS マネジメントコンソール、AWS CLI、または AWS API からロールの情報を取得できます。

アイデンティティベースのポリシーアイデンティティベースのポリシーは、IAM ユーザー、ロール、グループなどのアイデンティティにJSON ドキュメントとしてアタッチできるアクセス許可ポリシーです。これらのポリシーは、アイデンティティが実行できるアクション、リソース、および条件を制御します。アイデンティティベースのポリシーを作成する方法については、IAM ユーザーガイド の「IAM ポリシー の 作成」を参照してください 。

124

Page 129: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドポリシーを使用したアクセスの管理

アイデンティティベースのポリシーは、さらにインラインポリシーまたは管理ポリシーに分類できます。インラインポリシーは、単一のユーザー、グループ、またはロールに直接埋め込まれています。管理ポリシーは、AWS アカウント内の複数のユーザー、グループ、およびロールにアタッチできるスタンドアロンポリシーです。管理ポリシーには、AWS 管理ポリシーとカスタマー管理ポリシーが含まれます。管理ポリシーまたはインラインポリシーのいずれかを選択する方法については、IAM ユーザーガイド の「管理ポリシーとインラインポリシーの比較」を参照してください。

リソースベースのポリシーリソースベースのポリシーは、Amazon S3 バケットなどのリソースにアタッチする JSON ポリシードキュメントです。サービス管理者は、これらのポリシーを使用して、特定のプリンシパル (アカウントメンバー、ユーザー、またはロール) がそのリソースに対して実行する条件およびアクションを定義することができます。リソースベースのポリシーはインラインポリシーです。マネージド型のリソースベースのポリシーはありません。

アクセスコントロールリスト (ACL)アクセスコントロールリスト (ACL) は、どのプリンシパル (アカウントメンバー、ユーザー、またはロール) にリソースへのアクセス許可を付与するかを制御する一種のポリシーです。ACL は、リソースベースのポリシーと似ていますが、JSON ポリシードキュメント形式を使用しません。ACL をサポートするサービスとして Amazon S3、AWS WAF、Amazon VPC などがあります。ACL の詳細については、『AmazonSimple Storage Service 開発者ガイド』の「アクセスコントロールリスト (ACL) の概要」を参照してください。

その他のポリシータイプAWS では、別のあまり一般的ではないポリシータイプもサポートしています。これらのポリシータイプでは、より一般的なポリシータイプで付与された最大のアクセス許可を設定できます。

• アクセス許可の境界 – アクセス許可の境界は、アイデンティティベースのポリシーが IAM エンティティ(IAM ユーザーまたはロール) に付与できるアクセス許可の上限を設定する高度な機能です。エンティティのアクセス許可の境界を設定できます。結果として得られるアクセス許可は、エンティティの IDベースのポリシーとそのアクセス許可の境界の共通部分です。Principal フィールドでユーザーまたはロールを指定するリソースベースのポリシーは、アクセス許可の境界では制限されません。これらのポリシーのいずれかを明示的に拒否した場合、その許可は無効になります。アクセス許可の境界の詳細については、IAM ユーザーガイド の「IAM エンティティのアクセス許可の境界」を参照してください。

• サービスコントロールポリシー (SCP) – SCP は、AWS Organizations で 組織や組織単位 (OU) に最大権限を指定する JSON ポリシーです。AWS Organizations は、お客様のビジネスが所有する複数の AWSアカウントをグループ化し、一元的に管理するサービスです。組織内のすべての機能を有効にすると、サービス制御ポリシー (SCP) を一部またはすべてのアカウントに適用できます。SCP はメンバーアカウントのエンティティに対するアクセス許可を制限します (各 AWS アカウントのルートユーザー など)。組織 および SCP の詳細については、AWS Organizations ユーザーガイド の「SCP の動作」を参照してください。

• セッションポリシー – セッションポリシーは、ロールまたはフェデレーティッドユーザーの一時セッションをプログラムで作成する際にパラメータとして渡す高度なポリシーです。結果として得られるセッションのアクセス許可は、ユーザーまたはロールの ID ベースのポリシーとセッションポリシーの共通部分です。また、リソースベースのポリシーからアクセス許可が派生する場合もあります。これらのポリシーのいずれかを明示的に拒否した場合、その許可は無効になります。詳細については、IAM ユーザーガイド の「セッションポリシー」を参照してください。

複数のポリシータイプ1 つのリクエストに複数のタイプのポリシーが適用されると、結果として作成されるアクセス許可を理解するのがさらに複雑になります。複数のポリシータイプが関連するとき、リクエストを許可するかどうか

125

Page 130: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドIAM を Amazon EMR

を AWS が決定する方法の詳細については、IAM ユーザーガイド の「ポリシーの評価ロジック」を参照してください。

IAM を Amazon EMRAmazon EMR で AWS Identity and Access Management を使用して、ユーザー、AWS リソース、グループ、ロール、ポリシーを定義できます。また、これらのユーザーとロールがアクセスできる AWS サービスを制御することもできます。

Amazon EMR での IAM の使用の詳細については、「Amazon EMR での AWS Identity and AccessManagement」を参照してください。

AWS Deep Learning AMI でのログ記録とモニタリング

AWS Deep Learning AMI インスタンスには、GPU 使用統計を Amazon CloudWatch に報告するユーティリティを含む、いくつかの GPU モニタリングツールが付属しています。詳細については、「GPU のモニタリングおよび最適化」と「Amazon EC2 のモニタリング」を参照してください。

AWS Deep Learning AMI のコンプライアンス検証サードパーティーの監査者は、複数の AWS コンプライアンスプログラムの一環として AWS DeepLearning AMI のセキュリティとコンプライアンスを評価します。サポートされているコンプライアンスプログラムの詳細については、「 Amazon EC2 のコンプライアンス検証」を参照してください。

特定のコンプライアンスプログラムの対象となる AWS サービスのリストについては、「コンプライアンスプログラムによる AWS 対象範囲内のサービス」を参照してください。一般的な情報については、「AWS コンプライアンスプログラム」を参照してください。

サードパーティーの監査レポートをダウンロードするには、AWS Artifact を使用します。詳細については、「AWS Artifact でレポートをダウンロードする」を参照してください。

DLAMI を使用する際のお客様のコンプライアンス責任は、データの機密性、企業のコンプライアンス目的、適用法規や規制によって決まります。AWS ではコンプライアンスに役立つ以下のリソースを用意しています。

• セキュリティおよびコンプライアンスのクイックスタートガイド – これらのデプロイガイドでは、アーキテクチャー上の考慮事項について説明し、セキュリティとコンプライアンスに重点を置いたベースライン環境を AWS でデプロイするための手順を説明します。

• AWS コンプライアンスのリソース – このワークブックおよびガイドのコレクションは、お客様の業界や場所に適用される場合があります。

• AWS Config 開発者ガイドの「ルールでのリソースの評価」– AWS Config サービスでは、リソース設定が社内のプラクティス、業界のガイドライン、規制にどの程度適合しているかを評価します。

• AWS Security Hub – この AWS サービスでは、AWS 内のセキュリティ状態を包括的に表示しており、セキュリティ業界の標準およびベストプラクティスへの準拠を確認するのに役立ちます。

AWS Deep Learning AMI の耐障害性AWS のグローバルインフラストラクチャは AWS リージョンとアベイラビリティーゾーンを中心として構築されます。AWS リージョンには、低レイテンシー、高いスループット、そして高度の冗長ネットワーク

126

Page 131: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドインフラストラクチャセキュリティ

で接続されている複数の物理的に独立・隔離されたアベイラビリティーゾーンがあります。アベイラビリティーゾーンでは、ゾーン間で中断することなく自動的にフェイルオーバーするアプリケーションとデータベースを設計および運用することができます。アベイラビリティーゾーンは、従来の単一または複数のデータセンターインフラストラクチャよりも可用性、耐障害性、および拡張性が優れています。

AWSのリージョンやアベイラビリティーゾーンの詳細については、AWSグローバルインフラストラクチャを参照してください。

データの耐障害性とバックアップのニーズをサポートするための機能については、「Amazon EC2 の耐障害性」を参照してください。

AWS Deep Learning AMI でのインフラストラクチャセキュリティ

AWS Deep Learning AMI のインフラストラクチャセキュリティは Amazon EC2 にサポートされています。詳細については、「Amazon EC2 におけるインフラストラクチャセキュリティ」を参照してください。

127

Page 132: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドフォーラム

関連情報トピック

• フォーラム (p. 128)• 関連するブログ記事 (p. 128)• よくある質問 (p. 128)

フォーラム• フォーラム: AWS Deep Learning AMIs

関連するブログ記事• Deep Learning AMI 関連記事の最新リスト• AWS Deep Learning AMI を起動します (10 分以内)• 最適化された TensorFlow 1.6 を使用した Amazon EC2 C5 および P3 インスタンスでのより高速なト

レーニング• Machine Learning ユーザー向けの新しい AWS Deep Learning AMI• 新しいトレーニングコースが利用可能に: AWS の機械学習とディープラーニングのご紹介• AWS のディープラーニング

よくある質問• Q. DLAMI に関する製品発表を追跡するにはどうすればよいですか?

ここでは 2 通りの方法をお勧めします。• ブログのカテゴリ「AWS 深層学習 AMI」をブックマークします。Deep Learning AMI 関連記事の最新

リスト にあります。• フォーラム: AWS Deep Learning AMIs の「確認」

• Q. NVIDIA ドライバと CUDA はインストールされますか?

はい。一部の DLAMI は、バージョンが異なります。Deep Learning AMI と Conda (p. 5) には、すべてのDLAMI の最新バージョンが含まれています。詳細については、CUDA のインストール環境およびフレームワークのバインド (p. 7) を参照してください。また、インストールされる内容を確認するには、マーケットプレイスで特定の AMI の詳細ページを参照してください。

• Q. cuDNN はインストールされますか?

はい。• Q. GPU が検出されたことや、GPU の現在のステータスを確認するには、どうすればよいですか?

nvidia-smi を実行します。これにより、1 つ以上の GPU (個数はインスタンスタイプによって決まります) と現在のメモリ使用率が表示されます。

• Q. Q. 仮想環境は、自分専用にセットアップされますか?

はい。ただし、Deep Learning AMI と Conda (p. 5) の場合に限られます。

128

Page 133: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドよくある質問

• Q. どのバージョンの Python がインストールされますか?

各 DLAMI には、Python 2 および 3 の両方がインストールされます。Deep Learning AMI とConda (p. 5) には、各フレームワークの両方のバージョン用の環境が含まれます。

• Q. Q. Keras はインストールされますか?

AMI によって異なります。Deep Learning AMI と Conda (p. 5) では、各フレームワークのフロントエンドとして Keras が使用できます。Keras のバージョンは、フレームワークでの Keras のサポート状況によって異なります。

• Q. Q. 無料で利用できますか?

DLAMI はすべて無料で利用できます。ただし、選択したインスタンスタイプによっては、インスタンスを無料で利用できない場合もあります。詳細については、DLAMI の料金表 (p. 19) を参照してください。

• Q. フレームワークから CUDA エラーや GPU 関連のメッセージが表示されます。何が問題なのでしょうか?

使用しているインスタンスタイプを確認してください。多くの例やチュートリアルが機能するには、GPU が必要です。nvidia-smi を実行しても GPU が表示されない場合は、1 つ以上の GPU を含むインスタンスを使用して別の DLAMI を起動する必要があります。詳細については、DLAMI のインスタンスタイプを選択する (p. 17) を参照してください。

• Q. Docker は使用できますか?

Deep Learning AMI と Conda のバージョン 14 から、Docker は事前にインストールされています。GPU を利用するには、GPU インスタンス上で nvidia-docker を使用する必要があります。

• Q. Linux DLAMI を利用できるリージョンを教えてください。

リージョン コード

米国東部 (オハイオ) us-east-2

米国東部(バージニア北部) us-east-1

GovCloud us-gov-west-1

米国西部 (北カリフォルニア) us-west-1

米国西部 (オレゴン) us-west-2

北京(中国) cn-north-1

寧夏 (中国) cn-northwest-1

アジアパシフィック (ムンバイ) ap-south-1

アジアパシフィック (ソウル) ap-northeast-2

アジアパシフィック (シンガポール)

ap-southeast-1

アジアパシフィック (シドニー) ap-southeast-2

アジアパシフィック (東京) ap-northeast-1

カナダ (中部) ca-central-1

欧州 (フランクフルト) eu-central-1

欧州 (アイルランド) eu-west-1

129

Page 134: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイドよくある質問

リージョン コード

欧州 (ロンドン) eu-west-2

欧州 (パリ) eu-west-3

SA (サンパウロ) sa-east-1

• Q. Windows DLAMI を利用できるリージョンを教えてください。

リージョン コード

米国東部 (オハイオ) us-east-2

米国東部(バージニア北部) us-east-1

GovCloud us-gov-west-1

米国西部 (北カリフォルニア) us-west-1

米国西部 (オレゴン) us-west-2

北京(中国) cn-north-1

アジアパシフィック (ムンバイ) ap-south-1

アジアパシフィック (ソウル) ap-northeast-2

アジアパシフィック (シンガポール)

ap-southeast-1

アジアパシフィック (シドニー) ap-southeast-2

アジアパシフィック (東京) ap-northeast-1

カナダ (中部) ca-central-1

欧州 (フランクフルト) eu-central-1

欧州 (アイルランド) eu-west-1

欧州 (ロンドン) eu-west-2

欧州 (パリ) eu-west-3

SA (サンパウロ) sa-east-1

130

Page 135: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイド

DLAMI のリリースノートDLAMI の最新のリリースノートについては、以下を参照してください。

• AWS Deep Learning Base AMI (Amazon Linux 2) バージョン 23.0• AWS Deep Learning Base AMI (Amazon Linux) バージョン 23.0• AWS Deep Learning Base AMI (Ubuntu 18.04) バージョン 23.0• AWS Deep Learning Base AMI (Ubuntu 16.04) バージョン 23.0• AWS Deep Learning AMI (Amazon Linux 2) バージョン 28.0• AWS Deep Learning AMI (Amazon Linux) バージョン 28.0• AWS Deep Learning AMI (Ubuntu 18.04) バージョン 28.0• AWS Deep Learning AMI (Ubuntu 16.04) バージョン 28.0

131

Page 136: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイド

AWS Deep Learning AMI 開発者ガイド のドキュメント履歴

update-history-change update-history-description update-history-date

TensorFlow 2 (p. 45) Deep Learning AMI with Condaには、CUDA 10 の TensorFlow 2が付属するようになりました。

December 3, 2019

AWS Inferentia (p. 84) Deep Learning AMI で AWSInferentia ハードウェアと AWSNeuron SDK がサポートされるようになりました。

December 3, 2019

CUDA 10 の PyTorch 1.0 (p. 6) Deep Learning AMI と Conda には、CUDA 10 の PyTorch 1.0 が付属するようになりました。

December 13, 2018

CUDA 10 は Deep Learning BaseAMI で利用可能です (p. 7)

CUDA 10 が Deep Learning BaseAMI のオプションとして追加されました。CUDA のバージョンを変更してテストする方法の手順。

December 11, 2018

TensorFlow と Horovod を使用した、256 の GPU によるトレーニング (p. 63)

TensorFlow と Horovod のチュートリアルが更新され、複数ノードのトレーニング例が追加されました。

November 28, 2018

TensorFlow Serving と Inceptionモデルの使用 (p. 116)

Inception モデルでの推論の使用例が、Elastic Inference を使用する場合と使用しない場合を含めて、TensorFlow Serving に追加されました。

November 28, 2018

Elastic Inference (p. 20) Elastic 推論の前提条件と関連情報がセットアップガイドに追加されました。

November 28, 2018

DLAMI にリリースされた MMSv1.0。 (p. 114)

MMS チュートリアルは、新しいモデルアーカイブ形式 (.mar) を使用するように更新され、新しい開始および停止機能を示しています。

November 15, 2018

ナイトリービルドからのTensorFlow のインストール (p. 43)

Deep Learning AMI と Conda でTensorFlow をアンインストールしてから TensorFlow のナイトリービルドをインストールする方法を説明するチュートリアルが追加されました。

October 16, 2018

ナイトリービルドからの MXNetのインストール (p. 36)

Deep Learning AMI と Conda でMXNet をアンインストールして

October 16, 2018

132

Page 137: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイド

から MXNet のナイトリービルドをインストールする方法を説明するチュートリアルが追加されました。

ナイトリービルドからの CNTKのインストール (p. 39)

Deep Learning AMI と Conda でCNTK をアンインストールしてから CNTK のナイトリービルドをインストールする方法を説明するチュートリアルが追加されました。

October 16, 2018

ナイトリービルドから PyTorchをインストールする (p. 42)

Deep Learning AMI と Conda でPyTorch をアンインストールしてから PyTorch のナイトリービルドをインストールする方法を説明するチュートリアルが追加されました。

September 25, 2018

Docker が DLAMI に事前にインストールされている (p. 128)

Deep Learning AMI と Conda のv14 から、Docker および NVIDIAの GPU 対応 Docker バージョンが事前にインストールされています。

September 25, 2018

分散トレーニングチュートリアル (p. 53)

マルチ GPU トレーニング用Keras-MXNet を使用する方法のチュートリアルが追加されました。Chainer のチュートリアルはv4.2.0 用に更新されました。

July 23, 2018

TensorBoard チュートリアル (p. 52)

例は、~/examples/tensorboardに移動しました。チュートリアルのパスが更新されました。

July 23, 2018

MXBoard チュートリアル (p. 49) MXNet モデルの可視化用MXBoard の使用方法のチュートリアルが追加されました。

July 23, 2018

Conda チュートリアル (p. 29) MOTD の例では、最新リリースを反映するように更新されました。

July 23, 2018

Chainer チュートリアル (p. 54) このチュートリアルでは、Chainer のソースから最新の例を使用するように更新されます。

July 23, 2018

以前の更新:

2018 年 7 月以前の AWS Deep Learning AMI の各リリースにおける重要な変更点を以下の表に示します。

変更 説明 改訂日

TensorFlow (Horovod を使用) TensorFlow および Horovod を使用した ImageNet のトレーニングのチュートリアルを追加します。

2018 年 6 月 6 日

133

Page 138: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイド

変更 説明 改訂日

アップグレードガイド アップグレードガイドを追加しました。

2018 年 5 月 15 日

新しいリージョンと新しい 10 分間チュートリアル

追加された新しいリージョン: 米国西部 (北カリフォルニア)、南米、カナダ (中部)、欧州 (ロンドン)、および欧州 (パリ)。また、「Deep Learning AMI の使用開始」という 10 分間チュートリアルの最初のリリースが追加されました。

2018 年 4 月 26 日

Chainer チュートリアル マルチ GPU、単一の GPU および CPU モデルで Chainer を使用するためのチュートリアルが追加されました。CUDA 統合は、複数のフレームワークで CUDA 8から CUDA 9 にアップグレードされました。

2018 年 2 月 28 日

Linux AMI v3.0 に加えて、MXNetModel Server、TensorFlowServing、および TensorBoard の導入

MXNet Model Serverv0.1.5、TensorFlow Servingv1.4.0、および TensorBoardv0.4.0 を使用した新しいモデルおよび可視化処理機能を CondaAMI で使用するチュートリアルを追加しました。AMI およびフレームワーク CUDA 機能については、Conda および CUDAの概要で説明されています。最新のリリースノートは https://aws.amazon.com/releasenotes/に移動しました。

2018 年 1 月 25 日

Linux AMI v2.0 Base、Source、および CondaAMI が NCCL 2.1 で更新されました。Source および Conda AMIが MXNet v1.0、PyTorch 0.3.0、および Keras 2.0.9 で更新されました。

2017 年 12 月 11 日

2 つの Windows AMI オプションを追加

Windows 2012 R2 および 2016AMI をリリース: AMI セレクションガイドおよびリリースノートに追加.

2017 年 11 月 30 日

初回のドキュメントリリース 変更されたトピック/セクションへのリンクを含む変更の詳細な説明。

2017 年 11 月 15 日

134

Page 139: Deep Learning AMI - 開発者ガイド · 使い始めるのは簡単です.このガイドには、最適な dlami を選択する方法やユースケースと予算に適した

Deep Learning AMI 開発者ガイド

AWS の用語集最新の AWS の用語については、『AWS General Reference』の「AWS の用語集」を参照してください。

135