ワーカーとのコードの共有
ジョブのタスクは別々のマシンで評価されるため、各マシンはタスクの評価に必要なすべてのファイルにアクセスできなければなりません。以下の節では、コードを共有する基本的な仕組みについて説明します。
メモ
batch
を使用してワーカーとコードを共有する方法を示す例については、バッチ ジョブの実行とワーカーからのファイルへのアクセスを参照してください。
ワーカーによるファイルへの直接アクセス
どのワーカーもネットワークの同じドライブにアクセスできる場合、ワーカーはこれら共有リソース上にある必要なファイルにアクセスすることができます。これはネットワーク トラフィックを最小化するため、望ましいデータ共有方法です。
各ワーカー セッションの検索パスを定義して、ファイルを正しい場所に見つけられるようにしなければなりません。パスは以下の方法で定義できます。
ジョブの
AdditionalPaths
プロパティを使用する。これはジョブに固有となるため、望ましいパス設定方法です。AdditionalPaths
には、このジョブのワーカー セッションのコマンド検索パスの最上位に追加するフォルダーを指定します。AttachedFiles
も指定する場合は、AttachedFiles
はワーカーのパスでAdditionalPaths
より上位になります。ジョブの作成時に
AdditionalPaths
を指定する場合は、その設定が、適用されるクラスター プロファイルで指定されている設定と結合されます。ジョブ オブジェクトの作成後にAdditionalPaths
を設定する場合、この新しい設定はプロファイル設定と結合されず、そのジョブの既存の設定を上書きします。AdditionalPaths
は既定では空です。混合プラットフォーム環境では、文字ベクトルで UNIX® スタイルのパスと Microsoft® Windows® スタイルのパスを両方とも指定できます。特定のマシンに不適切な設定やそのマシンで見つからない設定は、警告が表示されて無視されます。次の例は、混合プラットフォーム環境で MATLAB® ワーカーのパスを設定し、中央リポジトリ
/central/funcs
および部門アーカイブ/dept1/funcs
の両方にある関数を使用しています。これらはいずれも Windows UNC パスとしても設定されています。c = parcluster(); % Use default job1 = createJob(c); ap = {'/central/funcs','/dept1/funcs', ... '\\OurDomain\central\funcs','\\OurDomain\dept1\funcs'}; job1.AdditionalPaths = ap;
ワーカーの適切なスタートアップ ファイルのいずれかに
path
コマンドを配置する。matlabroot
\toolbox\local\startup.mmatlabroot
\toolbox\parallel\user\jobStartup.mmatlabroot
\toolbox\parallel\user\taskStartup.m
これらのファイルへのアクセス方法は、ジョブの
AttachedFiles
またはAdditionalPaths
プロパティによってワーカーに渡されます。これを行わない場合、使用されるこれらのファイルのバージョンは、ワーカーのパスで最上位にあるバージョンとなります。
共有リソースにあるファイルへのアクセスは、ユーザー名に基づいた権限によって決まります。MATLAB ジョブ スケジューラおよび MATLAB Parallel Server™ ソフトウェアのワーカー サービスの実行に使用するユーザー名を設定するには、サービスを起動する前に mjs_def
ファイルの MJSUSER
値を設定します。Microsoft Windows オペレーティング システムの場合には、指定されたユーザーのアカウント パスワードを提供する MJSPASS
もあります。サービスの既定の設定および mjs_def
ファイルについての説明は、『MATLAB Parallel Server システム管理者ガイド』のスクリプトの既定値の変更 (MATLAB Parallel Server)を参照してください。
ワーカー セッションとのデータの受け渡し
タスクおよびジョブ オブジェクトのいくつかのプロパティは、コードやデータをクライアントからスケジューラを経てワーカーへ、またその逆方向に渡すために設計されています。このような情報には、タスク評価に必要な MATLAB コードや、タスク評価処理の入力データ、その結果の出力データなどが含まれます。こうした通信に役立つプロパティは、以下のとおりです。
InputArguments
— 各タスクのこのプロパティには、タスク作成時に指定された入力データが格納されます。このデータは、ワーカーが評価を実行する際に関数に渡されます。OutputArguments
— 各タスクのこのプロパティには、関数の評価結果が格納されます。JobData
— ジョブ オブジェクトのこのプロパティには、そのジョブのタスクを評価するすべてのワーカーに送信されるデータが格納されます。データはジョブあたり 1 回のみワーカーに渡され、ワーカーがジョブで複数のタスクを評価する場合は時間が節約されるため、このプロパティは効率的に機能します(メモ: このプロパティを、MATLAB クライアントの任意のオブジェクトにあるUserData
プロパティと混同しないようにしてください。UserData
の情報はクライアントでのみ使用可能で、スケジューラやワーカーでは使用できません)。AttachedFiles
— ジョブ オブジェクトのこのプロパティは cell 配列であり、その中で、ワーカーに送信されるすべてのフォルダーおよびファイルを手作業により指定します。ワーカーでは、ファイルがインストールされるとともに、このプロパティで指定されたエントリがワーカー セッションの検索パスに追加されます。AttachedFiles
には、ジョブのタスクを評価するためにワーカーがアクセスする必要のあるフォルダーおよびファイルのリストが格納されます。このプロパティの値 (既定では空) はクラスター プロファイルまたはクライアント セッションで定義されます。プロパティの値は文字ベクトルの cell 配列として設定します。各文字ベクトルは、フォルダーまたはファイルへの絶対パス名または相対パス名です (メモ: これらのファイルまたはフォルダーが転送中に変更された場合、またはいずれかのフォルダーが空の場合は、失敗またはエラーとなります。存在しないパス名を指定した場合は、エラーが発生します)。ワーカーが特定ジョブのタスクを最初に評価する際、ワーカーはスケジューラから
AttachedFiles
プロパティ内のファイルおよびフォルダーを渡されます。ワーカーのマシンに、プロパティが設定されたクライアント マシンでアクセスされるものとまったく同一のフォルダー構造が作成されます。このプロパティの値にリストされているエントリが、ワーカー セッションのコマンド検索パスの最上位に追加されます(エントリのサブフォルダーは、フォルダー構造には含まれていますが、パスには追加されません)。ワーカーのマシンのどこにファイルが配置されているかを知るには、ワーカーで実行されるコードで関数getAttachedFilesFolder
を使用します。ワーカーは、同じジョブの後続タスクを実行する際、そのジョブで実行した最初のタスク用にジョブの
AttachedFiles
プロパティで既に設定されているフォルダー構造を使用します。ジョブの作成時に
AttachedFiles
を指定する場合は、その設定が、適用されるプロファイルで指定されている設定と結合されます。ジョブ オブジェクトの作成後にAttachedFiles
を設定する場合、この新しい設定はプロファイル設定と結合されず、そのジョブの既存の設定を上書きします。AttachedFiles
は、マシンで実行されるワーカーの数とは関係なく、マシンでその特定ジョブのタスクを実行する各ワーカーに転送されます。通常、ジョブが完了したときか、または次のジョブが開始されるときに、付加されたファイルはワーカーのマシンから削除されます。AutoAttachFiles
— ジョブ オブジェクトのこのプロパティでは、MATLAB がジョブのタスク関数と手動で添付したファイルを解析してワーカーに必要なコード ファイルを決定し、それらのファイルをワーカーに自動送信するよう、論理値を使用して指定します。このプロパティ値は、Profile Manager を使用してクラスター プロファイルに設定することも、コマンド ラインでプログラムによってジョブ オブジェクトに設定することもできます。c = parcluster(); j = createJob(c); j.AutoAttachFiles = true;
自動的に加えることができるコード ファイル形式は、MATLAB ファイル (拡張子が
.m
)、P コード ファイル (.p
)、MEX ファイル (.mex
) です。AutoAttachFiles
にはジョブに必要なデータ ファイルが含まれていないことに注意してください。これらのファイルを明示的にワーカーに転送するには、AttachedFiles
プロパティを使用します。ジョブに自動的に加えられるコード ファイルのリストを取得するには、
listAutoAttachedFiles
を使用します。並列プールの起動時に使用されるクラスター プロファイルで
AutoAttachFiles
プロパティがtrue
に設定されている場合、MATLAB はspmd
ブロック、parfor
ループおよびその他の付加ファイルを解析して、実行に必要なその他のコード ファイルを判別し、それらのファイルを自動的に並列プールに加えて、ワーカーがコードを使用できるようにします。
メモ
プロパティ設定の 1 回の呼び出しで送信できるデータ量には、既定の最大値があります。この制限は、OutputArguments
プロパティだけでなく、入力引数または AttachedFiles
としてジョブに渡されるデータにも適用されます。この制限を超えると、エラー メッセージが表示されます。このデータ転送サイズの制限についての詳細については、添付ファイルのサイズ制限を参照してください。
スタートアップおよび完了のために MATLAB コードを渡す
MATLAB のセッションとして、ワーカー セッションは起動するたびにその startup
.m
ファイルを実行します。startup.m
ファイルは、toolbox/parallel/user
など、ワーカーの MATLAB 検索パス上にある任意のフォルダーに配置できます。
これら追加ファイルは、ワーカー セッションがジョブのタスク評価を開始または完了する際に、ワーカー セッションを初期化し、クリーンアップすることができます。
jobStartup
.m
は、ワーカーがジョブの最初のタスクを実行する際に、ワーカーで自動的に実行されます。taskStartup
.m
は、ワーカーがタスクの評価を開始するたびに、ワーカーで自動的に実行されます。poolStartup
.m
は、ワーカーが新たに起動した並列プールに含められるたびに、ワーカーで自動的に実行されます。taskFinish
.m
は、ワーカーがタスクの評価を完了するたびに、ワーカーで自動的に実行されます。
これらのファイルの空のバージョンが、次のフォルダーに用意されています。
matlabroot/toolbox/parallel/user
これらのファイルを編集して、指定のタイミングでワーカーに実行させる任意の MATLAB コードを記入できます。
あるいは、これらのファイルの独自のバージョンを作成して、AttachedFiles
プロパティの一部としてジョブに渡したり、ファイルの場所へのパス名を AdditionalPaths
プロパティに含めることができます。
ワーカーでは、まず AttachedFiles
プロパティで提示されているバージョンが、次いで AdditionalPaths
プロパティでポイントされているバージョンが優先されます。これらのファイルがどれも両プロパティに記載されていない場合、ワーカーでは、ワーカーの MATLAB インストールの toolbox/parallel/user
フォルダーにあるバージョンのファイルを使用します。