ドキュメンテーション

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

深層学習バッチ ジョブのクラスターへの送信

この例では、学習中に作業を継続したり MATLAB を閉じたりできるように、深層学習における学習のバッチ ジョブをクラスターに送信する方法を説明します。多くの場合、深層ニューラル ネットワークの学習には非常に時間がかかります。この例では、ニューラル ネットワークの学習をバッチ ジョブとして行い、準備が整ったらクラスターから結果を取得する方法を示します。プログラムによってジョブが完了するまで待つか、MATLAB を閉じて後でジョブ モニターを使用して結果を取得することができます。この例では、parfor を使用した複数の深層学習ネットワークの学習の並列パラメーター スイープをバッチ ジョブとして送信します。ジョブの完了後、学習済みのネットワークを取得して、それらの精度を比較できます。

バッチ ジョブの投入

関数 batch を使用してスクリプトをバッチ ジョブとしてクラスターに送信します。クラスターはスクリプトの内容を実行するワーカーを割り当てます。スクリプトの並列コードにその他のワーカーを使用するメリットがあり、たとえば、組み込みの並列サポートまたは parfor ループを使用する場合、ワーカーを batch に明示的に要求する必要があります。batch は、スクリプトを実行するクライアントに対して 1 つのワーカーを使用しますが、名前と値のペアの引数 Pool を使用して複数のワーカーを指定できます。

totalNumberOfWorkers = 5;
job1 = batch('trainMultipleNetworks', ...
    'Pool',totalNumberOfWorkers-1);

[並列] メニューの [ジョブの監視] でジョブ モニターをチェックし、クラスターにおけるジョブの現在のステータスを確認できます。

追加のジョブをクラスターに投入できます。クラスターが他のジョブを実行している場合、クラスターが使用可能になるまでジョブは queued 状態になります。

プログラムによる結果の取得

ジョブを投入した後、wait コマンドを使用して特定のジョブの終了を待つことができます。

wait(job1);

ジョブが終了した後、関数 load を使用して結果を取得します。

load(job1,'accuracies');
accuracies
load(job1,'trainedNetworks');
trainedNetworks
accuracies =

    0.8312
    0.8276
    0.8288
    0.8258


trainedNetworks =

  4×1 cell array

    {1×1 SeriesNetwork}
    {1×1 SeriesNetwork}
    {1×1 SeriesNetwork}
    {1×1 SeriesNetwork}

バッチ ジョブのすべての変数を読み込む場合は、引数を指定せずに関数 load を使用します。

load(job1);

MATLAB を閉じた場合でも、クラスター内のジョブを復元して、結果を取得できます。クラスター内で計算が実行されている場合や計算が終了している場合でも、これを行うことができます。ジョブの ID をメモし、関数 findJob を使用してジョブを取得します。

c = parcluster('local');
job = findJob(c,'ID',1);

ジョブが完了したら、ジョブを削除します。そのジョブはジョブ モニターに表示されなくなります。

delete(job1);

ジョブ モニターを使用した結果の取得

バッチ ジョブの投入後、すべての計算はクラスターで行われるため、MATLAB を安全に閉じることができます。ジョブのステータスを確認するには、他の MATLAB セッションでジョブ モニターを使用します。ジョブが完了したら、ジョブを右クリックすると表示されるコンテキスト メニューを使用して結果を取得できます。ジョブをワークスペースに読み込むには、[詳細を表示] を使用します。ジョブのすべての変数を読み込むには、[変数の読み込み] を使用します。完了したジョブを削除するには、[削除] を使用します。

参考

関連する例

詳細