ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

GPU および並列でのビッグ データを使用した深層学習

ニューラル ネットワークは本質的に並列アルゴリズムです。この並列性の利点を活かし、Parallel Computing Toolbox™ を使用して、学習をマルチコア CPU、グラフィックス処理装置 (GPU)、および複数の CPU と GPU を備えたコンピューターのクラスターに分散させることができます。

深いネットワークの学習は計算量が非常に多くなります。通常は、高性能の GPU を使用して学習時間を短縮できます。適切な GPU がない場合は、代わりに 1 つ以上の CPU コアで学習させることができます。畳み込みニューラル ネットワークの学習は、1 つの GPU または CPU で、複数の GPU または CPU コアで、あるいはクラスターで並列に行えます。GPU または並列オプションを使用するには Parallel Computing Toolbox が必要です。

ヒント

GPU は自動的にサポートされます。既定では、関数 trainNetwork は GPU を利用できる場合は、GPU を使用します。

複数の GPU があるマシンにアクセスできる場合は、単に学習オプション 'ExecutionEnvironment','multi-gpu' を指定します。

大きすぎてメモリに収まらないデータセットを使用して問題を解決するために、複数のコンピューターは必要ありません。関数 imageDatastore を使用して、マシンのクラスターを使用せずに、データのバッチを処理できます。例については、イメージ分類についてのネットワークの学習を参照してください。ただし、利用できるクラスターがある場合は、コードをデータ リポジトリに入れる方が、大量のデータをあちこちに移動させるよりも有効なことがあります。

深層学習におけるハードウェアとメモリに関する考慮事項推奨必要な製品
大きすぎてメモリに収まらないデータ大きすぎてメモリに収まらないイメージのコレクションからデータをインポートするには、関数 imageDatastore を使用します。この関数は、機械学習とコンピューター ビジョン アプリケーションの処理を高速化するためにイメージをバッチ単位で自動的に読み取るよう設計されています。

MATLAB®

Neural Network Toolbox™

CPU適切な GPU がない場合は、代わりに 1 つの CPU で学習させることができます。既定では、関数 trainNetwork は利用できる GPU がない場合、CPU を使用します。

MATLAB

Neural Network Toolbox

GPU既定では、関数 trainNetwork は GPU を利用できる場合は、GPU を使用します。Compute Capability 3.0 以上の CUDA® 対応 NVIDIA® GPU が必要です。gpuDevice を使用して GPU を確認します。関数 trainingOptions を使用して、実行環境を指定します。

MATLAB

Neural Network Toolbox

Parallel Computing Toolbox

複数の GPU または CPU コアを使用してローカル マシンで並列処理複数のワーカーを活用するには、関数 trainingOptions を使用して実行環境を指定します。マシンに複数の GPU がある場合は、'multi-gpu' を指定します。それ以外の場合は 'parallel' を指定します。

MATLAB

Neural Network Toolbox

Parallel Computing Toolbox

クラスターまたはクラウドで並列処理深層学習の計算を高速化するために、クラスターまたはクラウドのワーカーを使用するようにスケールアップします。trainingOptions を使用し、計算クラスターを使用するように 'parallel' を指定します。詳細は、クラウドでの深層学習を参照してください。

MATLAB

Neural Network Toolbox

Parallel Computing Toolbox

MATLAB Distributed Computing Server™

ヒント

詳細は、並列およびクラウドでの深層学習のスケールアップを参照してください。

Neural Network Toolbox に含まれる深層学習における学習、予測、検証用のすべての関数は、単精度浮動小数点演算を使用して計算を実行します。深層学習用の関数には trainNetworkpredictclassifyactivations などがあります。CPU と GPU の両方を使用してネットワークに学習させる場合、単精度演算が使用されます。

GPU の単精度と倍精度の性能は大幅に異なる可能性があるため、計算の実行精度を知っておくことが重要です。深層学習に GPU のみを使用する場合、単精度性能が GPU の最も重要な特性の 1 つです。Parallel Computing Toolbox を使用して他の計算にも GPU を使用する場合は、高い倍精度性能が重要です。これは、MATLAB の多くの関数が既定で倍精度演算を使用するためです。詳細は、単精度の計算を使用したパフォーマンスの向上 (Parallel Computing Toolbox)を参照してください。

複数の GPU による学習

最先端のニューラル ネットワークは、大規模な学習データセットとネットワーク構造にますます依存しています。その結果、学習時間が長くなり、メモリ リソースの積み増しが求められます。このようなネットワークの学習をサポートするために、MATLAB では、複数の GPU を並列に使用した単一ネットワークの学習をサポートしています。ローカル マシンに複数の GPU がある場合、関数 trainingOptions'ExecutionEnvironment' オプションを 'multi-gpu' に設定することで、複数の GPU での学習を有効にします。クラスターまたはクラウドにアクセスできる場合は、'parallel' を指定します。複数の GPU を使用して収束性や性能を改善するには、MiniBatchSize と学習率を増やしてみてください。

最適な性能を得るには、関数 trainingOptions で指定する MiniBatchSize オプションを試す必要があります。通常、畳み込みニューラル ネットワークは、複数のイメージ バッチを使用して反復的に学習させます。これは、データセット全体があまりにも大きすぎて GPU メモリに収まらないためです。最適なバッチ サイズは、実際のネットワーク、データセット、および GPU ハードウェアに依存しているため、実験が必要です。バッチ サイズが大きすぎると収束に時間がかかり、小さすぎるとまったく収束しない場合があります。多くの場合、バッチ サイズは利用可能な GPU メモリによって決まります。大規模なネットワークの場合、イメージあたりのメモリ要件が増加し、最大バッチ サイズが減少します。

複数の GPU を使用した学習の場合、各イメージ バッチが GPU 間に分散されます。これによって、利用可能な合計 GPU メモリが実質上増え、より大きなバッチ サイズを処理できます。用途によっては、バッチ サイズが大きいほど、収束性や分類精度が向上します。

複数の GPU を使用すると、性能が大幅に高まることがあります。マルチ GPU での学習で性能の向上が期待できるかどうかを判断するには、以下の点を検討します。

  • 各 GPU の反復の長さはどれだけか。各 GPU の反復が短ければ、GPU 間の通信の追加オーバーヘッドの影響が大きくなります。バッチ サイズをより大きくして、反復あたりの計算量を増やしてみてください。

  • すべての GPU が 1 つのマシン上にあるか。異なるマシン上にある GPU 間の通信は、大幅な通信遅延を生みます。

詳細は、並列およびクラウドでの深層学習のスケールアップおよび学習に使用する特定の GPU の選択を参照してください。

バックグラウンドでのデータの取得と前処理

データの取得と前処理はネットワークの学習に並行して行えます。バックグラウンドでデータ ディスパッチを実行するには、trainNetwork を使用して、バックグラウンド ディスパッチ対応のミニバッチ データストアのデータでネットワークに学習させます。augmentedImageDatastoredenoisingImageDatastorepixelLabelImageDatastore などの組み込みミニバッチ データストアを使用できます。バックグラウンド ディスパッチを有効にするには、データストアの DispatchInBackground プロパティを true に設定します。バックグラウンド ディスパッチ対応のカスタム ミニバッチ データストアを使用することもできます。カスタム ミニバッチ データストアの作成の詳細は、カスタム ミニバッチ データストアの開発を参照してください。詳細オプションでは、並列プールのワーカー数の変更を試すことができます。詳細は、並列設定の指定 (Parallel Computing Toolbox)を参照してください。trainingOptions の名前と値のペアの引数 'WorkerLoad' を指定して、ワーカー間の学習計算とデータ ディスパッチの負荷を微調整することもできます。

クラウドでの深層学習

Amazon® Elastic Compute Cloud (Amazon EC2®) の複数の高性能 GPU で深層学習アプリケーションを試してみましょう。MATLAB を使用すると、P2 インスタンスを持つ Amazon EC2 とクラウドに保存されたデータを使用して、クラウドで深層学習を実行できます。畳み込みニューラル ネットワークの学習時間の短縮のために利用できる適切な GPU がない場合は、代わりにこの機能を使用できます。学習時間を短縮するためマシンごとの GPU の数を変えて試したり、同時に同じデータで複数のモデルに学習させるため並列計算を使用したりできます。または、複数の GPU を使用して 1 つのネットワークに学習させることができます。複数の深層ニューラル ネットワーク構成の性能を比較、調査し、精度とメモリ使用量とのトレードオフが最良となるものを探すことができます。

始める際に役立つ情報については、並列およびクラウドでの深層学習の例を参照してください。

ワークフロー全体の概要を説明しているホワイト ペーパー Deep Learning in the Cloud with MATLAB も参照してください。

参考

|

関連するトピック