如何并行运行Matlab计算
我有Matlab.m脚本,它使用Matlab的神经网络工具箱设置和训练神经网络(“nn”)。脚本启动一些GUI,显示训练进度等。nn的训练通常需要很长时间 我在64核处理器的计算机上做这些实验。我想同时训练几个网络,而不必运行多个Matlab会话。 所以我想:如何并行运行Matlab计算,matlab,parallel-processing,backgroundworker,background-process,Matlab,Parallel Processing,Backgroundworker,Background Process,我有Matlab.m脚本,它使用Matlab的神经网络工具箱设置和训练神经网络(“nn”)。脚本启动一些GUI,显示训练进度等。nn的训练通常需要很长时间 我在64核处理器的计算机上做这些实验。我想同时训练几个网络,而不必运行多个Matlab会话。 所以我想: 开始训练神经网络 修改创建网络的脚本以创建不同的网络 开始修改网络的培训 修改脚本以创建另一个网络 重复步骤1-4数次 问题是,当我运行scrip时,它会阻塞Matlab终端,因此在脚本执行其最后一个命令之前,我无法执行任何其他操作—这需
编辑:Matlab错误?? 更新:此问题似乎只发生在R2012a上,似乎已在R2012b上修复 当我尝试中推荐的命令序列时,出现了非常奇怪的错误。 这是我的密码:
>> job = batch(c, @nn, 1, {A(:, 1:end -1), A(:, end)});
>> wait(job);
>> r = fetchOutputs(job)
Error using parallel.Job/fetchOutputs (line 677)
An error occurred during execution of Task with ID 1.
Caused by:
Error using nntraintool (line 35)
Java is not available.
以下是产生错误的nntraintool
(Matlab神经网络工具箱的一部分)的第27-37行:
if ~usejava('swing')
if (nargin == 1) && strcmp(command,'check')
result = false;
result2 = false;
return
else
disp('java used');
error(message('nnet:Java:NotAvailable'));
end
end
因此,问题似乎在于,当使用batch
命令执行作业时,无法使用GUI(因为Swing不可用)。奇怪的是,nn
函数没有以当前形式启动任何GUI。该错误是由默认情况下启动GUI引起的,但在nn
中,我已将其关闭:
net.trainParam.showWindow = false;
net = train(net, X, y);
更有趣的是,如果相同的nn
函数正常启动(>nn(A(:,1:end-1),A(:,end));
),它就不会进入第27行的nntraintool
的外部if-then语句(我已经使用调试器检查过了)。因此,使用相同的函数,相同的参数表达式~usejava('swing')
在命令正常启动时计算为0
,但在使用batch
启动时计算为1
你觉得这个怎么样它看起来像是丑陋的Matlab或神经网络工具箱错误(((使用并行计算工具箱,您最多可以运行12个“本地工人”来执行您的脚本(要运行更多,您需要购买额外的许可证)。根据您的工作流,最好使用该命令提交一系列非交互式作业。请注意,您将无法从workers中看到任何GUI。您可以执行以下操作(使用R2012a+语法):
请注意,批处理命令会自动将脚本的副本附加到作业中,以便您在提交后可以对其进行更改。当我尝试重新污染时,出现了一个非常奇怪的错误。我已更新了我的问题以显示详细信息。请查看它并写出您的想法。因此,我发现这是R2012a版本的唯一问题。看起来它在R2012b上工作正常。这里有一个nntraintool的错误报告,包括R2012a解决方法。正如您所观察到的,它在R2012b中已修复。
c = parcluster('local'); % get the 'local' cluster object
job = batch(c, 'myNNscript'); % submit script for execution
% now edit 'myNNscript'
job2 = batch(c, 'myNNscript'); % submit script for execution
...
wait(job); load(job) % get the results