Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

ワーカーとのコードの共有

ジョブのタスクは別々のマシンで評価されるため、各マシンはタスクの評価に必要なすべてのファイルにアクセスできなければなりません。以下の節では、コードを共有する基本的な仕組みについて説明します。

メモ

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.m

    • matlabroot\toolbox\parallel\user\jobStartup.m

    • matlabroot\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 フォルダーにあるバージョンのファイルを使用します。

関連するトピック