我在尝试将Keras与三个GPU一起使用时遇到了问题。
我的伪码如下:
import keras
import keras.models as M
from keras.utils import multi_gpu_model
i = M.Input(None,None,6)
o1,o2,o3 = my_Network(i)
net = M.Model(inputs = i, outputs = [o1,o2,o3])
net = multi_gpu_model(net,gpus = 3)
net.compile( ~~~~~ )
net.fit(~~~~~ )
我的代码正在训练我的网络,但是,只使用了一个GPU。
我的配置如下:
keras:2.3.1
tensorflow:2.1.0
Cuda:10.0
窗口:10
GPU:特斯拉100 x 3(VRAM:32GB x 3(
错误在哪里?
我使用以下代码解决了问题:
str = tf.distribute.MirroredStrategy(devices=["/gpu:0","/gpu:1", "/gpu:2"])
with str.scope():
epsnet = M.Model(inputs = [img_in,img_lv],outputs = [out_d,out_s,out_l])
epsnet = multi_gpu_model(epsnet,gpus=3)
希望这能给你一些启发。感谢所有回复者。
在执行fit时,必须考虑批量大小。您在这里没有显示这一点,但您需要确保给它一个可以被3整除的批量大小,以便在您的3个GPU中并行化它。例如,如果您给它的批量大小为1,它将无法在GPU之间分配培训。
您没有提供太多信息,但根据您对multi_gpu_model的执行,我没有发现任何明显的错误。