Main Content

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 によってのみ制限されるようになります。これにより、ニューラル ネットワークを非常に大規模な問題に適用できるようになります。