MATLAB分布式计算:本地计算机集群配置

1 minute read

Published:

本文介绍如何在处于同一局域网、MATLAB版本相同、都安装有 Parallel Computing Toolbox、windows 操作系统 的多台计算机上配置集群,以实现协同工作提升运算速度。

分布式计算介绍

MATLAB中提供Distributed Computing Toolbox(DCT)可以实现程序在多台计算机上并行计算,能够极大地提高大规模计算的运行速度。

DCT的基本思想是:用户把一台计算机设置为工作管理计算机(Job Manager),把其他计算机设置为该计算机的任务执行计算机(Worker);建立一个新的任务(Job),工作管理计算机会分配给其他的任务执行计算机运算(也可以让工作管理计算机参与计算)。

简言之,就是利用一台工作管理计算机使用任务执行计算机(Worker)和自身的(部分)核进行并行运算,以达到提升计算效率的目的。

配置流程

MATLAB 软件安装

  1. 作为 Manager 的节点计算机在安装过程中勾选 MATLAB License Server 和 MATLAB Parallel Server,前者为集群提供 license 认证,后者是分布式计算核心服务组件;
  2. 破解版 MATLAB,需要使用 floating license 的 key 而不是 standalone 的 key。破解完成后,在 Windows 服务选项卡中启动 MATLAB License Server 服务(我的电脑 -> 右键 -> 管理 -> 服务和应用程序 -> 服务)
  3. 作为 Worker 的机群可以不安装 License Server。

修改 mjs_def.bat 参数

在主机 Manager 中,打开 MATLAB 目录到 toolbox\parallel\bin 下,打开 mjs_def.bat 文件,设置如下参数(修改时删去本行的 REM):

  1. HOSTNAME 可以不做设置,后期若出现解析错误,可考虑修改;
  2. BASE_PORT 不改变,使用默认值;
  3. set MJSUSER=.\%USERNAME%;// 可以选当前登录的账户名;
  4. set MJSPASS=xxxxxxxx;// 设置登陆密码为xxxxxxxx;
  5. set SECURITY_LEVEL=2;// 表示生成任务时需要输入密码;

Windows defense 设置

  1. 检查当前网络是专用还是公用网络,修改防火墙设置,对当前网络关闭防火墙。如果电脑安装了除 windows defender 以外的安全软件,将 matlab 安装目录设置在信任区;
  2. 双击运行 addMatlabToWindowsFirewall.bat 文件,也可以在 matlab 命令行输入:
         ! addMatlabToWindowsFirewall.bat
    

查看主机间通信

  1. win+r,输入 cmd+enter,键入 ipconfig 查看主机 ip;
  2. 使用 ping 查看局域网是否稳定,主机之间是否可以通信;
  3. 记录每个主机的 ip 地址(重要!)。

修改 hosts 文件

  1. 管理员模式运行命令行,输入
    notepad: C:\WINDOWS\system32>notepad
    
  2. 记事板中,文件 -> 打开 Systems32\drivers\etc,所有文件中找到 hosts打开;
  3. 将局域网内用到的所有主机(包括 manager host)的 ip 地址与主机名输入 hosts 文件并保存。如:
     192.168.1.101	LAPTOP
     192.168.1.102	DESKTOP
    

MATLAB 命令行运行

进入目录:toolbox\parallel\bin,运行以下命令:

    ! mjs uninstall -clean  % 卸载老版本的 mjs service
    ! mjs install
    ! mjs start

在其余主机上重复以上操作,需要注意修改 hosts 文件,打开 mjs service;

添加 Worker 节点

MATLAB 命令行运行:

! admincenter

点击 Add or Find,输入包括本主机在内的所有 ip 地址,搜索并添加全部;Test connectivity,无报错则进行下一步,hostname 解析不匹配等警告忽略。

使用流程

目前我们为实验室的4台主机进行了分布式平台的配置。由于 wifi 动态分配 ip 地址,在每次使用分布式计算前,需要重新确认每台主机的 ip 地址,在各自 hosts 文件中修改,并且在 MATLAB 中重新安装 mjs 并启动,在 admincenter 中重新 Add or Find。

在 Manager 和 Worker 建立连接后,开始进行以下操作:

  1. 新建任务 Job 在 MATLAB Job Scheduler (MJS) 点击 Start 启动 scheduler, 输入名称如 jm1, 选择 scheduler 的节点是当前主机名,若之前设置了密码,则需要填写密码;
  2. 选择运行核数 右键 scheduler 点击 Start Workers,勾选作为 worker 的主机名,设置启动的 worker 数量。注意 worker 数量不超过核心数。
  3. 集群选择 在 MATLAB 主页,Parallel 选项选择 Discover Clusters, 勾选 On your network, 点击 Next 选择之前建立的集群,并按 Next, Finish。 可通过 Parallel - Manage Cluster Profiles 对当前集群在 validation 一栏中检验; 可在 Parallel - Monitor Jobs 查看当前集群下 Job 的工作状态;
图1:MATLAB主页的parallel选项
图1:MATLAB主页的parallel选项
  1. 开启计算 点击 MATLAB 界面左下角开启 parallel computing, 也可以在命令行输入 parpool 开启;此时在主机运行的程序,会在集群运行,可以查看集群 CPU 利用率确定。

一些小Tips

  1. 如果遇到无法登录错误,先卸载 mjs service; a. 查看 mjs_def.bat 是否填写了 hostname,若填写了,用 REM 注释掉; b. 查看 Windows 服务选项卡中 MATLAB License Server 的属性 -> 登录,选择 NETWORK-SERVICE,密码设置为空;
  2. 若在添加 Worker 节点时遇到错误,导致 node unreachable / unavaliable a. 在命令行用 ping 测试是否能通信,排除网络不稳定的问题; b. 在任务管理器 -> 服务中查看 RPC service 是否开启; c. 查看 worker node 的参数设置、hosts 文件等是否修改妥当; d. 删除后重新添加,可以尝试用 ip 或者 hostname 添加。
  3. 遇到难以解决的问题,可以尝试先停止 mjs service 服务,然后 ! mjs uninstall -clean, ! mjs install,重新安装。

参考

https://zhuanlan.zhihu.com/p/62490487

https://mrswolf.github.io/zh-cn/2019/05/20/MATLAB%E5%88%86%E5%B8%83%E5%BC%8F%E9%9B%86%E7%BE%A4%E6%90%AD%E5%BB%BA%E8%AE%B0%E5%BD%95/