如何并行运行MATLAB计算



i具有MATLAB .M脚本,该脚本使用MATLAB的Neural Network Toolbox设置和训练神经网络(" NN")。该脚本推出了一些GUI,显示了Trainig进度等。NN的培训通常需要很长时间。

我正在用64个处理器内核在计算机上进行这些实验。我想同时培训多个网络,而不必进行多个MATLAB会议。所以我想:

  1. 开始培训神经网络
  2. 修改脚本创建网络以创建不同的网络
  3. 开始修改网络的培训
  4. 修改脚本以创建另一个网络...
  5. 重复步骤1-4几次

问题在于,当我运行脚本时,它会阻止MATLAB终端,因此直到脚本执行其最后一个命令,我才能做任何其他事情 - 这需要很长时间。如何并行运行所有这些计算?我确实有MATLAB并行工具箱。


编辑:matlab错误??

更新:此问题似乎仅在R2012A上发生,看起来像R2012B上的修复。

当我尝试在EDRIC答案中推荐的命令序列时,有非常奇怪的错误。这是我的代码:

 >> 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的第27-37行(MATLAB神经网络工具包),其中错误起源于:

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(因为不可用)无法使用。奇怪的是,nn函数不会以当前形式启动任何GUI。错误是由默认启动GUI的火车引起的,但在nn中,我已关闭了该Gie:

net.trainParam.showWindow = false;
net = train(net, X, y);

更有趣的是,如果正常启动相同的nn函数(>> nn(A(:, 1:end -1), A(:, end));),它永远不会进入第27行上nntraintool的语句的外部(我已经使用DEBUGGER检查了该语句)。因此,使用相同的函数,同一参数表达式 ~usejava('swing')在正常启动时评估 0,但使用 batch启动时为1。

您对此有何看法?看起来像丑陋的matlab或神经网络工具箱bug :(((((

使用并行计算工具箱,您可以运行多达12个'本地工人'来执行脚本(要运行更多的是,您需要购买其他MATLAB分布式计算服务器许可证)。鉴于您的工作流程,最好的事情可能是使用批处理命令提交一系列非交互式作业。请注意,您将无法从工人那里看到任何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

请注意,批处理命令会自动将脚本的副本附加到作业上,以便您在提交后可以自由更改它。

最新更新