Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 大型线性规划的Mosek记忆问题_Matlab_Mosek - Fatal编程技术网

Matlab 大型线性规划的Mosek记忆问题

Matlab 大型线性规划的Mosek记忆问题,matlab,mosek,Matlab,Mosek,我使用MOSEK在Matlab中运行一个非常大的线性规划问题(32768个未知数和691621个约束)。 代码在基于Linux的集群中提交。 在bash文件中,我请求以下内存量: #$ -l h_vmem=20G #$ -l tmem=20G 但是获取Mosek错误:MSK_RES_ERR_SPACE(空间不足)。 我可以请求更多的内存(但是,不清楚还有多少内存?),但这将意味着在集群中排队很长时间 因此,我想知道我是否可以尝试以其他方式改善这个问题 1)引用一些MOSEK常见问题: Java

我使用MOSEK在Matlab中运行一个非常大的线性规划问题(32768个未知数和691621个约束)。 代码在基于Linux的集群中提交。 在bash文件中,我请求以下内存量:

#$ -l h_vmem=20G
#$ -l tmem=20G
但是获取
Mosek错误:MSK_RES_ERR_SPACE(空间不足)。

我可以请求更多的内存(但是,不清楚还有多少内存?),但这将意味着在集群中排队很长时间

因此,我想知道我是否可以尝试以其他方式改善这个问题

1)引用一些MOSEK常见问题:

Java, .NET, amd Python applications runs under a virtual machine. MOSEK shares memeory
with the virtual machine. This implies it might be necessary to force the virtual machine to
free unused memory by explicitly calling the garbage collector (for example before optimization
is performed) in order to make sufficient memory available to MOSEK.
这个建议有用吗?调用垃圾收集器意味着什么(例如,我应该在Matlab代码中添加哪一行?)

2)From(尽管这是针对Python的),它建议设置

Task.putmaxnumvar. Estimate for the number of variables.
Task.putmaxnumcon. Estimate for the number of constraints.
Task.putmaxnumcone. Estimate for the number of cones.
Task.putmaxnumbarvar. Estimate for the number of semidefinite matrix variables.
Task.putmaxnumanz. Estimate for the number of non-zeros in A.
Task.putmaxnumqnz. Estimate for the number of non-zeros in the quadratic terms.
我可以在Matlab中实现吗?怎么做

3)From:“如果在1个线程上运行,将在一定程度上减少内存消耗(在cvx解算器选项中将MSK_IPAR_NUM_THREADS设置为1,或将MSK_IPAR_INTPNT_MULTI_thread设置为0)”

这也可以在Matlab中实现吗?我试过了

param_MOSEK.MSK_IPAR_NUM_THREADS = 1;
param_MOSEK.MSK_IPAR_INTPNT_MULTI_THREAD = 'MSK_OFF';
但它似乎不起作用,因为输出文件仍然提供

Optimizer  - threads                : 16              
Optimizer  - solved problem         : the dual        
...

对以下问题的评论:

  • 代码在我的MacOS 64位中运行,使用16个线程只需180秒。这个 计算机内存为32 GB 2667 MHz DDR4。它的用量远低于20克(约9克)

  • 在请求20G vmem和tmem后,在我的大学(基于Linux)的集群上运行代码时失败。在集群中,MOSEK执行预解,即基于GP的矩阵重新排序,然后失败。这是一个典型的日志文件

9月9日星期三08:10:47英国夏令时2020 任务ID为6

                            < M A T L A B (R) >
                  Copyright 1984-2019 The MathWorks, Inc.
              R2019b Update 3 (9.7.0.1261785) 64-bit (glnxa64)
                             November 27, 2019
 
For online documentation, see https://www.mathworks.com/support
For product information, visit www.mathworks.com.
 

MOSEK Version 9.2.5 (Build date: 2020-4-22 22:56:56)
Copyright (c) MOSEK ApS, Denmark. WWW: mosek.com
Platform: Linux/64-X86

Problem
  Name                   :                 
  Objective sense        : min             
  Type                   : LO (linear optimization problem)
  Constraints            : 691597          
  Cones                  : 0               
  Scalar variables       : 32768           
  Matrix variables       : 0               
  Integer variables      : 0               

Optimizer started.
Presolve started.
Linear dependency checker started.
Linear dependency checker terminated.
Eliminator started.
Freed constraints in eliminator : 0
Eliminator terminated.
Eliminator - tries                  : 1                 time                   : 0.00            
Lin. dep.  - tries                  : 1                 time                   : 0.33            
Lin. dep.  - number                 : 0               
Presolve terminated. Time: 2.99    
GP based matrix reordering started.
GP based matrix reordering terminated.
Optimizer terminated. Time: 20.15   


Interior-point solution summary
  Problem status  : UNKNOWN
  Solution status : UNKNOWN
  Primal.  obj: 0.0000000000e+00    nrm: 1e+00    Viol.  con: 1e+00    var: 0e+00  
  Dual.    obj: 0.0000000000e+00    nrm: 0e+00    Viol.  con: 0e+00    var: 0e+00  
Optimizer summary
  Optimizer                 -                        time: 20.15   
    Interior-point          - iterations : 0         time: 19.95   
      Basis identification  -                        time: 0.00    
        Primal              - iterations : 0         time: 0.00    
        Dual                - iterations : 0         time: 0.00    
        Clean primal        - iterations : 0         time: 0.00    
        Clean dual          - iterations : 0         time: 0.00    
    Simplex                 -                        time: 0.00    
      Primal simplex        - iterations : 0         time: 0.00    
      Dual simplex          - iterations : 0         time: 0.00    
    Mixed integer           - relaxations: 0         time: 0.00    

Mosek error: MSK_RES_ERR_SPACE (Out of space.)

版权所有1984-2019 MathWorks公司。
R2019b更新3(9.7.0.1261785)64位(glnxa64)
2019年11月27日
有关联机文档,请参阅https://www.mathworks.com/support
有关产品信息,请访问www.mathworks.com。
MOSEK版本9.2.5(构建日期:2020-4-22 22:56:56)
版权所有(c)MOSEK ApS,丹麦。WWW:mosek.com
平台:Linux/64-X86
问题
姓名:
客观感觉:敏
类型:LO(线性优化问题)
限制条件:691597
锥体:0
标量变量:32768
矩阵变量:0
整数变量:0
优化器已启动。
预溶开始。
线性依赖项检查器已启动。
线性依赖项检查器已终止。
消除器启动了。
删除程序中释放的约束:0
消除器终止。
消除器-尝试次数:1次:0.00
林副部长-尝试次数:1次:0.33
林部-编号:0
预溶终止。时间:2.99
基于GP的矩阵重新排序已开始。
基于GP的矩阵重新排序终止。
优化器终止。时间:20:15
内点解综述
问题状态:未知
解决方案状态:未知
原始的。对象:0.0000000000 E+00 nrm:1e+00 Viol。con:1e+00变量:0e+00
二重的对象:0.0000000000 E+00 nrm:0e+00 Viol。con:0e+00变量:0e+00
优化器摘要
优化器-时间:20.15
内部点-迭代次数:0时间:19.95
基准识别-时间:0.00
原始-迭代次数:0时间:0.00
双迭代:0次:0.00
清理原始-迭代次数:0时间:0.00
清理双迭代:0时间:0.00
单工-时间:0.00
原始单纯形-迭代次数:0次:0.00
双单纯形-迭代次数:0次:0.00
混合整数-松弛:0时间:0.00
Mosek错误:MSK_RES_ERR_SPACE(空间不足)
  • 在Matlab中是不相关的

  • 在Matlab中是不相关和不可能的。MEX接口一次性将问题反馈给Mosek,并自行处理所有分配

  • 要尊重MSK_IPAR_NUM_线程,必须重新启动整个过程,即Matlab。看见但是,当您将MSK_IPAR_INTPNT_MULTI_THREAD设置为'MSK_OFF'时,Mosek将使用1个线程,而不考虑所有可用线程的数量,即打印到日志中的数字只是一个上限。您应该能够在task manager/top/中看到其他任何只有1CPU在使用的CPU负载跟踪器


  • 基本问题是:您是否尝试过在没有任何内存限制的情况下运行该问题,以查看它是否有效并估计内存消耗?它是否在其他机器上运行?

    在集群上,当您以完整日志输出运行时,它会说什么?该错误是否立即发生,或者在日志中得到一些求解器输出,然后终止在中间的某个地方?如果是这样的话,它能走多远?没有这些信息,很难调试任何东西。谢谢。我在问题的末尾添加了一些与您的问题相关的评论。我想知道问题是否可能是我被分配到一台有许多内核的机器上,MOSEK试图使用所有的内核,这需要大量内存?@user3285148我将开始尝试将线程数固定为1,然后看看如何进行。@user3285148只是为了关闭它,我可以问一下群集计算机有多少核吗?我认为减少线程数量有助于解决这个问题?是的,对于4个内核和10G内存,它似乎可以工作。