向HPC提交matlab串行作业

时间:2015-07-28 12:59:41

标签: matlab hpc

我想使用以下方法在HPC服务器上提交串行matlab脚本:

代码:

#!/bin/bash 
#$ -N matlabjob 
#$ -q all.q 
#$ -pe mpi 1 
/opt/matlab/bin/matlab -nodesktop -nosplash -r "run /home/abhishekb/Matlab/new.m;quit" > out.txt

错误:

License checkout failed.
License Manager Error -15
MATLAB is unable to connect to the license server. 
Check that the license manager has been started ,and that the MATLAB client machine can communicate
with the license server.
Troubleshoot this issue by visiting: 
http://www.mathworks.com/support/lme/R2013b/15
Diagnostic Information:
Feature: MATLAB 
License path: /home/abhishekb/.matlab/R2013b_licenses:/opt/matlab/licenses/license.dat:/opt/matlab/licenses/networ
k.lic 
Licensing error: -15,570. System Error: 115

但这不起作用,因为IT人告诉我“ 因为我们没有分布式计算许可证所以matlab的并行作业无法运行“。

所以我尝试将它作为背景运行:

#!/bin/bash
nohup /opt/matlab/bin/matlab -nodesktop -nosplash -r "run /home/abhishekb/Matlab/New_edited3.m;quit" > output.log </dev/null &
echo $! > save_pid.txt

但似乎运行速度令人难以忍受。即使阅读.csv文件也需要时间。我只是根据输出间隔来比较我的电脑上的运行。

有人可以帮我提交一份不需要“matlab的分布式计算许可证”的串行作业。如果这是有道理的。

我使用qsub提交工作。

编辑:

>>  mcc -m automate.m
Undefined function 'mcc' for input arguments of type 'char'.
>> ver
------------------------------------------------------------------------------**strong text**----------------------
MATLAB Version: 8.2.0.701 (R2013b)
MATLAB License Number: _______
Operating System: Linux 2.6.32-431.11.2.el6.x86_64 #1 SMP Tue Mar 25 19:59:55 UTC 2014 x86_64
Java Version: Java 1.7.0_11-b21 with Oracle Corporation Java HotSpot(TM) 64-Bit Server VM mixed mode
----------------------------------------------------------------------------------------------------
MATLAB                                                Version 8.2        (R2013b)
Simulink                                              Version 8.2        (R2013b)
Bioinformatics Toolbox                                Version 4.3.1      (R2013b)
Communications System Toolbox                         Version 5.5        (R2013b)
Computer Vision System Toolbox                        Version 5.3        (R2013b)
Control System Toolbox                                Version 9.6        (R2013b)
Curve Fitting Toolbox                                 Version 3.4        (R2013b)
DSP System Toolbox                                    Version 8.5        (R2013b)
Fixed-Point Designer                                  Version 4.1        (R2013b)
Global Optimization Toolbox                           Version 3.2.4      (R2013b)
Image Processing Toolbox                              Version 8.3        (R2013b)
Neural Network Toolbox                                Version 8.1        (R2013b)
Optimization Toolbox                                  Version 6.4        (R2013b)
Parallel Computing Toolbox                            Version 6.3        (R2013b)
Partial Differential Equation Toolbox                 Version 1.3        (R2013b)
RF Toolbox                                            Version 2.13       (R2013b)
Signal Processing Toolbox                             Version 6.20       (R2013b)
SimBiology                                            Version 4.3.1      (R2013b)
Statistics Toolbox                                    Version 8.3        (R2013b)
Symbolic Math Toolbox                                 Version 5.11       (R2013b)
Wavelet Toolbox                                       Version 4.12       (R2013b)
>>

2 个答案:

答案 0 :(得分:3)

tl;博士:让你的&#34; IT人员#34;解决这个问题。我们不能。

我可能会因为我更好的判断而回答这个问题。

您正在提交作业&#34;连续&#34;因为#$ -pe mpi 1选项指定您只需要1个节点。您的Matlab代码无法运行的原因是HPC上Matlab许可证服务器的配置存在问题。除了修复配置之外,没有解决方法。 Mathworks为您提供调试的起点。但是,您很可能无法满足并且需要您的#34; IT人员#34;或者那些管理你的HPC的人。

要在后台提交作业时添加到此处,您还可以连续提交#34;&#34;。它运行起来非常慢,因为它运行在1核心上,这可能也处理来自其他用户的请求,因为这就是所谓的头(或登录)节点。相比之下,当您在自己的计算机上执行此代码时,它很可能利用多个核心而不是头节点上可用的单核心。

感谢@ Andras Deak回答question in my comment,这使我能够在他的帮助下推理出答案。

答案 1 :(得分:1)

解决此问题的方法之一是使用mcc编译Matlab代码来创建可执行文件

示例:

我们需要将脚本转换为函数,让我们假设new.m执行一个简单的hello world

for iter = 1 : 10
fprintf('Hello, world %d \n', iter);
end

到函数

function hello
for iter = 1 : 10
fprintf('Hello, world %d \n', iter);
end

然后使用mcc生成可执行文件。

mcc -m new.m 

这会生成文件:new, new_main.c, new_mcc_component_data.c, new.prj 并且可执行文件是new

您现在可以像在Linux中的任何其他可执行文件一样运行new。

如果您使用调度程序提交作业,则可以将可执行文件new作为要在提交脚本中调用的命令。