Main Content

解决常见问题

本节提供解决您在使用 MATLAB®Parallel Server™ 软件时可能遇到的问题的建议。

许可证错误

启动 MATLAB 工作进程时,许可问题可能会导致出现以下消息

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

收到此错误的原因有很多:

  • 此消息通常表示您正在尝试使用未经许可的产品。查看 MATLAB 安装中的 license.dat 文件,了解您是否有权使用此产品。

  • 如果您获得了此产品的许可,则此错误可能是由于许可文件中存在多余的回车符或制表符造成的。为了避免这种情况,请确保每行以 #SERVERDAEMONINCREMENT 开头。

    修复 license.dat 文件后,重新启动网络许可证管理器,MATLAB 就可以正常工作。

  • 该错误也可能是系统日期不正确造成的。如果您的系统日期早于许可证颁发日期,您将收到此错误。

  • 如果在使用 MATLABParallel 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 产品,并尝试在同一台机器上运行工作进程,您将收到此错误,因为未安装 MATLABParallel Server 产品,因此工作进程无法获得许可证。

UNIX 操作系统上的内存错误

如果运行 Linux® 操作系统的机器上的服务器服务创建的进程数量超出操作系统限制,则服务将失败并产生内存不足错误。建议您调整系统限制。有关详细信息,请参阅针对 Macintosh 和 Linux 的建议系统限制 (Parallel Computing Toolbox)

Windows 网络安装上运行服务器进程

许多网络配置不允许 LocalSystem 访问 UNC 或映射的网络共享。在这种情况下,在具有作为服务登录权限的不同用户下运行 mjs 进程。请参阅设置用户

所需端口

使用作业 管理器

基本端口.  mjs_def 文件指定并描述了作业管理器和所有工作进程所需的端口。请参阅 MATLAB 安装中用于每个集群进程的以下文件:

  • matlabroot/toolbox/parallel/bin/mjs_def.sh(在 UNIX® 操作系统上)

  • matlabroot\toolbox\parallel\bin\mjs_def.bat(在 Windows® 操作系统上)

沟通工作.  在运行 UNIX 操作系统的工作进程机器上,MPICH 运行通信作业所需的端口数范围从 BASE_PORT + 1000BASE_PORT + 2000

使用第三方调度调度器

工作进程之间的沟通.  在工作进程启动之前,您可以通过定义环境变量 MPICH_PORT_RANGE 并将其值 minport:maxport 来控制工作进程用于通信作业的端口范围。

打开 Worker 上的端口以接收来自客户端的入站通信.  您可以控制工作进程打开的监听端口范围以连接到客户端进行交互式并行池作业。

  • 使用 pctconfig (Parallel Computing Toolbox) 函数指定工作进程必须打开哪些监听端口或

  • 使用值 "minport maxport" 定义环境变量 PARALLEL_SERVER_OVERRIDE_PORT_RANGE。这将覆盖使用 pctconfig 指定的端口范围。

    • 对于 Microsoft® HPC Pack,在作业模板中将 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 脚本的更多信息,请参阅包装器脚本 (Parallel Computing Toolbox)

客户端端口

使用 pctconfig (Parallel Computing Toolbox) 函数,您可以指定客户端使用的端口。如果无法使用默认端口,此函数允许您分别配置与作业调度器通信和与并行池通信的端口。

带有作业管理器的临时 TCP 端口

如果您在运行 Windows 操作系统的节点集群上使用作业管理器,则必须确保作业管理器机器上有大量可用的临时 TCP 端口。默认情况下,Windows 操作系统上的最大有效临时 TCP 端口号为 5000,但如果不增加此设置,大型数据集的传输可能会失败。具体来说,如果您的集群有 32 个或更多工作进程,您应该使用以下步骤增加最大有效临时 TCP 端口号:

  1. 启动注册表编辑器。

  2. 在注册表中找到以下子项,然后点击参数

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
  3. 在注册表编辑器窗口中,选择编辑 > 新增 > DWORD 值

  4. 在右侧的条目列表中,将新值名称更改为 MaxUserPort 并按 Enter

  5. 右键点击 MaxUserPort 条目名称并选择修改

  6. 在编辑 DWORD 值对话框中,在值数据字段中输入 65534。在基线下,选择十进制。点击确定

    此参数控制程序向系统请求任何可用的用户端口时使用的最大端口号。通常,临时(短暂)端口分配的值在 1024 至 5000 之间(含)。此操作允许分配最多 65534 个端口号。

  7. 退出注册表编辑器。

  8. 重新启动机器。

主机通信问题

如果工作进程无法与其 MATLAB 作业调度器建立连接,或者客户端会话无法验证使用该调度器的配置文件,则这可能表明节点之间存在通信问题。

使用命令行界面

首先,确保相关机器对其 IP 解析达成一致。特定主机的 IP 地址应该与其自身的 IP 地址与另一台主机的 IP 地址相同。例如,如果 hostB 上的进程无法连接到 hostA 上的进程,则先找出自身的 hostA IP 地址,然后从 hostB 查看 hostA 的 IP 地址。二者应相同。

如果机器可以相互识别,nodestatus 命令可用于诊断其进程之间的问题。使用该函数确定本地主机上正在运行哪些 MATLABParallel 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 记录

当您使用 DNS 进行 MATLAB 作业调度器集群发现时,您需要每个域都有一个 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> 即主机的优先级越高。当两个记录具有相同 <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 记录。

使用 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>是集群发现配置文件的位置。

运行 Slurm 调度器集群的 company.com 网络的有效 DNS TXT 记录(集群发现配置文件存储在 /network/share/discovery 中)可能如下所示:

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

注意

如果需要多个域来定位集群,请为每个域使用一个 DNS TXT 记录。如果用户通过 VPN 访问的网络与您的内部网络具有不同的 DNS TXT 记录,请确保每个域都存在一个 DNS TXT 记录。

使用 DNS 系统的标准程序创建适当的 DNS TXT 记录。您可以使用标准实用程序(例如 nslookup 命令)来验证您的网络是否配置了必要的 DNS TXT 记录。要检查 company.com 域的 DNS TXT 记录,请使用以下命令。

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

相关主题