Main Content

一般的な問題のトラブルシューティング

この節では、MATLAB® Parallel Server™ ソフトウェアで発生する可能性がある問題の解決方法について説明します。

ライセンス エラー

MATLAB ワーカーを起動する際に、ライセンスの問題が発生し、次のメッセージが表示されることがあります。

License checkout failed. No such FEATURE exists. 
License Manager Error -5

このエラーは、以下のようなさまざまな理由で表示されます。

  • このメッセージは、通常、ライセンスのない製品を使用しようとしたことを示します。MATLAB インストール内にある license.dat ファイルを確認して、この製品を使用するライセンスがあるか調べます。

  • この製品のライセンスがある場合、このエラーは、ライセンス ファイル内に余分なキャリッジ リターンまたはタブがあることが原因で発生している可能性があります。これを回避するには、各行が #SERVERDAEMON または INCREMENT で始まっていることを確認します。

    license.dat ファイルを修正した後、ネットワーク ライセンス マネージャーを再起動すると、MATLAB は正しく機能するはずです。

  • このエラーは、誤ったシステム日付により発生している可能性もあります。ライセンスを取得した日付よりシステム日付が前である場合、このエラーが発生します。

  • MATLAB Parallel Server ソフトウェアでワーカーを起動したときにこのエラーが発生した場合は、以下の原因が考えられます。

    • ワーカー ライセンスにアクセスできないインストール環境から startworker コマンドを呼び出している可能性があります。たとえば、Parallel Computing Toolbox™ 製品のクライアント インストール環境からワーカーを起動すると、次のエラーが発生します。

      The mjs service on the host hostname 
      returned the following error:
      
      Problem starting the MATLAB worker.
      
      The cause of this problem is:
      
      ==============================================================
         Most likely, the MATLAB worker failed to start due to a
         licensing problem, or MATLAB crashed during startup.  Check 
         the worker log file
         /tmp/mjs_user/node_node_worker_05-11-01_16-52-03_953.log
         for more detailed information.  The mjs log file
         /tmp/mjs_user/mjs-service.log
         may also contain some additional information.
      ===============================================================
      

      ワーカー ログ ファイルで、次の情報を確認してください。

      License checkout failed.
      License Manager Error -15
      MATLAB is unable to connect to the license server. 
      Check that the license manager has been started, and that the 
      MATLAB client machine can communicate with the license server.
      
      Troubleshoot this issue by visiting: 
      https://www.mathworks.com/support/lme/R2009a/15
      
      Diagnostic Information:
      Feature: MATLAB_Distrib_Comp_Engine 
      License path: /apps/matlab/etc/license.dat 
      FLEXnet Licensing error: -15,570. System Error: 115
      

    • Parallel Computing Toolbox 製品のみをインストールしており、同じマシン上でワーカーを実行しようとすると、このエラーが表示されます。これは、MATLAB Parallel Server 製品がインストールされておらず、ワーカーがライセンスを取得できないためです。

UNIX オペレーティング システムでのメモリ エラー

Linux® オペレーティング システムが稼働するマシン上でサーバー サービスにより作成されたプロセスの数が、オペレーティング システムの制限を超えると、サービスは失敗してメモリ不足エラーが発生します。システムの制限の調整をお勧めします。詳細については、Macintosh と Linux で推奨されるシステムの制限 (Parallel Computing Toolbox)を参照してください。

Windows ネットワーク インストール環境でのサーバー プロセスの実行

多くのネットワークは、UNC またはマッピングされたネットワーク共有に LocalSystem がアクセスできないように構成されます。この場合、サービスとしてログオンする権限をもつ別のユーザーとして mjs プロセスを実行します。ユーザーの設定を参照してください。

必要なポート

MATLAB ジョブ スケジューラの場合

BASE_PORT.  mjs_def ファイルでは、ジョブ マネージャーとすべてのワーカーに必要なポートが指定され、その説明があります。詳細については、MATLAB ジョブ スケジューラのスタートアップ パラメーターの定義BASE_PORT パラメーターの説明を参照してください。

通信ジョブ.  UNIX® オペレーティング システムで稼動するワーカー マシン上で、MPICH が通信ジョブの実行に必要とするポート番号の範囲は、BASE_PORT + 1000 から BASE_PORT + 2000 までです。

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

ワーカー間の通信.  ワーカー プロセスが起動する前に、ワーカーが通信ジョブで使用するポートの範囲を制御できます。FI_TCP_PORT_LOW_RANGE 環境変数を使用して最小ポート番号を定義し、FI_TCP_PORT_HIGH_RANGE 環境変数を使用して最大ポート番号を定義します。

R2024b より前: 環境変数 MPICH_PORT_RANGE を値 minport:maxport で定義して、ワーカーが通信ジョブで使用するポートの範囲を制御できます。

クライアントからのインバウンド通信用にワーカー上のポートを開く.  対話型並列プール ジョブ用にクライアントに接続するためにワーカーが開くリスニング ポート範囲を制御できます。

  • 関数 pctconfig (Parallel Computing Toolbox) を使用して、ワーカーが開く必要があるリスニング ポートを指定します。または、

  • 値が "minport maxport" の環境変数 PARALLEL_SERVER_OVERRIDE_PORT_RANGE を定義します。これにより、pctconfig で指定されたポート範囲がオーバーライドされます。

    • Microsoft® HPC Pack では、ジョブ テンプレートで Environments フィールドに加えて PARALLEL_SERVER_OVERRIDE_PORT_RANGE を設定します。たとえば、30000 から 31000 の範囲のリスニング ポートを開くには、以下のコードをジョブ テンプレートに追加します。

      PARALLEL_SERVER_OVERRIDE_PORT_RANGE=30000 31000; 

    • その他のサードパーティ製スケジューラでは、communicatingJobWrapper.sh スクリプトで PARALLEL_SERVER_OVERRIDE_PORT_RANGE を設定します。たとえば、29000 から 31000 の範囲のリスニング ポートを開くには、以下のコードを communicatingJobWrapper.sh スクリプトに追加します。

      export PARALLEL_SERVER_OVERRIDE_PORT_RANGE="29000 31000"
      communicatingJobWrapper.sh スクリプトの詳細については、Wrapper Scriptsを参照してください。

クライアント ポート

関数 pctconfig (Parallel Computing Toolbox) を使用してクライアントで使用されるポートを指定します。既定のポートを使用できない場合、この関数によりジョブ スケジューラとの通信用、および並列プールとの通信用に個別のポートを構成できます。

MATLAB ジョブ スケジューラで使用する一時 TCP ポート

Windows® オペレーティング システムが稼働するノードのクラスター上で MATLAB ジョブ スケジューラを使用する場合、ジョブ マネージャーをホストするマシン上で一時的に多数の TCP ポートが確実に使用できなければなりません。既定では、Windows オペレーティング システム上の有効な一時 TCP ポートの最大の番号は 5000 ですが、この設定が大きくされていない場合大量のデータセットの転送に失敗する可能性があります。特に、クラスターに 32 個以上のワーカーがある場合、次の手順に従って有効な一時 TCP ポートの最大の番号を大きくしなければなりません。

  1. レジストリ エディターを起動します。

  2. レジストリで次のサブキーを見つけて、[パラメーター] をクリックします。

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
  3. [レジストリ エディター] ウィンドウで、[編集][新規][DWORD (32 ビット) 値] を選択します。

  4. 右側のエントリの一覧で、新しい値の名前を MaxUserPort に変更し、Enter キーを押します。

  5. MaxUserPort エントリ名を右クリックし、[修正] を選択します。

  6. [DWORD 値の編集] ダイアログの [値のデータ] フィールドに「65534」と入力します。[基数][10 進数] を選択します。[OK] をクリックします。

    このパラメーターは、プログラムがシステムに使用可能なユーザー ポートを要求する際の最大ポート番号を制御します。通常、一時 (短命) ポートは 1024 から 5000 までの値を割り当てられます。この処理により、最大 65534 までのポート番号を割り当てることができます。

  7. レジストリ エディターを終了します。

  8. マシンを再起動します。

ホスト通信の問題

ワーカーが MATLAB ジョブ スケジューラに接続できない場合、またはクライアント セッションがそのスケジューラを使用するプロファイルを検証できない場合、ノード間で通信の問題が発生している可能性があります。

コマンド ライン インターフェイスを使用

まず、問題のマシンが、解決された IP アドレスと一致していることを確認してください。特定のホストの IP アドレスは、自身から見ても、別のホストから見ても、同じでなければなりません。たとえば、hostB 上のプロセスが hostA 上のプロセスに接続できない場合、hostA の自身の IP アドレスを調べてから、hostB から見た hostA の IP アドレスを確認します。両者は同一でなければなりません。

マシンが相互を識別できる場合、そのプロセス間の問題の診断に nodestatus コマンドが役立つ場合があります。この関数を使用して、ローカル ホスト上で実行されている MATLAB Parallel Server プロセスを判別し、リモート ホストからアクセス可能なものを特定します。hostA 上のワーカーが hostB 上のジョブ マネージャーに登録できない場合、両方のホストで nodestatus を実行して、それぞれのホストが hostB 上で参照できるものを確認します。

hostB で次を実行します。

nodestatus -remotehost hostB

次に hostA で同じコマンドを実行します。

nodestatus -remotehost hostB

結果として、同じジョブ マネージャーとワーカーの一覧が表示されなければなりません。

出力に問題が示される場合、情報レベルを高くして再度コマンドを実行し、より詳細な情報を取得します。

nodestatus -remotehost hostB -infolevel 3

管理センター GUI を使用

管理センターを使用していくつかの通信の問題を診断できます。

ホスト名を指定して一覧にホストを正しく追加できない場合は、代わりに IP アドレスを使用できます。詳細については、ホストの追加を参照してください。何らかの通信の問題が疑われる場合、管理センター GUI で [接続のテスト] をクリックします。詳細については、管理センターでの MATLAB ジョブ スケジューラ クラスターの接続テストを参照してください。このテストにより、ノードが相互を識別でき、ノードのプロセス間で相互に通信できることが検証されます。

クラスター検出のためのネットワーク通信の検証

Parallel Computing Toolbox でクラスター検出機能を使用する場合、ネットワークは DNS SRV または DNS TXT レコードを使用するように構成する必要があります。

DNS SRV レコード

MATLAB ジョブ スケジューラ クラスター検出に DNS を使用する場合は、各ドメインの DNS SRV レコードが必要です。複数の MATLAB ジョブ スケジューラで複数の DNS SRV レコードをもつことができます。各 DNS SRV レコードに対して、次の一般的な形式を使用します。

_mdcs._tcp.<domain> <TTL> IN SRV <priority> <weight> <port> <hostname>.

以下の部分を使用して、MATLAB ジョブ スケジューラ サーバーの DNS SRV レコードを作成します。

  • <domain> は、クライアント マシンが検索するドメイン名 (company.comuniversity.edu など) です。

  • <TTL> は DNS レコードをキャッシュできる期間 (秒) を示します。3600 を推奨します。

  • IN SRV はこれがサービス レコードであることを示しており、このとおりに入力する必要があります。

  • <priority><weight> は、優先順位と重みの値を示します。複数の DNS SRV レコードを作成する場合は、これらのフィールドで優先順位を指定できます。それぞれに値 0 を推奨します。<priority> が小さくなるほど、ホストの優先順位は "高く" なります。2 つのレコードの <priority> が同じ場合は、<weight> が高いほうのレコードが最初に使用されます。<weight> 値は、サーバーの優先順位を指定するために使用します。

  • <port> は MATLAB ジョブ スケジューラ サーバーに接続するポートです。既定のポートは 27350 です。MATLAB ジョブ スケジューラ サーバーのポートを変更する場合は、<port> を適宜変更します。

  • <hostname> は MATLAB ジョブ スケジューラのホストの完全修飾ドメイン名です。ドメイン company.com 上のマシン mjs-1 は、完全修飾ドメイン名 mjs-1.company.com をもちます。

マシン mjs-1 上で MATLAB ジョブ スケジューラを実行している company.com のネットワークの有効な DNS SRV レコードは次のようになります。

_mdcs._tcp.company.com 3600 IN SRV 0 0 27350 mjs-1.company.com.

メモ

クラスターを複数のドメインに配置する必要がある場合は、ドメインごとに DNS SRV レコードを使用します。ユーザーが VPN 経由でアクセスしたネットワークの DNS SRV レコードが内部ネットワークと異なる場合は、ドメインごとに DNS SRV レコードが 1 つずつ存在するかどうかを確認します。

使用している DNS システムの標準手順に従って適切な DNS SRV レコードを作成します。nslookup コマンドのような標準ユーティリティを使用して、ネットワークが必要な DNS SRV レコードで構成されていることを確認できます。company.com ドメインの MATLAB ジョブ スケジューラの DNS SRV レコードを調べるには、次のコマンドを使用します。

nslookup -type=SRV _mdcs._tcp.company.com 

DNS TXT レコード

サードパーティ製スケジューラのクラスター検出には DNS TXT レコードを使用します。DNS TXT レコードはテキスト文字列を特定のドメインに関連付けます。MATLAB がクラスター検出構成ファイルを見つける場所を認識できるように、DNS TXT レコードにテキスト文字列としてクラスター検出構成ファイルの場所を保存します。

複数のクラスター用に複数の DNS TXT レコードをもつことができます。各 DNS TXT レコードに対して、次の一般的な形式を使用します。

_mdcs._tcp.<domain> IN TXT "discover_folder=<folder>"

以下の各部を使用して、サードパーティ製スケジューラを検出するために DNS TXT レコードを構成します。

  • <domain> は、クライアント マシンが検索するドメイン名 (company.comuniversity.edu など) です。

  • IN TXT はこれがテキスト レコードであることを示しており、このとおりに入力する必要があります。

  • "discover_folder=<folder>"。ここで、<folder> はクラスター検出構成ファイルの場所です。

クラスター検出構成ファイルが /network/share/discovery に保存されている場合の、Slurm スケジューラ クラスターを実行している company.com ネットワークに有効な DNS TXT レコードは、以下のようになります。

_mdcs._tcp.company.com IN TXT "discover_folder=/network/share/discovery"

メモ

クラスターを複数のドメインに配置する必要がある場合は、ドメインごとに DNS TXT レコードを使用します。ユーザーが VPN 経由でアクセスしたネットワークの DNS TXT レコードが内部ネットワークと異なる場合は、ドメインごとに DNS TXT レコードが 1 つずつ存在するかどうかを確認します。

使用している DNS システムの標準手順に従って適切な DNS TXT レコードを作成します。nslookup コマンドのような標準ユーティリティを使用して、ネットワークが必要な DNS TXT レコードで構成されていることを確認できます。company.com ドメインの DNS TXT レコードを調べるには、次のコマンドを使用します。

nslookup -type=TXT _mdcs._tcp.company.com

関連するトピック