在超级计算服务器上,我将一个任务分配给2个节点,最多48个工作人员。
但是MATLAB命令parpool(36)
不起作用。错误消息如下:
使用Parpool时出错(第113行) 您最少要求36个工作人员,但是群集“本地”的NumWorkers属性设置为最多允许24个工作人员。要在比此更多的工人上运行通信作业(本地群集最多为512个),请增加群集的NumWorkers属性的值。本地群集的NumWorkers的默认值是本地计算机上的内核数。
根据此技巧,我在代码中添加了两个命令,如下所示:
myCluster = parcluster;
myCluster.NumWorkers = 36;
此后,parpool(36)
运行无错误,但计算时间保持不变。因此,我猜这两个命令对我没有帮助。如何在2个节点上使用36个内核?
答案 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);