Main Content

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

汎用スケジューラのプラグイン スクリプト

汎用スケジューラ インターフェイスは MATLAB® クライアント、MATLAB ワーカー、サードパーティ製スケジューラの相互作用を構成するための非常に高い柔軟性を提供します。プラグイン スクリプトは、使用している設定と MATLAB との相互作用を定義します。

次の表は、サポートされているプラグイン スクリプト関数とそれらが評価される段階を示します。

ファイル名段階
independentSubmitFcn.m個別のジョブの投入
communicatingSubmitFcn.m通信ジョブの投入
getJobStateFcn.mジョブの状態のクエリ
cancelJobFcn.mジョブのキャンセル
cancelTaskFcn.mタスクのキャンセル
deleteJobFcn.mジョブの削除
deleteTaskFcn.mタスクの削除
postConstructFcn.mparallel.cluster.Generic インスタンスの作成後

これらのプラグイン スクリプトは、予期されるファイル名をもち、かつクラスターの [PluginScriptsLocation] プロパティで指定されたフォルダーにある場合にのみ評価されます。汎用クラスター プロファイルの設定方法の詳細については、汎用スケジューラ インターフェイスを使用した構成 (MATLAB Parallel Server)を参照してください。

メモ

独立ジョブを投入するには independentSubmitFcn.m が存在していなければならず、通信ジョブを投入するには communicatingSubmitFcn.m が存在していなければなりません。

サンプルのプラグイン スクリプト

汎用スケジューラ インターフェイスの使用をサポートするため、次のサードパーティ製スケジューラ向けのプラグイン スクリプトを GitHub® リポジトリからダウンロードできます。

MATLAB クライアントがジョブをスケジューラに直接投入できない場合、MATLAB では、コマンドをリモート クラスターに送信するために ssh プロトコルの使用がサポートされます。

クライアントとクラスター ノードに共有ファイル システムがない場合、MATLAB では、コンピューターとクラスター間でジョブおよびタスク ファイルをコピーするために sftp (SSH ファイル転送プロトコル) の使用がサポートされます。

プラグイン スクリプトの動作をカスタマイズする場合は、AdditionalSubmitArgs などの追加のプロパティを設定できます。詳細については、サンプル プラグイン スクリプトの動作のカスタマイズ (MATLAB Parallel Server)を参照してください。

リポジトリのいずれかでスケジューラまたはクラスター構成がサポートされていない場合、いずれかのパッケージのスクリプトを変更することを推奨します。汎用スケジューラ用の一連のプラグイン スクリプトを記述する方法の詳細については、汎用スケジューラのプラグイン スクリプトを参照してください。

ラッパー スクリプト

サンプルのプラグイン スクリプトでは "ラッパー" スクリプトを使用して independentSubmitFcn.mcommunicatingSubmitFcn.m の実装を簡略化しています。これらのスクリプトは必須ではありませんが、コードを読みやすくするためにこれらの使用を推奨します。この表ではこれらのスクリプトを説明します。

ファイル名説明
independentJobWrapper.sh適切な引数を指定して MATLAB 実行可能ファイルの呼び出しを組み込むために independentSubmitFcn.m で使用されます。実行可能ファイルの場所とその引数に環境変数を使用します。使用例は、SLURM スケジューラ用サンプル スクリプトを参照してください。
communicatingJobWrapper.shクラスターに通信ジョブを分配するために communicatingSubmitFcn.m で使用されます。このスクリプトはスケジューラ ジョブを投入して MPI プロセスを起動の手順を実装します。使用例は、SLURM スケジューラ用サンプル スクリプトを参照してください。

カスタム プラグイン スクリプトの記述

メモ

独自のプラグイン スクリプトを記述する場合、お使いの設定に最も近いサンプル プラグイン スクリプトを変更することから始めることをお勧めします (サンプルのプラグイン スクリプトを参照)。

independentSubmitFcn

独立ジョブを汎用クラスターに投入すると、関数 independentSubmitFcn.m が MATLAB クライアント セッションで実行されます。

この関数の宣言行は次のとおりでなければなりません。

function independentSubmitFcn(cluster,job,environmentProperties)

MATLAB の独立ジョブの各タスクはスケジューラの 1 つのジョブに対応します。この関数の目的は N 個のジョブをサードパーティ製スケジューラに投入することです。ここで、N は独立ジョブ内のタスクの数です。これらの各ジョブは次を満たさなければなりません:

  1. 実行する個別のタスクを識別するために MATLAB ワーカーに必須の 5 つの環境変数を設定する。詳細については、ワーカー環境の構成を参照してください。

  2. MATLAB ワーカーを起動してタスクを実行するための適切な MATLAB 実行可能ファイルを呼び出す。詳細については、スケジューラ ジョブを投入して MATLAB ワーカーを実行を参照してください。

ワーカー環境の構成.  この表に、個々のタスクを実行するために、ワーカーの MATLAB に設定しなければならない 5 つの環境変数と値を示します。

環境変数の名前環境変数の値
PARALLEL_SERVER_DECODE_FUNCTION'parallel.cluster.generic.independentDecodeFcn'
PARALLEL_SERVER_STORAGE_CONSTRUCTORenvironmentProperties.StorageConstructor
PARALLEL_SERVER_STORAGE_LOCATION
  • クライアントとクラスター ノード間に共有ファイル システムがある場合は environmentProperties.StorageLocation を使用します。

  • クライアントとクラスター ノード間に共有ファイル システムがない場合は、すべてのクラスター ノードからアクセスできるフォルダーを選択します。クライアント ノードとクラスター ノード間でジョブやタスク ファイルをコピーする手順については、共有ファイル システムなしでの送信を参照してください。

PARALLEL_SERVER_JOB_LOCATIONenvironmentProperties.JobLocation
PARALLEL_SERVER_TASK_LOCATIONenvironmentProperties.TaskLocations{n}nth 番目のタスク

多くのスケジューラは投入コマンドの一部としてクライアント環境をコピーすることをサポートしています。サポートしている場合、クライアントに以前の環境変数を設定できるため、スケジューラは設定をワーカー環境にコピーできます。サポートしていない場合は、これらの変数を転送するように投入コマンドを変更しなければなりません。

スケジューラ ジョブを投入して MATLAB ワーカーを実行.  ジョブおよびタスクに必須の 5 つのパラメーターがワーカー上で定義されると、適切な引数を指定して MATLAB 実行可能ファイルを呼び出すことにより、タスクが実行されます。呼び出す MATLAB 実行可能ファイルは environmentProperties.MatlabExecutable に定義されます。渡す引数は environmentProperties.MatlabArguments に定義されます。

メモ

クライアント マシンからスケジューラに直接送信できない場合は、リモート ホストからの送信ssh を使用した送信方法の説明を参照してください。

SLURM スケジューラ用サンプル スクリプト.  このスクリプトは、共有ファイル システムをもつ SLURM スケジューラ用の基本的な投入関数を示します。より詳細な例については、サンプルのプラグイン スクリプトを参照してください。

function independentSubmitFcn(cluster,job,environmentProperties)
    % Specify the required environment variables.
    setenv('PARALLEL_SERVER_DECODE_FUNCTION', 'parallel.cluster.generic.independentDecodeFcn');
    setenv('PARALLEL_SERVER_STORAGE_CONSTRUCTOR', environmentProperties.StorageConstructor);
    setenv('PARALLEL_SERVER_STORAGE_LOCATION', environmentProperties.StorageLocation);
    setenv('PARALLEL_SERVER_JOB_LOCATION', environmentProperties.JobLocation);
    
    % Specify the MATLAB executable and arguments to run on the worker.
    % These are used in the independentJobWrapper.sh script.
    setenv('PARALLEL_SERVER_MATLAB_EXE', environmentProperties.MatlabExecutable);
    setenv('PARALLEL_SERVER_MATLAB_ARGS', environmentProperties.MatlabArguments);
    
    for ii = 1:environmentProperties.NumberOfTasks
        % Specify the environment variable required to identify which task to run.
        setenv('PARALLEL_SERVER_TASK_LOCATION', environmentProperties.TaskLocations{ii});
        % Specify the command to submit the job to the SLURM scheduler.
        % SLURM will automatically copy environment variables to workers.
        commandToRun = 'sbatch --ntasks=1 independentJobWrapper.sh';
        [cmdFailed, cmdOut] = system(commandToRun);
    end
end
 

前述の例はシンプルな bash スクリプト independentJobWrapper.sh をスケジューラに送信します。independentJobWrapper.sh スクリプトは次の環境変数を使用して MATLAB 実行可能ファイルと引数を埋め込みます。

#!/bin/sh
# PARALLEL_SERVER_MATLAB_EXE - the MATLAB executable to use
# PARALLEL_SERVER_MATLAB_ARGS - the MATLAB args to use
exec "${PARALLEL_SERVER_MATLAB_EXE}" ${PARALLEL_SERVER_MATLAB_ARGS}

communicatingSubmitFcn

通信ジョブを汎用クラスターに投入すると、関数 communicatingSubmitFcn.m が MATLAB クライアント セッションで実行されます。

この関数の宣言行は次のとおりでなければなりません。

function communicatingSubmitFcn(cluster,job,environmentProperties)

この関数の目的はスケジューラに単一のジョブを投入することです。このジョブは次を満たさなければなりません。

  1. 実行するジョブを識別するために MATLAB ワーカーに必須の 4 つの環境変数を設定する。詳細については、ワーカー環境の構成を参照してください。

  2. MPI を呼び出してジョブを N 個の MATLAB ワーカーに分散する。N は MATLAB ジョブの NumWorkersRange プロパティに指定されている最大値に対応します。詳細については、スケジューラ ジョブを投入して MPI プロセスを起動を参照してください。

ワーカー環境の構成.  この表に、通信ジョブのタスクを実行するためにワーカーの MATLAB に設定しなければならない 4 つの環境変数と値を示します。

環境変数の名前環境変数の値
PARALLEL_SERVER_DECODE_FUNCTION'parallel.cluster.generic.communicatingDecodeFcn'
PARALLEL_SERVER_STORAGE_CONSTRUCTORenvironmentProperties.StorageConstructor
PARALLEL_SERVER_STORAGE_LOCATION
  • クライアントとクラスター ノード間に共有ファイル システムがある場合は environmentProperties.StorageLocation を使用します。

  • クライアントとクラスター ノード間に共有ファイル システムがない場合は、すべてのクラスター ノードに存在するフォルダーを選択します。クライアント ノードとクラスター ノード間でジョブやタスク ファイルをコピーする手順については、共有ファイル システムなしでの送信を参照してください。

PARALLEL_SERVER_JOB_LOCATIONenvironmentProperties.JobLocation

多くのスケジューラは投入コマンドの一部としてクライアント環境をコピーすることをサポートしています。サポートしている場合、クライアントに以前の環境変数を設定できるため、スケジューラは設定をワーカー環境にコピーできます。サポートしていない場合は、これらの変数を転送するように投入コマンドを変更しなければなりません。

スケジューラ ジョブを投入して MPI プロセスを起動.  ジョブの 4 つの必須パラメーターを定義した後、mpiexec を使用して N 個のワーカー MATLAB プロセスを起動し、ジョブを実行します。mpiexec は Parallel Computing Toolbox™ に付属のソフトウェアで、ワーカーの MATLAB プロセス間の通信を可能にするメッセージ パッシング インターフェイス (MPI) 規格を実装しています。mpiexec の詳細については、MPICH のホーム ページを参照してください。

ジョブを実行するには、ジョブをスケジューラに投入しなければなりません。スケジューラは次の手順を実行します。matlabroot はワーカー ノード上の MATLAB インストールの場所を指す点に注意してください。

  1. スケジューラから N 個のプロセスを要求します。N は MATLAB ジョブの NumWorkersRange プロパティに指定された最大値に対応します。

  2. mpiexec を呼び出し、ワーカーの MATLAB プロセスを起動します。各ホストで起動するワーカーの MATLAB プロセスの数は、スケジューラによって割り当てられたプロセス数と一致していなければなりません。mpiexec 実行可能ファイルは matlabroot/bin/mw_mpiexec にあります。

    mpiexec コマンドは、起動したプロセスに環境変数を自動的に転送します。そのため、mpiexec を実行する前に、ワーカー環境の構成にリストされた環境変数が設定されていることを確認してください。

    mpiexec のオプションの詳細については、Using the Hydra Process Manager を参照してください。

メモ

前述の手順の詳細な例については、サンプルのプラグイン スクリプトのすべてのサンプル プラグイン スクリプトと共に提供されている communicatingJobWrapper.sh スクリプトを参照してください。独自のスクリプトを記述する必要がある場合は、このスクリプトを開始点として使用してください。

SLURM スケジューラ用サンプル スクリプト.  次のスクリプトは、共有ファイル システムをもつ SLURM スケジューラ用の基本的な投入関数を示します。

投入されるジョブは bash スクリプト communicatingJobWrapper.sh に含まれています。このスクリプトは、スケジューラ ジョブを投入して MPI プロセスを起動の SLURM スケジューラに関連するステップを実装します。より詳細な例については、サンプルのプラグイン スクリプトを参照してください。

function communicatingSubmitFcn(cluster,job,environmentProperties)
    % Specify the four required environment variables.
    setenv('PARALLEL_SERVER_DECODE_FUNCTION', 'parallel.cluster.generic.communicatingDecodeFcn');
    setenv('PARALLEL_SERVER_STORAGE_CONSTRUCTOR', environmentProperties.StorageConstructor);
    setenv('PARALLEL_SERVER_STORAGE_LOCATION', environmentProperties.StorageLocation);
    setenv('PARALLEL_SERVER_JOB_LOCATION', environmentProperties.JobLocation);
    
    % Specify the MATLAB executable and arguments to run on the worker.
    % Specify the location of the MATLAB install on the cluster nodes.
    % These are used in the communicatingJobWrapper.sh script.
    setenv('PARALLEL_SERVER_MATLAB_EXE', environmentProperties.MatlabExecutable);
    setenv('PARALLEL_SERVER_MATLAB_ARGS', environmentProperties.MatlabArguments);
    setenv('PARALLEL_SERVER_CMR', cluster.ClusterMatlabRoot);
    
    numberOfTasks = environmentProperties.NumberOfTasks;
    
    % Specify the command to submit a job to the SLURM scheduler which
    % requests as many processes as tasks in the job.
    % SLURM will automatically copy environment variables to workers.
    commandToRun = sprintf('sbatch --ntasks=%d communicatingJobWrapper.sh', numberOfTasks);
    [cmdFailed, cmdOut] = system(commandToRun);
end

getJobStateFcn

汎用クラスターで作成されたジョブの状態をクエリすると、関数 getJobStateFcn.m が MATLAB クライアント セッションで実行されます。この関数の宣言行は次のとおりでなければなりません。

function state = getJobStateFcn(cluster,job,state)

サードパーティ製スケジューラを使用している場合、スケジューラは、ローカル ジョブ ストレージからツールボックスが使用できる情報よりも新しいジョブ関連情報をもつ可能性があります。この状況は特に、非共有のファイル システムを使用している場合 (リモート ファイル システムがローカル データの場所への大規模データ ファイルの伝播が遅い可能性がある場合) に当てはまります。

スケジューラから情報を取得するには、クラスターの [PluginScriptsLocation] に関数 getJobStateFcn.m を追加します。

この関数に渡される状態は、ローカル ジョブ ストレージから派生した状態です。これにより、この関数の本体がスケジューラをクエリしてジョブのより正確な状態を判定し、保存された状態の代わりに返すことができます。この目的で作成された関数は、ジョブ オブジェクトの状態の有効な値を返さなければなりません。使用できる値は ‘pending’‘queued’‘running’‘finished’、または ‘failed’ です。

MATLAB タスクを対応するスケジューラ ジョブ ID とペアにする手順については、汎用スケジューラによるジョブの管理を参照してください。

cancelJobFcn

汎用クラスターで作成されたジョブをキャンセルすると、MATLAB クライアント セッションで関数 cancelJobFcn.m が実行されます。この関数の宣言行は次のとおりでなければなりません。

function OK = cancelJobFcn(cluster,job)

汎用スケジューラ インターフェイスを使用して作成されたジョブをキャンセルすると、既定でこのアクションはストレージ内のジョブ データにのみ影響します。スケジューラ上の対応するジョブをキャンセルするには、いつ何を実行するかに関する命令をスケジューラに指示しなければなりません。このためには、クラスターの [PluginScriptsLocation] に関数 cancelJobFcn.m を追加します。

これにより、この関数の本体がスケジューラにコマンド (キューから対応するジョブを削除する、など) を送信できます。この関数は、スケジューラのジョブのキャンセルの成功または失敗を示す logical スカラーを返さなければなりません。

MATLAB タスクを対応するスケジューラ ジョブ ID とペアにする手順については、汎用スケジューラによるジョブの管理を参照してください。

cancelTaskFcn

汎用クラスターで作成されたタスクをキャンセルすると、関数 cancelTaskFcn.m が MATLAB クライアント セッションで実行されます。この関数の宣言行は次のとおりでなければなりません。

function OK = cancelTaskFcn(cluster,task)

汎用スケジューラ インターフェイスを使用して作成されたタスクをキャンセルすると、既定でストレージ内のタスク データのみが影響を受けます。スケジューラ上の対応するジョブをキャンセルするには、いつ何を実行するかに関する命令をスケジューラに指示しなければなりません。このためには、クラスターの [PluginScriptsLocation] に関数 cancelTaskFcn.m を追加します。

これにより、この関数の本体がスケジューラにコマンド (スケジューラのキューから対応するジョブを削除する、など) を送信できます。この関数は、スケジューラのジョブのキャンセルの成功または失敗を示す logical スカラーを返さなければなりません。

MATLAB タスクを対応するスケジューラ ジョブ ID とペアにする手順については、汎用スケジューラによるジョブの管理を参照してください。

deleteJobFcn

汎用クラスターを使用して作成されたジョブを削除すると、deleteJobFcn.m 関数が MATLAB クライアント セッションで実行されます。この関数の宣言行は次のとおりでなければなりません。

function deleteTaskFcn(cluster,task)

汎用スケジューラ インターフェイスを使用して作成されたジョブを削除すると、既定でストレージ内のジョブ データのみが影響を受けます。スケジューラ上の対応するジョブを削除するには、いつ何を実行するかに関する命令をスケジューラに指示しなければなりません。このためには、クラスターの [PluginScriptsLocation] に関数 deleteJobFcn.m を追加します。

これにより、この関数の本体がスケジューラにコマンド (キューから対応するジョブを削除する、など) を送信できます。

MATLAB タスクを対応するスケジューラ ジョブ ID とペアにする手順については、汎用スケジューラによるジョブの管理を参照してください。

deleteTaskFcn

汎用クラスターを使用して作成されたタスクを削除すると、MATLAB クライアント セッションで関数 deleteTaskFcn.m が実行されます。この関数の宣言行は次のとおりでなければなりません。

function deleteTaskFcn(cluster,task)

汎用スケジューラ インターフェイスを使用して作成されたタスクを削除すると、既定でストレージ内のタスク データのみが影響をうけます。スケジューラ上の対応するジョブを削除するには、いつ何を実行するかに関する命令をスケジューラに指示しなければなりません。このためには、クラスターの [PluginScriptsLocation] に関数 deleteTaskFcn.m を追加します。

これにより、この関数の本体がスケジューラにコマンド (スケジューラのキューから対応するジョブを削除する、など) を送信できます。

MATLAB タスクを対応するスケジューラ ジョブ ID とペアにする手順については、汎用スケジューラによるジョブの管理を参照してください。

postConstructFcn

MATLAB にクラスターのインスタンスを作成した後、MATLAB クライアント セッションで関数 postConstructFcn.m が実行されます。たとえば、次のコード行はクラスターのインスタンスを作成し、‘myProfile’ クラスター プロファイルに関連付けられた関数 postConstructFcn を実行します。

c = parcluster('myProfile');

関数 postConstructFcn の宣言行は次のとおりでなければなりません。

function postConstructFcn(cluster)

クラスターの使用前にそのカスタム構成を実行する必要がある場合は、クラスターの PluginScriptsLocation に関数 postConstructFcn.m を追加します。この関数の本体には、必要な任意の追加ステップを含めることができます。

ユーザー カスタマイゼーションの追加

実行時にプラグイン スクリプトの機能を変更する必要がある場合は、汎用スケジューラ インターフェイスの [AdditionalProperties] プロパティを使用します。

例として、SLURM スケジューラを考えます。SLURM の投入コマンドは、実行するノードを指定できる引数 –-nodelist を受け入れます。プラグイン スクリプトを変更することなく、この引数の値を変更できます。この機能を追加するには、independentSubmitFcn.m または communicatingSubmitFcn.m のいずれかのスクリプトに次のコード パターンを含めます。

% Basic SLURM submit command
submitCommand = 'sbatch';
 
% Check if property is defined
if isprop(cluster.AdditionalProperties, 'NodeList')
    % Add appropriate argument and value to submit string
    submitCommand = [submitCommand ' --nodelist=' cluster.AdditionalProperties.NodeList];
end 

このコーディング パターンの使用方法の例については、サンプルのプラグイン スクリプトのスクリプトの非共有投入関数を参照してください。

あるいは、独立ジョブと通信ジョブの両方の投入コマンドを変更するには、関数 getCommonSubmitArgs に上記のコード パターンを含めます。関数 getCommonSubmitArgs は、サンプル プラグイン スクリプトに含まれている補助関数で、両方のタイプのジョブの投入コマンドを変更するために使用できます。

クラスター プロファイル マネージャーからの AdditionalProperties の設定

前述の例のスクリプトを変更して、汎用クラスター プロファイルに AdditionalProperties のエントリを追加し、使用するノードのリストを指定できます。これにより、プラグイン スクリプトに追加されたカスタマイズをドキュメント化する方法が、クラスター プロファイルを共有するすべてのユーザーに提供されます。

NodeList プロパティをクラスター プロファイルに追加するには次を行います。

  1. [並列][クラスターの作成と管理] を選択して、MATLAB デスクトップからクラスター プロファイル マネージャーを起動します。

  2. 汎用クラスターのプロファイルを選択し、[編集] をクリックします。

  3. [AdditionalProperties] テーブルに移動し、[追加] をクリックします。

  4. [名前]NodeList を入力します。

  5. [型][String] に設定します。

  6. [値] をノードのリストに設定します。

MATLAB コマンド ラインからの AdditionalProperties の設定

ユーザー カスタマイゼーションの追加のスクリプトを変更して、ジョブの投入前にクラスター オブジェクトの適切なプロパティを設定することで、MATLAB コマンド ラインからノードのリストを編集できます。

c = parcluster;
c.AdditionalProperties.NodeList = 'gpuNodeName';
j = c.batch('myScript'); 

AdditionalProperties オブジェクトを表示して、現在定義されているすべてのプロパティとその値を確認します。

>> c.AdditionalProperties
ans = 
  AdditionalProperties with properties:
                 ClusterHost: 'myClusterHost'
                    NodeList: 'gpuNodeName'
    RemoteJobStorageLocation: '/tmp/jobs'

汎用スケジューラによるジョブの管理

ジョブ管理の最初の要件は、MATLAB ジョブ オブジェクトに対応するスケジューラ上のジョブを識別することです。ジョブをスケジューラに投入するときに、投入関数内で投入を行うコマンドにより、スケジューラからジョブに関するいくつかのデータを返すことができます。通常、このデータにはジョブ ID が含まれます。このスケジューラ ジョブ ID を MATLAB ジョブ オブジェクトと共に保存しておくことにより、後で管理コマンドをスケジューラに送信するときに、このジョブ ID を使用してスケジューラ ジョブを参照することができます。同様に、MATLAB タスク ID とスケジューラ ジョブ ID のマップを保存して、個別のタスクの管理に役立てることができます。このクラスター データを保存するツールボックス関数はsetJobClusterDataです。

ジョブ スケジューラ データの保存

この例では、関数 independentSubmitFcn.m を変更して、SLURM スケジューラに送信された各コマンドの出力を解析する方法を説明します。正規表現を使用して各タスクのスケジューラ ジョブ ID を抽出し、setJobClusterData を使用して保存できます。

% Pattern to extract scheduler job ID from SLURM sbatch output
searchPattern = '.*Submitted batch job ([0-9]+).*';
 
jobIDs = cell(numberOfTasks, 1);
for ii = 1:numberOfTasks
    setenv('PARALLEL_SERVER_TASK_LOCATION', environmentProperties.TaskLocations{ii});
    commandToRun = 'sbatch --ntasks=1 independentJobWrapper.sh';
    [cmdFailed, cmdOut] = system(commandToRun);
    jobIDs{ii} = regexp(cmdOut, searchPattern, 'tokens', 'once');
end
 
% set the job IDs on the job cluster data
cluster.setJobClusterData(job, struct('ClusterJobIDs', {jobIDs}));

ジョブ スケジューラ データの取得

この例では cancelJobFcn.m を変更して、SLURM スケジューラ上の対応するジョブをキャンセルします。この例では、getJobClusterData を使用してジョブ スケジューラ データを取得します。

function OK = cancelJobFcn(cluster, job)

% Get the scheduler information for this job
data = cluster.getJobClusterData(job);
jobIDs = data.ClusterJobIDs;

for ii = 1:length(jobIDs)
    % Tell the SLURM scheduler to cancel the job
    commandToRun = sprintf('scancel ''%s''', jobIDs{ii});
    [cmdFailed, cmdOut] = system(commandToRun);
end

OK = true;

リモート ホストからの送信

MATLAB クライアントがスケジューラに直接送信できない場合、parallel.cluster.RemoteClusterAccess を使用して接続を確立し、リモート ホストでコマンドを実行します。

このオブジェクトは ssh プロトコルを使用しているため、リモート ホストで ssh デーモン サービスが実行されている必要があります。接続を確立するには、マシン上で実行中の ssh エージェントがあるか、または次のいずれかを提供しなければなりません。

  • ユーザー名とパスワード

  • 有効な ID ファイル

  • 多要素認証に対する適切な回答

次のコードは、リモート ホスト remoteHostname でユーザー user としてコマンドを実行します。

% This will prompt for the password of user
access = parallel.cluster.RemoteClusterAccess.getConnectedAccess('remoteHostname', 'user');
% Execute a command on remoteHostname
[cmdFailed, cmdOut] = access.runCommand(commandToRun);

リモート ホスト送信を使用したプラグイン スクリプトの例については、サンプルのプラグイン スクリプトのリモート送信モードを参照してください。

共有ファイル システムなしでの送信

MATLAB クライアントとクラスター ノードに共有ファイル システムがない場合は、parallel.cluster.RemoteClusterAccess を使用して接続を確立し、クライアントとクラスターのノードの間でジョブとタスクのファイルをコピーします。

このオブジェクトは ssh プロトコルを使用しているため、リモート ホストで ssh デーモン サービスが実行されている必要があります。接続を確立するには、マシン上で実行中の ssh エージェントがあるか、または次のいずれかを提供しなければなりません。

  • ユーザー名とパスワード

  • 有効な ID ファイル

  • 多要素認証に対する適切な回答

非共有送信を使用する場合は、クライアント上で使用するローカル ジョブ ストレージの場所と、クラスター上で使用するリモート ジョブ ストレージの場所の両方を指定しなければなりません。リモート ジョブ ストレージの場所は、クラスターのすべてのノードから利用できなければなりません。

parallel.cluster.RemoteClusterAccess はファイルのミラーリングを使用して、ローカルのジョブおよびタスクのファイルをクラスター上のそれぞれと継続的に同期します。ファイルのミラーリングがはじめて開始されるときに、ローカルのジョブおよびタスクのファイルがリモート ジョブ ストレージの場所にアップロードされます。ジョブの実行時に、ファイルのミラーリングはリモート ジョブ ストレージの場所で新しいファイルおよび更新を継続的にチェックし、それらのファイルをクライアントのローカル ストレージにコピーします。この手続きにより、MATLAB クライアントは常に、スケジューラで実行されているジョブとタスクの最新の状態を把握しています。

次の例では、リモート ホスト remoteHostname にユーザー user として接続し、同期するリモート クラスター ストレージの場所として /remote/storage を設定します。次に、ジョブのファイルのミラーリングを開始し、ジョブのローカル ファイルをクラスター上の /remote/storage にコピーし、あらゆる変更を同期してローカル マシンに反映します。

% This will prompt for the password of user
access = parallel.cluster.RemoteClusterAccess.getConnectedAccessWithMirror('remoteHostname', '/remote/storage', 'user');
% Start file mirroring for job
access.startMirrorForJob(job); 

共有ファイル システムを使用しないプラグイン スクリプトの例については、サンプルのプラグイン スクリプトの非共有送信モードを参照してください。

関連するトピック