并行优化挂在getcompleteinterval上

50次观看(过去30天)
塞缪尔纳森
塞缪尔纳森 2020年3月30日
评论: 浸塑金于2021年5月31日在14:30
我正在使用带有Parpool的CloudCentre群集,优化运行直到突然挂起。代码并不总是悬挂,但是9/10次。疑似死锁,但我确保了每个工人都有它所需的文件。在它挂起之后,我可以用CTR-C退出,但我必须重新启动服务器,以便再次获得优化运行,否则它挂起了等待池准备就绪。
init code.
c = parpool (“AttachedFiles”,{“OptimiseModel.m”'deceasing_amplitude_01.mat''armmodelv2.slx''mapdata.m'“sim_model_test.m”'slprj'});
Mpisettings(“DeadlockDetection”'上'
Mpisettings(“MessageLogging”'上'
Mpisettings(“MessageLoggingDestination”“CommandWindow”
我的obj函数优化模型运行的simulink模型与通过的值从粒子群算法万博1manbetx
如果init == true
思敏= MapData;
init = false;
结尾
simOut = sim(思);
rmse = simout.get(“rmse”);
每个工人都有自己的SIMIN副本,init东西是一个黑客,以便通过客户实例进行评估,以便在inclictleswarm algo的开头发生一次。(不知道为什么)
SPMD.
模型= load_system (“ArmModelV2”);
set_param(型号,“SimulationCommand”“停止”
set_param(型号,'fastrestart''上');
set_param(型号,'simulationmode'“加速器”);
set_param(型号,“AccelVerboseBuild”'上'
simin = mapdata();
结尾
~~~~~~~~~~~~
有趣= @ (x) OptimiseModel (init、MCV_B x (1), (2) x (3) x (4) x (5), VMO_B, x (6), x (7), x (8), MCV_T, x (9), x (10), x (11),......
x(12),x(13),Vmo_t,x(14),x(15),x(16),x(17),x(18),x(19),x(20),x(21),x(22),x(23),x(24),x(25),x(26),x(27));
选择= optimoptions ('particleswarm''使用指平行',真的,'undervectorized'假的,“PlotFcn”'pswplotbestf');
[x,rmse_best] = particleswarm(fun,27,lb,Ub,选项);
一切看起来都很好,直到worker突然停止运行obj函数,代码挂在这里,这是remoteparfor的一部分:
isempty(r)
断言(obj.numintvalsincontroller> 0,......
'屏幕中的内部错误 - 无法检索间隔。);
r = q.poll(1,TimeUnitseconds);
obj.displayoutput();
为什么?有谁能够帮我?如果需要,可以提供更多代码(我没有包括最多的是无关紧要的 - 至少我认为是这样的)。关于进一步调试战略的任何建议也会很棒。
谢谢很多!
编辑代码在串行工作
1条评论
塞缪尔纳森
塞缪尔纳森 2020年4月1日
进一步调查显示,即使在从https://uk.mathworks.com/help/simulink/ug/not-recommended-using-sim-cunction-within-parfor的指令修改particleswarm parcom的ParmulesWarm areComents,即使在修改ParticleSwar万博1manbetxm栏),也会崩溃。HTML #BRSK7NJ查看一种方法来重新启动Workers /取消并重新启动工人的工作。

登录评论。

答案(1)

Edric埃利斯
Edric埃利斯 2020年3月31日
一些笔记:
  1. 死锁检测用于拉布德LabReceive.。你的并行代码正在使用议案。没有办法议案可以遇到循环死锁,因为在循环的主体上运行的工人不会彼此通信(除了可能通过文件系统)。(写作时拉布德LabReceive.里面的代码SPMD., 你可以写一个循环死锁,这就是死锁检测设置可以帮助您发现的)。
  2. 你的mpiSettings调用应该在工人上运行-即在SPMD.堵塞。(但是见点(1) - 我认为他们不相关)
  3. 该方法GetCompleteItervals.是完全正常的一部分吗议案操作——这是客户端等待工作者返回其结果的地方。你能从等待的客户中推断出的唯一一件事是工人们还没有完成他们的工作议案然而循环迭代
  4. 我对你使用加速模拟模式表示怀疑。我不是专家,但我认为这可能会导致工作者通过文件系统相互干扰。
下面是我想尝试的:尝试运行一个大小为1的并行池。如果这解决了问题,那么可能工人们正在通过文件系统相互干扰。
你可以强迫工人在运行模拟之前临时改变到一个唯一的目录,像这样做:
%强制工人进入一个唯一的目录
SPMD.
myTempDir = tempname ();% tempname返回全局唯一的名称
oldWd = pwd ();
mkdir(mytempdir);
cd (myTempDir);
结尾
%……在parfor中运行东西
particleswarm();
%将工人恢复到原始工作目录中
SPMD.
cd (oldWd);
结尾
但这完全是在黑暗中摸索,没有复制的步骤,我可以尝试。
4评论
浸塑金
浸塑金 于2021年5月31日在14:30
我也遇到了同样的问题。使用并行计算(使用'parfor')的GA优化被困在下面的消息中:
r = q.poll(1,TimeUnitseconds);
obj.displayoutput();
你的问题现在解决了吗?

登录评论。

社区寻宝

找到Matlab Central中的宝藏,并发现社区如何帮助您!

开始狩猎!

翻译的