我在集群环境中将Keras与TensorFlow后端一起使用。
我不在网络上进行任何反向传播,而仅使用predict(...)
,layer.get_weights()
和layer.set_weights(...)
。
我正在直接操纵神经网络的参数,使用进化策略优化适应度函数。
我有一个母版,生成N个参数集(权重和偏差),然后使用MPI将其传递给工人。为此,我使用了mpi4py。然后,这些工作人员在自己的顺序模型实例(keras)上设置这些参数,并通过使用此网络预测动作来评估适应度函数。然后将适应度转移回主数据库,该主数据库将调整从中采样参数集的分布。
运行代码时,出现以下警告:
MPI进程执行了涉及到
fork()
系统调用以创建子进程。目前是开放式MPI 在可能导致内存损坏或 其他系统错误;您的MPI工作可能会挂起,崩溃或静音 数据损坏。使用fork()
(或system()
或其他调用 强烈建议不要创建子进程。
我实现了没有keras / tensorflow的算法版本,错误消失了。因此,我相信tensorflow正在执行system()
或fork()
调用。是否可以防止tensorflow进行此类调用?