我有Matlab .m脚本,使用Matlab的神经网络工具箱设置和训练神经网络(“nn”)。该脚本启动了一些显示trainig进度的GUI .nn的训练通常需要很长时间。
我在64台处理器核心的计算机上进行这些实验。我想同时训练几个网络,而不必运行多个Matlab会话。 所以我想:
问题在于,当我运行脚本时,它会阻止Matlab终端,因此在脚本执行其最后一个命令之前我无法执行任何其他操作 - 这需要很长时间。如何并行运行所有这些计算?我有Matlab并行工具箱。
更新:此问题似乎只发生在R2012a上,看起来像R2012b上已修复。
当我尝试在Edric's answer中推荐的命令序列时,出现非常奇怪的错误。 这是我的代码:
>> 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的train引起的,但在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或神经网络工具箱错误:((
答案 0 :(得分:6)
使用Parallel Computing Toolbox,您最多可以运行12个“本地工作人员”来执行您的脚本(要运行更多,您需要购买额外的MATLAB Distributed Computing Server个许可证)。鉴于您的工作流程,最好的方法是使用BATCH命令提交一系列非交互式作业。请注意,您将无法看到工作人员的任何GUI。您可能会这样做(使用R2012a +语法):
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
请注意,BATCH命令会自动附加脚本副本以运行到作业,以便您在提交后可以自由地对其进行更改。