Main Content

並列計算製品でのジョブ実行の仕組み

概要

Parallel Computing Toolbox™ ソフトウェアおよび MATLAB® Parallel Server™ ソフトウェアでは、マルチコア コンピューターやマルチプロセッサ コンピューターで MATLAB と Simulink® を使用して、計算量やデータ量の多い問題を解くことができます。並列 for ループとコード ブロック、分散配列、並列数値アルゴリズム、メッセージ伝播関数などの並列処理要素を使用すると、特定のハードウェアやネットワーク アーキテクチャ用にプログラミングを行わずに、MATLAB で高いレベルにおいてタスク並列およびデータ並列アルゴリズムを実装することができます。

"ジョブ" とは MATLAB セッションで実行が必要とされる大規模な演算です。ジョブは "タスク" と呼ばれるセグメントに分割されます。どのようにジョブをタスクに分割することが最適であるかはユーザーが決定します。ジョブは複数の同一タスクに分割できますが、タスクが同一である必要はありません。

ジョブとそのタスクが定義される MATLAB セッションは、"クライアント" セッションと呼ばれます。多くの場合、これは MATLAB をプログラムするマシンで実行されます。クライアントは Parallel Computing Toolbox ソフトウェアを使用してジョブとタスクの定義を実行し、これらをマシンのローカル クラスターで実行します。MATLAB Parallel Server ソフトウェアは複数のマシンからなるクラスターでジョブを実行する製品です。

MATLAB ジョブ スケジューラは、ジョブの実行とタスクの評価を統合するプロセスです。MATLAB ジョブ スケジューラは、評価対象のタスクを "ワーカー" と呼ばれるサーバーの個々の MATLAB セッションに分散します。クラスターへのアクセスに MATLAB ジョブ スケジューラを使用するかどうかはオプションです。クラスター ワーカーへのタスクの分散は、Microsoft® Windows® HPC Server (CCS を含む)、Platform LSF® などのサードパーティ製スケジューラでも実行できます。

並列計算の基本構成

ツールボックスおよびサーバー コンポーネント

MATLAB ジョブ スケジューラ、ワーカー、およびクライアント

MATLAB ジョブ スケジューラは、ネットワークの任意のマシンで実行できます。キュー内のジョブに昇格、降格、キャンセルまたは削除の操作が行われない限り、MATLAB ジョブ スケジューラではジョブを投入された順に実行します。

各ワーカーは MATLAB ジョブ スケジューラによって実行中のジョブからのタスクを与えられ、これを実行し、結果を MATLAB ジョブ スケジューラに返すと別のタスクを与えられます。実行中のジョブのタスクがすべてワーカーに割り当てられると、MATLAB ジョブ スケジューラは使用可能な次のワーカーで次のジョブの実行を開始します。

MATLAB Parallel Server ソフトウェアの構成には通常多数のワーカーが含まれ、そのすべてが複数のタスクを同時に実行できるため、大規模な MATLAB ジョブの実行速度が上がります。一般に、特定タスクをどのワーカーが実行するかは重要ではありません。独立ジョブでは、ワーカーが処理可能になったタスクを一度に 1 つずつ、同時にまたは非同時に評価し、結果を MATLAB ジョブ スケジューラに返します。通信ジョブでは、ワーカーは複数のタスクを同時に評価します。その後、MATLAB ジョブ スケジューラはジョブ内の全タスクの結果をクライアント セッションに返します。

メモ:

アプリケーションをローカルで、または他の目的でテストするために、単一のコンピューターをクライアント、ワーカーおよび MATLAB ジョブ スケジューラ ホストとして構成することができます。1 台のマシンに、複数のワーカー セッションまたは複数の MATLAB ジョブ スケジューラ セッションを設けることもできます。

並列計算セッションの相互関係

大規模なネットワークにはいくつかの MATLAB ジョブ スケジューラといくつかのクライアント セッションが含まれている可能性があります。どのクライアント セッションでも任意の MATLAB ジョブ スケジューラでジョブの作成、実行、アクセスができますが、ワーカー セッションは一度に 1 つの MATLAB ジョブ スケジューラのみに登録され、その専用になります。次の図は、複数の MATLAB ジョブ スケジューラを伴う構成を示しています。

複数のクライアントおよび MATLAB ジョブ スケジューラを伴うクラスター

ローカル クラスター

Parallel Computing Toolbox ソフトウェアは、ローカル クラスターのワーカーをクライアント マシンで実行する機能をもつため、リモート クラスターや MATLAB Parallel Server ソフトウェアがなくてもジョブを実行できます。この場合、クライアント、スケジューリングおよびタスク評価に必要なすべての処理は同じコンピューターで実行されます。これにより、並列アプリケーションをネットワーク クラスターで実行する前に開発、テストおよびデバッグを行うことができます。

サードパーティ製スケジューラ

MATLAB ジョブ スケジューラを使用する代わりに、サードパーティ製スケジューラを使用できます。これには、Microsoft Windows HPC Server (CCS を含む)、Platform LSF スケジューラ、PBS Pro® スケジューラ、TORQUE スケジューラまたは汎用スケジューラがあります。

サードパーティ製スケジューラまたは MATLAB ジョブ スケジューラの選択-  タスクの分散にサードパーティ製スケジューラと MATLAB ジョブ スケジューラのいずれを使用するかを決めるときには、以下の点を考慮してください。

  • クラスターに既にスケジューラが設定されているか

    既にスケジューラが設定されている場合、クラスターへのアクセスを制御する手段としてその使用が求められる可能性があります。既存のスケジューラは MATLAB ジョブ スケジューラと同様に使いやすいかもしれません。その場合、追加の管理を行う必要はないでしょう。

  • 並列計算ジョブの処理は、必要な唯一のクラスター スケジューリング管理か

    MATLAB ジョブ スケジューラは MathWorks® 並列計算アプリケーション専用に設計されています。他のスケジューリング タスクを必要とするのでない限り、サードパーティ製スケジューラを使う利点はおそらくありません。

  • クラスターにファイルの共有構成が既に設けられているか

    MATLAB ジョブ スケジューラは並列計算アプリケーションに必要なファイルおよびデータの共有をすべて処理できます。これは共有アクセスが制限されている構成で役立つ場合があります。

  • バッチ モードまたは管理された対話型処理が必要か

    MATLAB ジョブ スケジューラを使用する場合、ワーカー プロセスは通常、その MATLAB ジョブ スケジューラ専用として常時動作し続けます。サードパーティ製スケジューラの場合、ワーカーは、タスクの評価用に起動してタスクが完了すると停止するアプリケーションとして実行されます。タスクが小さい場合や短時間しか要しない場合、タスクごとにワーカーを起動するとオーバーヘッド時間が大きくなりすぎる可能性があります。

  • セキュリティ上の懸念事項はあるか

    自前のスケジューラは特定のセキュリティ要件を満たすよう構成できる場合があります。

  • クラスターにいくつのノードがあるか

    クラスターが大規模な場合は、高い確率でスケジューラが既に設定されています。クラスター サイズおよび MATLAB ジョブ スケジューラについてのご質問は、MathWorks の担当者にお問い合わせください。

  • 誰がクラスターを管理しているか

    クラスターの管理担当者は、ジョブのスケジュール方法について何らかの選好をもっている場合があります。

  • ジョブの進行状況をモニターしたり中間データにアクセスする必要があるか

    MATLAB ジョブ スケジューラが実行するジョブではイベントとコールバックがサポートされているため、それぞれのジョブとタスクがある状態から別の状態に進むときに特定の関数を実行できます。

異なるプラットフォームが混在するコンポーネントまたは混在クラスター

Parallel Computing Toolbox ソフトウェアおよび MATLAB Parallel Server ソフトウェアは、Windows、UNIX® および Macintosh のオペレーティング システムでサポートされています。混合プラットフォームがサポートされているため、クライアント、MATLAB ジョブ スケジューラおよびワーカーが同じプラットフォームにある必要はありません。その他の制限については、システム要件に説明があります。

混合プラットフォーム環境の場合、システム管理者はソフトウェアのインストール先となるローカル マシンの適正なインストール手順に必ず従ってください。

mjs サービス

MATLAB ジョブ スケジューラを使用する場合、ワーカー セッションまたは MATLAB ジョブ スケジューラ セッションをホストするすべてのマシンで、mjs サービスも実行しなければなりません。

mjs サービスはワーカー セッションおよび MATLAB ジョブ スケジューラ セッションを制御し、ホスト コンピューターがクラッシュするとそれらのセッションを復元します。ワーカーまたは MATLAB ジョブ スケジューラ マシンがクラッシュした場合、mjs サービスが再起動する (通常、マシンのブート時に起動するように構成されている) と MATLAB ジョブ スケジューラおよびワーカーのセッションも自動的に再起動され、システム クラッシュ前の状態からセッションを再開します。mjs サービスの詳細は、MATLAB Parallel Server のドキュメンテーションに記載されています。

クライアントで表現されるコンポーネント

クライアント セッションは、メソッドを呼び出して "MATLAB ジョブ スケジューラ クラスター オブジェクト" のプロパティを構成することで MATLAB ジョブ スケジューラと通信します。頻繁には必要ありませんが、クライアント セッションは "ワーカー オブジェクト" を介してワーカー セッションについての情報にアクセスすることもできます。

クライアント セッションで作成したジョブは、実際に MATLAB ジョブ スケジューラのジョブ保存場所にあります。クライアント セッションは "ジョブ オブジェクト" を介してジョブにアクセスできます。同様に、クライアント セッションでジョブに対して定義したタスクは MATLAB ジョブ スケジューラのデータ保存場所にあり、"タスク オブジェクト" を介してこれにアクセスします。

ジョブのライフ サイクル

ジョブを作成して実行する場合、ジョブはいくつかの段階を経て進行します。ジョブの各段階はジョブ オブジェクトの State プロパティの値に反映され、この値は pendingqueuedrunning または finished のいずれかになります。これらの各段階については、この節で簡単に説明します。

下の図はジョブのライフ サイクルにおける各段階を示したものです。MATLAB ジョブ スケジューラ (または他のスケジューラ) では、ジョブが状態別に分類されて表示されます。ジョブの管理に使用する関数には createJobsubmit および fetchOutputs などがあります。

ジョブの各段階

次の表はジョブのライフ サイクルにおける各段階について説明したものです。

ジョブの段階

説明

Pending

Parallel Computing Toolbox ソフトウェアのクライアント セッションで、関数 createJob を使用してスケジューラにジョブを作成します。ジョブの最初の状態は pending となります。これは、タスクの追加によってジョブを定義するときの状態です。

Queued

ジョブに対して関数 submit を実行すると、ジョブは MATLAB ジョブ スケジューラまたはスケジューラによってキューに入れられ、ジョブの状態は queued になります。スケジューラはキュー内のジョブを投入された順に実行し、各ジョブは、前のジョブが完了するとキュー内での順位が上がります。キュー内でのジョブの順序は、関数 promotedemote を用いて変更できます。

Running

ジョブがキューの最上位になると、評価のために、スケジューラはジョブのタスクをワーカー セッションに分散します。これにより、ジョブの状態は running になります。1 つのジョブのタスクで必要とされるよりも多数のワーカーが使用可能な場合、スケジューラは次のジョブの実行を開始します。このように、一度に複数のジョブが実行される場合があります。

Finished

ジョブのタスクがすべて評価されると、ジョブは finished 状態に移行します。この段階で、関数 fetchOutputs を使用してジョブの全タスクの結果を取得できます。

Failed

サードパーティ製スケジューラを使用している場合、コマンドの実行や必要なファイルへのアクセスに際してエラーが発生すると、ジョブが失敗する可能性があります。

Deleted

関数 delete を使用してジョブのデータをそのデータ保存場所または MATLAB ジョブ スケジューラから削除すると、クライアントでのジョブの状態は deleted になります。この状態は、ジョブ オブジェクトがクライアントに残っている間に限って使用可能となります。

ジョブの完了後、クライアント セッションからすべてのオブジェクトを消去した場合でも、ジョブのデータは MATLAB ジョブ スケジューラの JobStorageLocation フォルダーに残ることに注意してください。MATLAB ジョブ スケジューラをクリーンアップされた状態で再起動するまで、MATLAB ジョブ スケジューラまたはスケジューラは実行したすべてのジョブを保持します。したがって、-clean オプションを指定して MATLAB ジョブ スケジューラを再起動しない限り、後になってから、あるいは別のクライアント セッションでジョブの情報を取得することができます。

完了したジョブを MATLAB ジョブ スケジューラまたはスケジューラの保存場所から永久的に削除するには、ジョブ モニター GUI または関数 delete を使用します。