CPU および GPU での浅層ネットワークの学習
Parallel Computing Toolbox
ヒント
このトピックでは、浅層ネットワークについて説明します。深層学習については、代わりにScale Up Deep Learning in Parallel, on GPUs, and in the Cloudを参照してください。
ニューラル ネットワークの学習およびシミュレーションでは、多くの並列計算が行われます。マルチコア CPU、グラフィックス処理装置 (GPU)、および複数の CPU と GPU をもつコンピューターのクラスターのすべてにおいて、並列計算を利用することができます。
Deep Learning Toolbox™ および Parallel Computing Toolbox™ を一緒に使用することで、単一コンピューターの複数の CPU コアおよび GPU で大規模な問題の学習およびシミュレーションを高速化することができます。
次に標準のシングルスレッドの学習およびシミュレーション セッションを示します (並列化の利点は大規模な問題で最も顕著になりますが、この例では Deep Learning Toolbox に用意されている小規模なデータセットを使用します)。
[x, t] = bodyfat_dataset; net1 = feedforwardnet(10); net2 = train(net1, x, t); y = net2(x);
並列 CPU ワーカー
Intel® プロセッサには、最大 8 個のコアが搭載されています。プロセッサが 2 個のワークステーションには最大 16 個のコアを (将来的にはさらに) 搭載することが可能です。複数の CPU コアを並列に使用することで、計算を大幅に高速化できます。
現在の並列プールを起動または取得して、プール内のワーカー数を表示します。
pool = gcp; pool.NumWorkers
Parallel Computing Toolbox のライセンスがない場合、エラーが発生します。
並列プールが開いている場合、関数 train
の 'useParallel'
オプションを 'yes'
に設定して、学習およびシミュレーションがプール全体で実行されるように指定します。
net2 = train(net1,x,t,'useParallel','yes'); y = net2(x,'useParallel','yes');
GPU コンピューティング
GPU は、1 個のカードに数千個のコアがあり、ニューラル ネットワークなどの並列アルゴリズムで高い効率を発揮します。
gpuDeviceCount
を使用して、サポートされている GPU カードがシステムで使用可能かどうかを確認します。関数 gpuDevice
を使用して、現在選択されている GPU の情報を確認するか、別の GPU を選択します。
gpuDeviceCount
gpuDevice
gpuDevice(2) % Select device 2, if available
Parallel Computing Toolbox のライセンスがない場合、"関数または変数が未定義です" というエラーが表示されます。
GPU デバイスを選択している場合、関数 train
または sim
の 'useGPU'
オプションを 'yes'
に設定して、このデバイスで学習およびシミュレーションを実行します。
net2 = train(net1,x,t,'useGPU','yes'); y = net2(x,'useGPU','yes');
複数 GPU/CPU コンピューティング
より高いレベルの並列化のために複数の GPU を使用することができます。
並列プールを開いたら、'useParallel'
と 'useGPU'
の両方を 'yes'
に設定して、単一コンピューターのすべての GPU コアおよび CPU コアを利用します。固有の GPU に関連付けられた各ワーカーは、その GPU を使用します。他のワーカーは、それぞれの CPU コアで計算を実行します。
net2 = train(net1,x,t,'useParallel','yes','useGPU','yes'); y = net2(x,'useParallel','yes','useGPU','yes');
一部の問題では、GPU と CPU を一緒に使用することによって、最高の計算速度を実現できます。その他の問題では、CPU が GPU と同等の速度を実現できないため、GPU のみを使用する方が高速になります。'useGPU'
を 'only'
に設定して、並列計算を固有の GPU を持つワーカーに制限します。
net2 = train(net1,x,t,'useParallel','yes','useGPU','only'); y = net2(x,'useParallel','yes','useGPU','only');
MATLAB Parallel Server を使用したクラスター コンピューティング
MATLAB® Parallel Server™ を使用すると、コンピューターのネットワーク クラスターのすべての CPU および GPU を利用できます。クラスターを利用するには、クラスター プロファイルを使用して並列プールを開きます。MATLAB の [ホーム] タブで [環境] 領域の [並列] メニューを使用して、プロファイルを管理および選択します。
並列プールを開いたら、'useParallel'
および 'useGPU'
オプションを指定して train
を呼び出すことによって、ネットワークの学習を行います。
net2 = train(net1,x,t,'useParallel','yes'); y = net2(x,'useParallel','yes'); net2 = train(net1,x,t,'useParallel','yes','useGPU','only'); y = net2(x,'useParallel','yes','useGPU','only');
負荷分散、大規模な問題などについて
Deep Learning Toolbox を使用した並列計算の詳細は、並列計算および GPU コンピューティングを使用した浅層ニューラル ネットワークを参照してください。CPU ワーカーおよび GPU ワーカーにデータセットを手動で分散させて、マシンの速度とメモリの違いを最大限に活用する方法など、その他のトピックを紹介しています。
データを手動で分散させると、ワーカー データを順に読み込むことも可能になります。そのため、データセットのサイズが、単一コンピューターの RAM ではなくクラスターの合計 RAM によってのみ制限されるようになります。これにより、ニューラル ネットワークを非常に大規模な問題に適用できるようになります。