主要内容

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

この例では,学習中に作業を継続したりMATLABを閉じたりできるように,深層学習における学習のバッチジョブをクラスターに送信する方法を説明します。

多くの場合,深層ニュ,ラルネットワ,クの学習には数時間または数日かかります。時間を効率的に使用するため,ニューラルネットワークの学習をバッチジョブとして行い,準備が整ったらクラスターから結果を取得することができます。計算の実行中にMATLABで作業を続行したり,MATLABを閉じて,ジョブモニターを使用して後で結果を取得したりできます。この例では,Parforを使用した複数の深層学習ネットワ,クの学習の並列パラメタスプをバッチジョブとして送信します。ジョブの完了後,学習済みのネットワ,クを取得して,それらの精度を比較できます。

要件

この例を実行する前に,クラスタ,を構成し,デ,タをクラウドにアップロ,ドする必要があります。Matlabでは,Matlabデスクトップから直接,クラウドにクラスタ,を作成できます。[ホ,ム]タブの[並列]メニュ,で,[クラスタ,の作成と管理]を選択します。クラスタプロファルマネジャで,[クラウドクラスタ,の作成]をクリックします。またはMathWorks云中心を使用して計算クラスターを作成し,そのクラスターにアクセスすることもできます。詳細にいては,开始使用云中心を参照してください。この例では,MATLABの[ホ,ム]タブの[並列][既定のクラスタ,の選択]で,クラスタ,が既定として設定されていることを確認します。その後,データをAmazon S3バケットにアップロードして,MATLABから直接使用します。この例では,Amazon S3 に既に格納されている CIFAR-10 データセットのコピーを使用します。手順については、クラウドへの深層学習デ,タのアップロ,ドを参照してください。

バッチジョブの投入

関数批处理を使用してスクリプトをバッチジョブとしてクラスタ,に送信します。クラスタはスクリプトの内容を実行する1のワカを割り当てます。スクリプトの並列コードにその他のワーカーを使用するメリットがあり,たとえば,自動並列サポートまたはparforループが含まれる場合,ワーカーを明示的に要求する必要があります。批处理。名前と値のペアの引数‘池’を使用して,より多くのワカを指定できます。

この場合,trainMultipleNetworksスクリプトをクラスタ,に送信します。このスクリプトには,Parforを使用した複数の深層学習ネットワ,クの学習の並列パラメタスプが含まれます。スクリプトにparforル,プが含まれるため,名前と値のペアの引数を使用して4のその他のワカを指定します。

totalNumberOfWorkers = 5;Job1 =批处理(“trainMultipleNetworks”...“池”, totalNumberOfWorkers-1);

ジョブモニタ,をチェックして,クラスタ,におけるジョブの現在のステ,タスを確認できます。[ホ,ム]タブの[環境]セクションで,[並列][ジョブの監視]を選択してジョブモニタ,を開きます。

追加のジョブをクラスタ,に投入できます。他のジョブを実行しているためにクラスターを使用できない場合,新しいジョブを投入すると,クラスターが使用可能になるまでキューに入った状態になります。

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

クラスタ,にジョブを投入した後,計算の実行中にmatlabで作業を続行できます。残りのコ,ドがジョブの完了に依存する場合,等待コマンドを使用してmatlabをブロックします。この場合,ジョブが終了するのを待ます。

等待(job1);

ジョブが終了した後,関数负载を使用して結果を取得します。この場合,送信されたスクリプトの並列パラメーター スイープから学習済みネットワークとその精度を取得します。

负载(job1“精度”);精度
精度=4×10.8312 0.8276 0.8288 0.8258
负载(job1“trainedNetworks”);trainedNetworks
trainedNetworks =4×1单元格数组{1×1 SeriesNetwork} {1×1 SeriesNetwork} {1×1 SeriesNetwork} {1×1 SeriesNetwork}

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

负载(job1);

MATLABを閉じた場合でも,クラスター内のジョブを復元して,計算の実行中または計算の完了後に結果を取得できます。Matlabを閉じる前にジョブのidをメモしておき,後で関数findJobを使用してジョブを取得します。

ジョブを取得するには,まず関数parclusterを使用してクラスタ,に対するクラスタ,オブジェクトを作成します。次に,findJobにジョブidを指定します。この場合,ジョブidは1です。

C = parcluster(“MyClusterInTheCloud”);job = findJob(c,“ID”1);

完了したら,ジョブを削除します。そのジョブはジョブモニタ,から削除されます。

删除(job1);

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

バッチジョブを投入すると,すべての計算はクラスターで行われるため,MATLABを安全に閉じることができます。別のMATLABセッションでジョブモニターを使用することによって,ジョブのステータスを確認できます。

ジョブが完了したら,ジョブモニタ,から結果を取得できます。[ホ,ム]タブの[環境]セクションで,[並列][ジョブの監視]を選択してジョブモニタ,を開きます。次にジョブを右クリックすると,コンテキストメニュ,が表示されます。このメニュ,では以下が可能です。

  • [詳細を表示]をクリックしてワ,クスペ,スにジョブを読み込む

  • [変数の読み込み]をクリックしてジョブのすべての変数を読み込む

  • [削除]をクリックして完了したジョブを削除する

参考

(并行计算工具箱)

関連する例

詳細