如何并行运行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.m脚本,它使用Matlab的神经网络工具箱设置和训练神经网络(“nn”)。脚本启动一些GUI,显示训练进度等。nn的训练通常需要很长时间

我在64核处理器的计算机上做这些实验。我想同时训练几个网络,而不必运行多个Matlab会话。 所以我想:

  • 开始训练神经网络
  • 修改创建网络的脚本以创建不同的网络
  • 开始修改网络的培训
  • 修改脚本以创建另一个网络
  • 重复步骤1-4数次
  • 问题是,当我运行scrip时,它会阻塞Matlab终端,因此在脚本执行其最后一个命令之前,我无法执行任何其他操作—这需要很长时间。如何并行运行所有这些计算?我有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