このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
深層学習バッチ ジョブのクラスターへの送信
この例では、学習中に作業を継続したり MATLAB を閉じたりできるように、深層学習における学習のバッチ ジョブをクラスターに送信する方法を説明します。
多くの場合、深層ニューラル ネットワークの学習には数時間または数日かかります。時間を効率的に使用するため、ニューラル ネットワークの学習をバッチ ジョブとして行い、準備が整ったらクラスターから結果を取得することができます。計算の実行中に MATLAB で作業を続行したり、MATLAB を閉じて、ジョブ モニターを使用して後で結果を取得したりできます。この例では、parfor を使用した複数の深層学習ネットワークの学習の並列パラメーター スイープをバッチ ジョブとして送信します。ジョブの完了後、学習済みのネットワークを取得して、それらの精度を比較できます。
要件
この例を実行する前に、クラスターを構成し、データをクラウドにアップロードする必要があります。MATLAB では、MATLAB デスクトップから直接、クラウドにクラスターを作成できます。[ホーム] タブの [並列] メニューで、[クラスターの作成と管理] を選択します。クラスター プロファイル マネージャーで、[クラウド クラスターの作成] をクリックします。または、MathWorks Cloud Center を使用して計算クラスターを作成し、そのクラスターにアクセスすることもできます。詳細については、Getting Started with Cloud Center を参照してください。この例では、MATLAB の [ホーム] タブの [並列]、[既定のクラスターの選択] で、クラスターが既定として設定されていることを確認します。その後、データを Amazon S3 バケットにアップロードして、MATLAB から直接使用します。この例では、Amazon S3 に既に格納されている CIFAR-10 データセットのコピーを使用します。手順については、クラウドへの深層学習データのアップロードを参照してください。
バッチ ジョブの投入
関数 batch
を使用してスクリプトをバッチ ジョブとしてクラスターに送信します。クラスターはスクリプトの内容を実行する 1 つのワーカーを割り当てます。スクリプトの並列コードにその他のワーカーを使用するメリットがあり、たとえば、自動並列サポートまたは parfor ループが含まれる場合、ワーカーを明示的に要求する必要があります。batch
は、スクリプトを実行するクライアントに対して 1 つのワーカーを使用します。名前と値のペアの引数 'Pool' を使用して、より多くのワーカーを指定できます。
この場合、trainMultipleNetworks
スクリプトをクラスターに送信します。このスクリプトには、parfor を使用した複数の深層学習ネットワークの学習の並列パラメーター スイープが含まれます。スクリプトに parfor
ループが含まれるため、名前と値のペアの引数 Pool
を使用して 4
つのその他のワーカーを指定します。
totalNumberOfWorkers = 5; job1 = batch('trainMultipleNetworks', ... 'Pool',totalNumberOfWorkers-1);
ジョブ モニターをチェックして、クラスターにおけるジョブの現在のステータスを確認できます。[ホーム] タブの [環境] セクションで、[並列]、[ジョブの監視] を選択してジョブ モニターを開きます。
追加のジョブをクラスターに投入できます。他のジョブを実行しているためにクラスターを使用できない場合、新しいジョブを投入すると、クラスターが使用可能になるまでキューに入った状態になります。
プログラムによる結果の取得
クラスターにジョブを投入した後、計算の実行中に MATLAB で作業を続行できます。残りのコードがジョブの完了に依存する場合、wait
コマンドを使用して MATLAB をブロックします。この場合、ジョブが終了するのを待ちます。
wait(job1);
ジョブが終了した後、関数 load
を使用して結果を取得します。この場合、送信されたスクリプトの並列パラメーター スイープから学習済みネットワークとその精度を取得します。
load(job1,'accuracies');
accuracies
accuracies = 4×1
0.8312
0.8276
0.8288
0.8258
load(job1,'trainedNetworks');
trainedNetworks
trainedNetworks = 4×1 cell array
{1×1 SeriesNetwork}
{1×1 SeriesNetwork}
{1×1 SeriesNetwork}
{1×1 SeriesNetwork}
バッチ ジョブのすべての変数を読み込むには、引数を指定せずに関数 load
を使用します。
load(job1);
MATLAB を閉じた場合でも、クラスター内のジョブを復元して、計算の実行中または計算の完了後に結果を取得できます。MATLAB を閉じる前にジョブの ID をメモしておき、後で関数 findJob
を使用してジョブを取得します。
ジョブを取得するには、まず関数 parcluster
を使用してクラスターに対するクラスター オブジェクトを作成します。次に、findJob
にジョブ ID を指定します。この場合、ジョブ ID は 1
です。
c = parcluster('MyClusterInTheCloud'); job = findJob(c,'ID',1);
完了したら、ジョブを削除します。そのジョブはジョブ モニターから削除されます。
delete(job1);
ジョブ モニターを使用した結果の取得
バッチ ジョブを投入すると、すべての計算はクラスターで行われるため、MATLAB を安全に閉じることができます。別の MATLAB セッションでジョブ モニターを使用することによって、ジョブのステータスを確認できます。
ジョブが完了したら、ジョブ モニターから結果を取得できます。[ホーム] タブの [環境] セクションで、[並列]、[ジョブの監視] を選択してジョブ モニターを開きます。次にジョブを右クリックすると、コンテキスト メニューが表示されます。このメニューでは以下が可能です。
[詳細を表示] をクリックしてワークスペースにジョブを読み込む
[変数の読み込み] をクリックしてジョブのすべての変数を読み込む
[削除] をクリックして完了したジョブを削除する
参考
batch
(Parallel Computing Toolbox)
関連する例
詳細
- バッチ処理 (Parallel Computing Toolbox)