Main Content

MATLAB ジョブ スケジューラ クラスターの自動サイズ変更の設定

MATLAB® ジョブ スケジューラ (MJS) クラスターをカスタマイズして、サイズが自動変更されるようにできます。既定では、MJS クラスターのサイズ変更機能は有効になっていません。これは、クラスター内の現在のワーカー数を超えるワーカーを必要とする作業をクラスターに投入すると、MJS により直ちに拒否されることを意味します。自動サイズ変更 (自動スケーリングともいう) を使用すると、このような作業をクラスターに投入し、投入された作業の量に応じて自動的にクラスター内のワーカー数を変更することができます。作業が多くなるとクラスターは拡大 (スケール アップ) し、作業が少なくなると縮小 (スケール ダウン) します。これにより、計算リソースをより効率的に使用でき、コストの節約につながります。

MJS クラスターのサイズが自動変更されるよう設定するには、以下を行う必要があります。

  1. mjs_def ファイル内で最大ワーカー数を設定します。

  2. MJS クラスターを開始します。

  3. 自動サイズ変更処理を設定します。

ワーカーの最大数の設定

MJS クラスターをサイズ変更可能にするには、mjs_def ファイルを次のように編集して、クラスターの最大ワーカー数を定義する必要があります。

  1. matlabroot/toolbox/parallel/bin にあるファイル mjs_def.sh (Linux®) または mjs_def.bat (Windows®) を開きます。ここで、matlabroot は MATLAB インストールのディレクトリです。

  2. #MAX_LINUX_WORKERS= または行 #MAX_WINDOWS_WORKERS= のいずれか、あるいは両方のコメントを解除し、望ましい値に設定します。これらの変数は Linux および Windows ワーカーの最大数をそれぞれ定義し、クラスターのサイズはこの値まで変更できます。

サイズ変更可能な MJS クラスターを使用すると、クラスター内の現在のワーカー数を超えるワーカーを必要とするジョブを、MAX_LINUX_WORKERS と MAX_WINDOWS_WORKERS で指定された数を上限としてキューに入れることができます。それ以外のジョブは直ちにキャンセルされます。

メモ

クラスターの開始後に Linux および Windows ワーカーの最大数を変更するには、matlabroot/toolbox/parallel/bin にある resize スクリプトを使用して resize update コマンドを実行します。以下に例を示します。

% cd matlab/toolbox/parallel/bin
% ./resize update -jobmanager myJobManager -maxlinuxworkers 4 -maxwindowsworkers 8

MJS クラスターの開始

mjs_def ファイルで定義されたオプションを使ってクラスターを作成するには、このファイルを編集して保存した後に MJS クラスターを開始します。MJS クラスターのインストール、構成、および開始方法の詳細については、MATLAB ジョブ スケジューラおよびネットワーク ライセンス マネージャー向けの MATLAB Parallel Server のインストールと構成を参照してください。

自動サイズ変更処理の設定

サイズ変更可能な MJS クラスターのサイズが自動変更されるようにするには、クラスターのサイズを定期的に調整するバックグラウンド処理を設定する必要があります。このバックグラウンド処理の具体的な実装は多くの要因に左右されますが、以下の一般的な推奨手順に従うことができます。

  1. クラスターの望ましいサイズを特定します。サイズ変更可能な MJS クラスターの望ましいサイズは、各オペレーティング システムのワーカー合計数として報告されます。したがって、既にクラスター内にあるすべてのビジー状態のワーカーと一部のアイドル状態のワーカーが含まれます。望ましいサイズは、実行中のジョブとキュー内のジョブに基づいて変更されます。matlabroot/toolbox/parallel/bin にある resize スクリプトを使用して、resize status コマンドを実行します。

    % cd matlab/toolbox/parallel/bin
    % ./resize status
    上記の resize status コマンドにより、サイズ変更可能なクラスターに関する情報が JSON 形式で返されます。
    {
      "jobManagers": [
        {
          "name": "myJobManager",
          "host": "myhostname",
          "desiredWorkers": {
            "linux": 1,
            "windows": 0
          },
          "maxWorkers": {
            "linux": 4,
            "windows": 8,
          },
          "workers": [
            {
              "name": "worker_1",
              "host": "myhostname",
              "operatingSystem": "linux",
              "state": "busy",
              "secondsIdle": 0
            },
            {
              "name": "worker_2",
              "host": "myhostname",
              "operatingSystem": "linux",
              "state": "idle",
              "secondsIdle": 60
            }
          ]
        }
      ]
    }
    JSON 出力を解析し、MJS クラスターにおける Linux および Windows ワーカーの望ましい数を表す、desiredWorkers 値を抽出します。

  2. 望ましいワーカー数をクラスター内のワーカー数と比較し、ワーカーを起動または停止する必要があるかどうかを判定します。resize status コマンドの出力にある配列 workers を使用して、クラスター内のワーカーを調べます。キュー内のジョブが最終的に必ず実行されるようにするには、望ましいワーカー数と同じか、それを超える十分な数のワーカーを起動する必要があります。オプションで、望ましいワーカー数を超えるアイドル状態のワーカーを停止することができます。

    メモ

    環境内でワーカーの起動に時間がかかる場合は、余分なワーカーがアイドル状態になってからしばらく待ったうえで、停止することもできます。この方法は、余分なワーカーがアイドル状態になってすぐ後に再度必要となる場合、アイドル状態のワーカーを直ちに停止するよりも効率的です。ワーカーがアイドル状態であった期間を確認するには、ワーカーの secondsIdle 値を調べます。

  3. 必要に応じてワーカーを起動または停止します。これを行うには、ユーティリティ スクリプト startworker および stopworker を使用します。ワーカーの停止に際して作業が中断されないようにするには、stopworker コマンドと共に -onidle フラグを使用することを推奨します。

参考

| |

関連するトピック