如何解决Keras中的模型并行性
我正在尝试在Keras中实现模型并行性。
我正在使用Keras-2.2.4 Tensorflor-1.13.1
我的代码的粗略结构是: 将tensorflow作为tf导入 进口喀拉拉邦
def model_definition():
input0 = Input(shape = (None,None))
input1 = Input(shape = (None,None))
with tf.Session(config=tf.ConfigProto(allow_soft_placement=False,log_device_placement=True)):
model = get_some_CNN_model()
with tf.device(tf.DeviceSpec(device_type="GPU",device_index=0)):
op0 = model(input0)
with tf.device(tf.DeviceSpec(device_type="GPU",device_index=1)):
op1 = model(input1)
with tf.device(tf.DeviceSpec(device_type="CPU",device_index=0)):
concatenated_ops = concatenate([op0,op1],axis=-1,name = 'check_conc1')
mixmodel = Model(inputs=[input0,input1],outputs = concatenated_ops)
return mixmodel
mymodel = model_definition()
mymodel.fit_generator()
预期结果:训练时,应分别在gpu0和gpu1上进行op0和op1的计算。
问题1:当我有2个GPU可用时,训练工作正常。 nvidia-smi显示两个GPU都在使用。虽然我不确定两个GPU是否都按预期进行工作。如何确认? 因为,即使我将log_device_placement设置为True,我也看不到分配给GPU 1的任何任务
问题2:当我在具有1个GPU的机器上运行此代码时,它仍然可以正常运行。预计会显示错误,因为GPU 1不可用。
此处显示的示例按预期工作正常。它没有显示问题2,即在单个GPU上会引发错误。
所以我认为喀拉拉邦内部正在发生一些操纵。
我还尝试使用import tensorflow.python.keras而不是import keras,以防引起任何冲突。 但是,这两个问题仍然存在。
将感谢您提供有关此问题的任何线索。谢谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。