主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

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

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

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

要件

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

バッチジョブの投入

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

この場合,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を指定します。この場合,ジョはブID1です。

c = parcluster (“MyClusterInTheCloud”);工作= findJob (c,“ID”1);

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

删除(job1);

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

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

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

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

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

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

参考

(并行计算工具箱)

関連する例

詳細