如何在多个节点上实现MATLAB并行计算

时间:2019-07-11 08:43:16

标签: matlab parallel-processing

在超级计算服务器上,我将一个任务分配给2个节点,最多48个工作人员。

但是MATLAB命令parpool(36)不起作用。错误消息如下:

  

使用Parpool时出错(第113行)   您最少要求36个工作人员,但是群集“本地”的NumWorkers属性设置为最多允许24个工作人员。要在比此更多的工人上运行通信作业(本地群集最多为512个),请增加群集的NumWorkers属性的值。本地群集的NumWorkers的默认值是本地计算机上的内核数。

根据此技巧,我在代码中添加了两个命令,如下所示:

myCluster = parcluster;
myCluster.NumWorkers = 36;

此后,parpool(36)运行无错误,但计算时间保持不变。因此,我猜这两个命令对我没有帮助。如何在2个节点上使用36个内核?

1 个答案:

答案 0 :(得分:1)

您编写的代码正在使用MATLAB中的“本地”群集类型。它旨在在单台计算机的内核上运行。如果要在“真实”群集上运行,则需要使用提交到MATLAB Parallel Server群集的群集配置文件提交作业(或启动parpool)。

例如,如果要使用正在运行SLURM的现有集群,则可以按照here的说明安装内容,然后按照here的说明设置集群配置文件。获得了此类群集配置文件后,您可以提交batch作业以在该处运行,如下所示:

clus = parcluster('my slurm profile');
j = batch(@myFunction, 3, {in1, in2}, 'Pool', 36); % 3 is nargout for myFunction

或者您也可以像这样在访问集群的客户端上运行一个交互式池

parpool('my slurm profile', 36);