一般的な問題のトラブルシューティング
この節では、MATLAB® Parallel Server™ ソフトウェアで発生する可能性がある問題の解決方法について説明します。
ライセンス エラー
MATLAB ワーカーを起動する際に、ライセンスの問題が発生し、次のメッセージが表示されることがあります。
License checkout failed. No such FEATURE exists. License Manager Error -5
このエラーは、以下のようなさまざまな理由で表示されます。
このメッセージは、通常、ライセンスのない製品を使用しようとしたことを示します。MATLAB インストール内にある
license.dat
ファイルを確認して、この製品を使用するライセンスがあるか調べます。この製品のライセンスがある場合、このエラーは、ライセンス ファイル内に余分なキャリッジ リターンまたはタブがあることが原因で発生している可能性があります。これを回避するには、各行が
#
、SERVER
、DAEMON
または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 ポートの最大の番号を大きくしなければなりません。
レジストリ エディターを起動します。
レジストリで次のサブキーを見つけて、[パラメーター] をクリックします。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
[レジストリ エディター] ウィンドウで、[編集] 、 [新規] 、 [DWORD (32 ビット) 値] を選択します。
右側のエントリの一覧で、新しい値の名前を
MaxUserPort
に変更し、Enter キーを押します。MaxUserPort
エントリ名を右クリックし、[修正] を選択します。[DWORD 値の編集] ダイアログの [値のデータ] フィールドに「
65534
」と入力します。[基数] で [10 進数] を選択します。[OK] をクリックします。このパラメーターは、プログラムがシステムに使用可能なユーザー ポートを要求する際の最大ポート番号を制御します。通常、一時 (短命) ポートは 1024 から 5000 までの値を割り当てられます。この処理により、最大 65534 までのポート番号を割り当てることができます。
レジストリ エディターを終了します。
マシンを再起動します。
ホスト通信の問題
ワーカーが 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.com
やuniversity.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.com
やuniversity.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