MATLAB

概述

万博ManBetX登录奥克兰大学获得了校园广泛许可(CWL) MATLAB。这允许任何用户运行MATLAB在玛蒂尔达没有特别许可或授权文件。这个页面描述一些MATLAB的方式可以在集群上运行。

初始集群配置

为了使用并行工作和批处理模式需要集群配置设置导入MATLAB概要文件在您第一次运行它。

请使用以下:

MATLAB模块加载matlab -nodisplay -nosplash> > configCluster

请注意,如果你运行“configCluster MATLAB命令不止一次,它会删除并重新生成你的集群配置信息,所以只需要做这一次。

设置默认Walltime

重要的是:2022年8月24 - 25日,自粘升级很多,用户必须指定walltime或他们的工作将死在一点(默认)。如果你是产卵MATLAB并行工作工作,(请参阅多处理器多节点下面的例子)您将需要设置一个默认walltime工人工作。为了实现这一点,请执行以下步骤:

1。建立一个- windows会话集群:

2。加载MATLAB modulefile:

  • MATLAB / R2022a模块加载

3所示。推出MATLAB GUI模式:

  • matlab

4所示。GUI窗口打开时,选择下拉菜单下的“平行”“环境”并选择“平行偏好”

5。您应该看到“并行计算工具箱”在左窗格中选择。右边窗格中,单击的链接“集群配置文件管理器”

6。“集群配置文件”(左窗格),选择“玛蒂尔达R2022a”配置文件(或最近)

7所示。在右窗格中,向下滚动到“调度器插件”部分,单击“编辑”按钮(右下角)

8。在“调度器插件”,滚动窗口,看起来就像一个电子表格,直到你看到一个条目为“WallTime

9。在旁边的“价值”一节”WallTime”,输入默认值(例如7-00:00:00)

10。单击“完成”按钮(右下)

11。退出MATLAB

以上步骤将在~ /更新您的设置。matlab的子目录。现在,一个默认walltime应该设置为任何平行催生了使用parcluster或parfor工人工作。

替代方法

或者,您可以使用下面的“形状”内部工作参数发送到粘使用很多类似以下MATLAB脚本的开头:

c = parcluster;c.AdditionalProperties.WallTime =“7-00:00:00”;p = c.parpool (50)

在上面的例子中,我们设置了附加walltime所连接的处理“c”(parcluster)。然后产生必要的“池”所需的工人使用“c.parpool(50)”,使用“p”处理识别。

交互式地计划

预定的交互式工作可以运行在一个集群的节点使用类似如下:

srun - n - c 1 - t 30:00——企业/bin/bash登录

会议开始后,简单地加载MATLAB和启动应用程序:

MATLAB模块加载matlab -nodisplay -nosplash

有关更多信息,请参阅我们的文档调度互动工作

交互式并行

你可以开始一个交互式MATLAB工作,指定要使用的平行工人总数在跑步。这可以通过使用类似如下:

MATLAB模块加载matlab -nodisplay> > c = parcluster;> > p = c.parpool (40)

上面的命令序列提供了一个处理集群资源(parcluster),然后分配40工人(parpool)。这些工人可以运行在一个节点或多个节点根据请求和集群调度。从这里,您可以执行MATLAB命令或脚本使用默认集群参数集。

看到默认集群参数使用以下命令:

> > c.AdditionalProperties

其他参数可以添加或修改,如walltime内存使用量,gpu,等。例如:

> > c.AdditionalProperties。Walltime =“5:00:00”;> > c.AdditionalProperties。MemUsage = ' 4000 ';> > c.AdditionalProperties。GpusPerNode = 1;

当完成时,你可以终止本工作使用:

> > p.delete

异步交互的批处理作业

也可以将异步批作业提交集群通过MATLAB交互式界面。这是一个方便的方法提交的一系列作业玛蒂尔达,而无需创建独立的工作脚本为每一个分析的任务。MATLAB可以运行从登录节点或预定的交互式会话和提交的工作如下所示。

“批处理”命令将返回一个工作对象用于访问提交的输出工作。例如:

MATLAB模块加载matlab -nodisplay> > c = parcluster;> > j = c。批处理(@pwd 1 {})

在上面的例子中我们获得处理集群(parcluster)我们在前面的示例中所做的一样。批处理命令启动“@pwd”命令(当前工作目录)和“1”输出参数和输入参数“{}”。

另一个例子可能包括运行一个MATLAB函数可能类似于以下几点:

j = c。批处理(“球体”,1,{})

上面的命令提交一个MATLAB函数的工作“球体”玛蒂尔达集群,与1输出参数和输入参数。

在这个例子中,我们运行一个MATLAB脚本批处理作业:

j = c.batch (“myscript”)

在下面的示例中,我们创建一个多处理器、多节点的工作使用MATLAB脚本名为“for_loop”提交给集群:

> > c = parcluster;> > j = c。批处理(“for_loop”、“池”,40)

上面的示例指定40 CPU任务“for_loop”工人。供参考,“for_loop”包含以下命令:

抽搐n = 30000;一个= 500;一个= 0 (n);parfor i = 1: n(我)= max (abs (eig(兰德(a))));结束toc

在脚本中for_loop“我们利用“parfor”循环指令函数的任务分配给不同的员工。请注意,您的MATLAB代码必须设计并行化处理的数据指定的工人为了有一个实际的性能优势。

查询任何工作的状态:

> > j.State

如果“状态”是“完成”可以获取结果:

> > j.fetchOutputs {:}

你完成后,确保删除工作结果:

> > j.delete

检索当前运行列表或完成工作,叫“parcluster”检索集群对象。这个对象存储数组的工作运行,运行,或排队运行:

> > c = parcluster;> > = c.Jobs工作> > j2 = c.Jobs (2);

上面的示例将获取第二份工作和显示它。

我们可以把我们的工作结果:

> > j2.fetchOutputs

请注意,命令以分号(;)结束会抑制输出

粘的工作很多脚本

概述

MATLAB运行脚本也可以使用传统的完成工作。MATLAB命令构建抑制GUI显示组件。MATLAB脚本应该编码显示或打印输出结果。

单处理器

下面是一个例子的工作脚本,我们运行MATLAB脚本“mysphere”并查看粘*很多。申请结果:

# #工作脚本示例# ! / bin / bash--login# SBATCH——作业名= matlabTest= 1 # SBATCH——节点# SBATCH——ntasks = 1# SBATCH——cpus-per-task = 1# = 01:00:00 SBATCH——时间cd ~模块加载MATLAB MATLAB -singleCompThread -nodisplay -nosplash - r mysphere

供参考,MATLAB脚本”mysphere。m”包含以下:

[x, y, z] =球;r = 2;冲浪(x * r * r, z * r)轴平等= 4 *π* r ^ 2;V =(4/3) *π* r ^ 3;disp (A)disp (V)

多处理器单独的节点

我们也可以使用粘工作很多脚本运行multi-worker并行工作。例如,假设我们有下面的脚本“for_loop.m”:

c = parcluster(当地的)poolobj = c.parpool (4);流(“工人数量:% g \ n”, poolobj.NumWorkers);抽搐n = 200;一个= 500;一个= 0 (n);parfor i = 1: n(我)= max (abs (eig(兰德(a))));结束toc

在上面的脚本,我们指定4个工人。我们还利用“parcluster(当地)指令,所以资源有限的本地节点分配给的工作。所以我们的工作脚本类似于以下:

#示例作业脚本(删除)# ! / bin / bash# SBATCH——作业名= matlabTest= 1 # SBATCH——节点# SBATCH——ntasks = 1# SBATCH——cpus-per-task = 5# = 00:05:00 SBATCH——时间

cd ~模块加载MATLAB MATLAB -nodisplay -nosplash - r for_loop}}}请注意,在上面的工作脚本示例中,我们指定5 cpu而不是4。这是因为(1)一个CPU管理需要4个工人(N + 1)总共5。

也请注意,如果没有指定一个值为“parpool”MATLAB将默认为12个工人。

多处理器多节点

我们可以指定一个工人数量MATLAB工作,允许MATLAB和分配这些工人的作业调度器与分布式处理一系列节点。一个改变我们必须使我们的MATLAB代码的规范是“parcluster”。下面是一些示例代码,计算π的值使用多个工人分配到多个节点:

函数calc_pi_multi_nodec = parcluster;c.AdditionalProperties。MemUsage = 4 gb的;如果isempty (gcp (nocreate)), c.parpool (40);结束spmd= (labindex - 1) / numlabs;b = labindex / numlabs;流(“子区间:[% 4 g, % 4 g] \ n”, a, b)myIntegral =积分(@quadpi, a, b);流(“子区间:[% 4 g, % 4 g)积分:% 4 g \ n ', a, b, myIntegral)piApprox = gplus (myIntegral)公关;结束approx1 = piApprox {1};% 1的元素值对工人1流(“π:%。18 f \ n ',π)流(“近似:%。18 f \ n ', approx1)流(“错误:% g \ n”, abs(π- approx1))函数y = quadpi (x)% QUADPI返回数据近似π。%的导数4 * (x)每股y = 4。/ (1 + x ^ 2);

在上面的例子中我们省略了“当地”从“parcluster”和“40”的值分配给“parpool”。还请注意我们使用“c。AdditionalProperties”开出“MemUsage”4 gb(您可以添加任意数量的工作参数以这种方式)。这将40名工人分配给我们的任务。这个函数的工作脚本将下面的样子:

{{{# !/bin/bash #示例作业脚本# SBATCH - n 1 # 1的实例MATLAB # SBATCH——cpus-per-task = 1 # 1核心每个实例# SBATCH——mem-per-cpu = 4 GB # 4 GB RAM /核心# SBATCH——时间= 00:20:00 # 20分钟

#负载模块加载MATLAB / R2021a MATLAB模块

#运行代码matlab批calc_pi_multi_node}}}请注意,我们只分配1 cpu-per-task和1个节点到这份工作。这个工作是本质上的“包装器”功能。一旦启动,工人将催生了作为一个单独的工作在一个或多个节点使用共有40名工人(核心)。walltime这项工作必须超过walltime需要完成“calc_pi_multi_node”功能,否则整个作业将失败。由于MATLAB并行服务器集成粘集群系统,很多必要的worker脚本将催生了这个例子。

提交工作Off-Cluster

概述

可以提交工作MATLAB的玛蒂尔达从工作站集群复制。这些说明假设您已经安装了MATLAB在您的工作站,包括并行计算工具箱

这时,MATLAB off-cluster作业提交不正确地集成。因此有必要使用OU VPN连接为了提交off-cluster作业(从而绕过两人推)。

初始配置

在你首次off-cluster作业提交你的个人工作站,需要下载并安装一个tarball / zip集成脚本低于您的机器:

MATLAB在本地打开,运行以下命令来确定您的“用户路径”:

> > userpath

一旦已经确定,将集成脚本文件解压到这个目录中。一旦完成,配置您的本地集群MATLAB使用玛蒂尔达:

> > configCluster

进入上面的命令,你应该促使Matlida用户名。输入,并配置集群应该完成。

此时,您应该准备好提交工作从您的本地机器上玛蒂尔达。

为新版本修改配置

如果你已经完成了初始配置上面步骤之前,您需要下载最新版本的集成脚本并将其解压缩到你当前的本地安装,或者,你可能仅仅修改现有的配置脚本。这是必要的,允许您运行off-cluster工作与MATLAB的最新安装版本。

修改现有的本地集成脚本,改变本地脚本的根位置,和修改的变量ClusterMatlabRoot的文件”mdcs.rc”(约31行)包括新版本。例如,如果您的原始值ClusterMatlabRoot看起来像下面的:

ClusterMatlabRoot = R2017b: /厘米/共享/应用程序/ MATLAB / R2017b R2020a: /厘米/共享/应用程序/ MATLAB / R2020a R2020b: /厘米/共享/应用程序/ MATLAB / R2020b R2021a: /厘米/共享/应用程序/ MATLAB / R2021a R2021b: /厘米/共享/应用程序/ MATLAB / R2021b R2022a: /厘米/共享/应用程序/ MATLAB / R2022a

。。和您想要添加版本R2022b,只是最后一个条目后面加逗号,定义新版本“R2022b:“其次是安装路径。例如,

ClusterMatlabRoot = R2017b: /厘米/共享/应用程序/ MATLAB / R2017b R2020a: /厘米/共享/应用程序/ MATLAB / R2020a R2020b: /厘米/共享/应用程序/ MATLAB / R2020b R2021a: /厘米/共享/应用程序/ MATLAB / R2021a R2021b: /厘米/共享/应用程序/ MATLAB / R2021b R2022a: /厘米/共享/应用程序/ MATLAB / R2022a R2022b: /厘米/共享/应用程序/ MATLAB / R2022b

提交工作

Off-cluster作业提交包括签发批处理作业的一样我们将集群。在这个例子中,我们将使用函数我们之前提出了设计计算π的值,与一些修改:

函数calc_pi_multi_nodespmd= (labindex - 1) / numlabs;b = labindex / numlabs;流(“子区间:[% 4 g, % 4 g] \ n”, a, b)myIntegral =积分(@quadpi, a, b);流(“子区间:[% 4 g, % 4 g)积分:% 4 g \ n ', a, b, myIntegral)piApprox = gplus (myIntegral)公关;结束approx1 = piApprox {1};% 1的元素值对工人1流(“π:%。18 f \ n ',π)流(“近似:%。18 f \ n ', approx1)流(“错误:% g \ n”, abs(π- approx1))函数y = quadpi (x)% QUADPI返回数据近似π。%的导数4 * (x)每股y = 4。/ (1 + x ^ 2);

注意,在修改后的代码我们删除引用“parcluster”和“parpool”。我们将相反,设置这些在我们的桌面MATLAB会话:

> > c = parcluster;> > c.AdditionalProperties.MemUsage = 4 gb的;> > j = c。批处理(“calc_pi_multi_node”、“池”,40岁,AutoAddClientPath,假);

在上面的示例中,我们创建一个句柄集群,指定附加工作参数(在本例中内存),然后提交“calc_pi_multi_node”作为批处理作业,指定一个40池工人。参数”AutoAddClientPath”,错误的”指示,我们不应该试图添加当前本地集群MATLAB路径的工作,因为这些不是共享的文件系统。

一旦提交工作如图所示,我们将提示您输入密码第一次运行:

  • authenticate.png”class=

片刻之后我们的工作细节可以显示通过输入:

> >我
  • jobdetails.png”class=

我们可以检查我们的工作状态使用“j。状态”命令:

  • Matlab的工作状态”class=

我们可以获得的输出函数调用使用命令“日记(j)”:

> >日记(j)- - -开始日记- - - - - -实验1:子区间[0,0.025):实验2:子区间:[0.025,0.05]实验3:子区间:[0.05,0.075]实验室4:子区间:[0.075,0.1].....实验室40:子区间(0.975,1):实验1:子区间[0,0.025):积分:0.0999792实验2:子区间:[0.025,0.05]积分:0.0998544实验3:子区间:[0.05,0.075]积分:0.0996058实验室4:子区间:[0.075,0.1]积分:0.0992352.....实验室40:子区间(0.975,1):积分:0.0506302pi: 3.141592653589793116近似:3.141592653589793116错误:0推荐- - - - - -日记——结束

多个MATLAB版本

有多个版本的MATLAB在玛蒂尔达集群。才能发现什么才是有价值的,仅仅使用:

模块av MATLAB

集群工作,只需加载所需的版本,进行描述。

off-cluster的工作,您将需要确保下载和安装的版本对应MATLAB在玛蒂尔达,您希望使用的版本。与先前的版本和安装像如前所述。

重要的是:利用MATLAB的新版本需要下载的最新版本off-cluster集成脚本并使用这些配置MATLAB上面描述的。这已经完成后,选择“平行- >创建和管理集群“将弹出一个窗口显示集群/版本可用的配置,如下所示:

ClusterConfig.png”class=

最新版本的集群配置的MATLAB应该默认选中。如果不是,请选择正确的版本off-cluster工作开始之前。可以有一个以上的MATLAB在您的工作站的安装版本,或者您可以简单地取代旧版本和新版本。如果您使用多个版本,请在您的工作站运行相同的版本,您希望使用集群,并确保选择适当的集群配置。

简要介绍GPU的工作

在以下示例中,我们演示的方式执行下面的代码使用MATLAB和GPU (gpuTest.m):

X = [15:15 0 15:15 0 15:15];gpuX = gpuArray (X);谁gpuXgpuE = expm(诊断接头(gpuX 1)) * expm(诊断接头(gpuX 1));gpuM =国防部(圆(abs (gpuE)), 2);gpuF = gpuM + fliplr (gpuM);显示亮度图像(gpuF);imwrite (gpuF myimage.png)colormap(翻转(灰色));结果=收集(gpuF);谁的结果

产生的图像文件”框模板。png”所示:

  • myimage.png”class=

这个工作可以使用工作运行脚本,可能类似于:

# #工作脚本示例# ! / bin / bash--login# SBATCH——作业名= matlabGPU= 1 # SBATCH——节点# SBATCH——ntasks = 1# SBATCH——cpus-per-task = 1# SBATCH——格蕾丝/ gpu: 1# = 01:00:00 SBATCH——时间cd ~MATLAB模块加载matlab -nodisplay - r gpuTest

或者,我们也可以从桌面运行这个(off-cluster),通过一个小改变代码:

X = [15:15 0 15:15 0 15:15];gpuX = gpuArray (X);谁gpuXgpuE = expm(诊断接头(gpuX 1)) * expm(诊断接头(gpuX 1));gpuM =国防部(圆(abs (gpuE)), 2);gpuF = gpuM + fliplr (gpuM);显示亮度图像(gpuF);imwrite (gpuF ' /划痕/用户/ someuser / myimage.png ')colormap(翻转(灰色));结果=收集(gpuF);谁的结果

注意我们已经添加了一个完整路径的集群”模板。png”(抓空间)。然后在我们的桌面MATLAB窗口:

> > c = parcluster;> > c.AdditionalProperties.GpusPerNode = 1;> > j = c.batch (‘gpuTest’,‘AutoAddClientPath’,假);

交互式GPU的工作

还可以运行的MATLAB GUI交互计划工作会议在玛蒂尔达的GPU节点。

为了启动MATLAB GUI有必要建立一个- windows会话连接玛蒂尔达:

ssh - x(电子邮件保护)

首先,我们必须要求集群分配任务资源:

salloc - n - c 1 - t 30:00——格蕾丝= gpu: 1

注意,通过指定”,格蕾丝= gpu: 1“我们通知粘,我们需要一个节点至少有很多1 gpu。

在发出“salloc”命令一次分配消息将显示工作计划(其次是message-of-the-day)。

29807年salloc:授予的工作分配

因为“srun”玛蒂尔达没有- windows会话转发功能,需要手动使用SSH登录到分配的节点。首先,确定哪些节点已经分配我们的工作:

squeue - u <用户名>

我们可能会看到类似如下:

JOBID分区名称用户圣时间节点节点列表(原因)29814年defq bash someuser R 0:11 1 hpc-gpu-p02

在这个例子中,我们已经分配给“hpc-gpu-p02”。我们现在可以登录使用x会话:

ssh - x hpc-gpu-p02

一旦登录,加载MATLAB模块和MATLAB开始:

MATLAB模块加载matlab

重要的是:当你使用MATLAB在交互模式下,关闭MATLAB GUI,并输入“退出”离开指定的节点,然后再输入“退出”(从登录节点)释放分配的资源“salloc”。

还可以运行一个非gui交互MATLAB的工作。可以以同样的方式与其他互动,基于命令行工作。不需要特殊的x会话或X-forwarding。请参见部分运行互动工作玛蒂尔达的更多信息。

更多的信息

有关并行集群计算和MATLAB的更多信息,请参阅下面的参考资料:


CategoryHPC