ドキュメンテーション

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

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

深いネットワークの学習は計算量が多くなりますが、ニューラル ネットワークは本質的に並列アルゴリズムです。通常、畳み込みニューラル ネットワークの学習は、マルチコア CPU、高性能 GPU、および複数の CPU と GPU を備えたクラスターに並列に分散させることによって高速化できます。GPU または並列オプションを使用するには Parallel Computing Toolbox™ が必要です。

ヒント

Parallel Computing Toolbox がインストールされている場合、GPU は自動的にサポートされます。既定では、関数 trainNetwork は GPU を利用できる場合は、GPU を使用します。

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

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

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

MATLAB®

Deep Learning Toolbox™

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

MATLAB

Deep Learning Toolbox

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

MATLAB

Deep Learning Toolbox

Parallel Computing Toolbox

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

MATLAB

Deep Learning Toolbox

Parallel Computing Toolbox

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

MATLAB

Deep Learning Toolbox

Parallel Computing Toolbox

MATLAB Parallel Server™

ヒント

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

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

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

複数の GPU による学習

MATLAB は、複数の GPU を使用した、1 つのネットワークの並列学習をサポートしています。これは、ローカル マシン上、または GPU を持つワーカーのあるクラスターやクラウド上の複数の GPU を使用して実現できます。複数の GPU を使用して学習を高速化するには、ミニバッチ サイズと学習率を増やしてみてください。

通常、畳み込みニューラル ネットワークは、複数のイメージ バッチを使用して反復的に学習させます。これは、データセット全体が大きすぎて GPU メモリに収まらないためです。最適な性能を得るために、関数 trainingOptions で指定する MiniBatchSize オプションを試すことができます。

最適なバッチ サイズは、実際のネットワーク、データセット、および GPU ハードウェアに依存しています。複数の GPU を使用した学習の場合、各イメージ バッチが GPU 間に分散されます。これによって、利用可能な合計 GPU メモリが実質上増え、より大きなバッチ サイズを処理できます。各バッチの重要性が向上するため、学習率を増やすことができます。一般的に妥当なガイドラインは、バッチ サイズの増加に比例して学習率を増やすことです。用途によって異なりますが、バッチ サイズと学習率を増やすと、ある程度までは精度を損なわずに学習を高速化できます。

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

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

  • すべての GPU が 1 つのマシン上にあるか。異なるマシン上にある GPU 間の通信は、大幅な通信遅延を生みます。適切なハードウェアがあれば、これを軽減できます。詳細は、高速マルチノード GPU 通信の高度なサポートを参照してください。

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

クラウドでの深層学習

畳み込みニューラル ネットワークの学習時間の短縮のために利用できる適切な GPU がない場合は、Amazon® Elastic Compute Cloud (Amazon EC2®) などのクラウドで複数の高性能 GPU を使用して、深層学習アプリケーションを試すことができます。MATLAB Deep Learning Toolbox には、Amazon EC2 を使用してクラウドで、P2 または P3 マシン インスタンスとクラウドに保存したデータを利用して、深層学習を実行する方法を示す例があります。

1 つのマシンで複数の GPU を使用するか、複数の GPU のあるマシンのクラスターを使用して学習を高速化できます。複数の GPU を使用して 1 つのネットワークに学習させるか、同じデータについて一度に複数のモデルに学習させます。

クラウド ワークフロー全体の詳細は、並列およびクラウドでの深層学習を参照してください。

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

ネットワークに並列学習させる場合、データの取得と前処理はバックグラウンドで行えます。バックグラウンドでデータ ディスパッチを実行するには、trainNetwork で使用するミニバッチ データストアのバックグラウンド ディスパッチを有効にします。augmentedImageDatastoredenoisingImageDatastorepixelLabelImageDatastore などの組み込みミニバッチ データストアを使用できます。バックグラウンド ディスパッチ対応のカスタム ミニバッチ データストアを使用することもできます。カスタム ミニバッチ データストアの作成の詳細は、カスタム ミニバッチ データストアの開発を参照してください。

バックグラウンド ディスパッチを有効にするには、データストアの DispatchInBackground プロパティを true に設定します。

trainingOptions の名前と値のペアの引数 'WorkerLoad' を指定して、ワーカー間の学習計算とデータ ディスパッチの負荷を微調整できます。詳細オプションでは、並列プールのワーカー数の変更を試すことができます。詳細は、並列設定の指定 (Parallel Computing Toolbox)を参照してください。

参考

|

関連するトピック