通过在远程集群上运行模拟,从计算机上卸载工作
最近,我注意到,当我在“当前文件夹浏览器”中右键单击MATLAB脚本时,有一个选项可以将脚本作为批处理作业运行。
你可以猜到,我想到的第一件事是:我想模拟一个Simulink模型!金宝app
让我们看看我想到了什么。
背景
对于不熟悉的人并行计算工具箱,你可能会想:什么是批处理作业?
作为这里介绍的,批处理命令可以在后台启动一个新的MATLAB会话,并在那里运行一个脚本或函数。然后,您可以继续在当前的MATLAB会话中工作,而不需要等待脚本完成。
除了并行计算工具箱,如果您还可以访问MATLAB分布式计算服务器时,可执行批作业一个远程集群,使计算机的所有计算能力都用于执行其他任务。
我的解决方案
我认为在当前文件夹浏览器的右键菜单中添加条目是不可能的,所以我决定使用sl_customization文件以添加新的模拟为批处理作业在Simulink编辑器的Simulation菜单中。金宝app
我将菜单项与以下函数关联起来:
让我们看看它能做什么以及为什么。
文件的依赖关系
如果您尝试在远程集群上模拟模型,首先会注意到的一件事是您的工作通常依赖于许多文件。
如果您的远程集群可以访问与本地MATLAB相同的文件系统,我建议您充分利用这一点,它将大大简化您的工作。只需将相同的路径添加到批处理作业中,就可以帮助避免丢失任何文件依赖项。
在我的例子中,我有一台Windows工作站,集群操作系统是Linux,它们不共享公共文件系统。这意味着我需要将文件附加到作业。的批处理命令能够分析代码的依赖项并自动将文件附加到作业。然而,这个功能在Simulink模型中并不能很好地工作。金宝app
正因为如此,我做的第一件事就是打电话dependencies.fileDependencyAnalysis找到模拟我的模型所需的所有文件。在我正在处理的示例中,它找到模型preLoadFcn回调中使用的初始化脚本、模型本身和引用的模型。
在正确的地方获取数据
正如我在之前的帖子在美国,通过并行计算工具箱使用Simulink时,让它看到所需的数据有时金宝app是很棘手的。有帮助的一件事是通过使用将模型所需的数据强制放到基本工作区中evalin或assignin.
为了让模型使用我的菜单项,模型需要自己创建所需的所有数据,并将其放置在基本工作区中。我推荐的方法是通过模型preLoadFcn回调.
创建工作
现在可以创建批处理作业了。我通过批处理集群在哪里运行,句柄到sim卡命令,通知它sim卡将返回一个变量,并将模型名作为输入。我告诉它不要试图分析我的文件,并自动附加它们。相反,我将上面提到的文件列表传递给它。最后,我告诉它不要尝试cd到我的Windows工作站的当前目录…因为它在Linux集群中不存在。
最后,在本地基本工作区中分配批处理作业对象。
任务完成后,使用fetchOutputs方法检索仿真输出
一些小技巧……
当您第一次尝试模拟您的模型时,很可能会遇到各种各样的问题。由于并行工作程序是在后台运行的,所以有时调试起来就像是被蒙住了眼睛。以下是我喜欢使用的一些技巧:
- 要了解工作器上发生了什么问题,请尝试在工作器命令提示符上显示信息。方法完成作业时,您将能够对其进行可视化日记函数。之类的函数松材线虫病,谁而且dir通常是很好的起点。
- 如果您的Simu金宝applink模型错误,请尝试放置sim卡在try-catch语句中执行命令,并将错误作为输出返回,而不是模拟日志。有时错误消息包含很多级别,获取完整的错误对象应该会有所帮助。
- 要在工作者上交互地调试问题,请尝试使用usingpctRunOnAll.与上面的日记提示类似,尝试运行以下命令松材线虫病,谁,dir等,以诊断可能的问题。
现在轮到你了
我们目前正在开发一些特性,以促进未来版本的工作流程,但对于当前版本,我希望这篇博客文章将帮助您利用您的集群来运行模拟。
我不能保证我sl_customization将适用于所有模型,但我相信它将适用于许多设置。如果没有,我希望这可以作为您在远程集群上模拟模型的起点。
给它一个尝试,让我们知道它是如何进行的这里的评论
- 类别:
- 性能
评论
如欲留言,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。