ドキュメンテーション

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

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

この例では、学習中に MATLAB での作業の続行または MATLAB の終了ができるように、深層学習の学習バッチジョブをクラスターに送信する方法を説明します。

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

要件

この例を実行するには、クラスターを構成し、データをクラウドにアップロードしなければなりません。MATLAB では、MATLAB デスクトップから直接クラウドにクラスターを作成できます。[ホーム] タブの [並列] メニューで [クラスターの作成と管理] を選択します。クラスター プロファイル マネージャーで、[クラウド クラスターの作成] をクリックします。あるいは、MathWorks Cloud Center を使用して、計算クラスターの作成およびアクセスができます。詳細については、Getting Started with Cloud Center を参照してください。この例では、MATLAB の [ホーム] タブの [並列][既定のクラスターの選択] で、使用するクラスターを確実に既定として設定します。その後、Amazon S3 バケットにデータをアップロードし、MATLAB から直接使用します。この例では、既に Amazon S3 に保存されている CIFAR-10 データセットのコピーを使用します。詳細については、クラウドへの深層学習データのアップロード (Deep Learning Toolbox)を参照してください。

バッチジョブの投入

関数 batch を使用して、スクリプトをバッチ ジョブとしてクラスターに投入します。クラスターは、スクリプトの内容を実行するワーカーを 1 つ割り当てます。スクリプトの並列コードに、ワーカーの追加によるメリットがある場合 (たとえば、自動並列サポートまたは parfor ループを含む場合) は、ワーカーを明示的に要求する必要があります。batch はスクリプトを実行するクライアントとして 1 つのワーカーを使用します。'Pool' の名前と値のペアの引数を使用して、より多くのワーカーを指定することができます。

この例では、trainMultipleNetworks スクリプトをクラスターに送信します。このスクリプトには、parfor を使用した複数の深層学習ネットワークの学習 (Deep Learning Toolbox)の並列パラメーター スイープが含まれています。スクリプトには 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 セッションでジョブ モニターを使用して、ジョブのステータスをチェックできます。

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

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

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

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

参考

関連する例

詳細