我已获准访问运行 PBS 的集群,我想在其上运行进化算法 (EA)。
对于那些不熟悉 EA 的人,维基百科将其总结为:
第一部分:随机生成初始个体群体(第一代)。
第二部分:重复以下步骤直到终止:
- 评估群体中每个个体的适应度
- 选择最适合繁殖的个体(父母)
- 通过交叉和变异操作繁殖新个体以产生后代。
- 用新个体替换人口中最不适合的个体。
评估个人的健康状况可能需要长达 1 小时,并且在具有专用硬件 (Xeon Phi) 的节点上运行。其他一切都相对便宜(可以在单个 CPU 上不到 60 秒的时间内执行)。
我打算做的是:
在我自己的计算机上生成初始种群并将其上传到集群,然后启动一个作业“ea_loop”:
- 启动 N 个工作,其中 N = 人口中个体的数量,以评估个体的适应度。
- 每 60 秒检查一次是否所有作业都已完成。
- 完成所有作业后,执行 EA 第二部分的步骤 2、3 和 4。
- 检查是否满足终止条件,如果不满足则转到 1。
我的主要问题是:似乎我无法启动子作业,当我尝试启动它们时收到以下错误消息。
qsub:作业执行的错误 UID
我对此进行了谷歌搜索,但几乎所有点击都与工作依赖性有关,我认为这不是一个适当的解决方案。最简单的方法是在头节点中运行“ea_loop”,但是头节点上的计算是不受欢迎的(并且可能是不允许的)。我该怎么办?
我的次要问题与我计划的解决方案的不雅有关。每 60 秒检查一次作业是否完成有点臭;有没有办法使用某种回调?