初始化时出现tf.python.keras.utils.multi_gpu_model错误

时间:2019-01-30 12:01:40

标签: python tensorflow keras deep-learning multi-gpu

我正在使用带有tensorflow和多个gpu配置的python 3,我尝试使用following example来初始化多gpu模型,我创建了一个模型,可以正常运行,编译,运行和训练,但是当我尝试在模型编译之前添加此代码:

from tensorflow.python.keras.utils import multi_gpu_model
model = multi_gpu_model(model, gpus=2, cpu_merge=False)

我收到此错误

  

TypeError:int()参数必须是字符串或数字,而不是   'TensorShape'

请注意,我正在使用带有紧急评估功能的tf

我发现this指的是使用keras.utils.multi_gpu_model而不是tf.python.keras.utils.multi_gpu_model,但是当我这样做时,我得到了这个错误:

我在这里想念什么?

  

第217行,在multi_gpu_model中       与tf.device(x.device)一起使用:AttributeError:'DeferredTensor'对象没有属性'device'

该模型的代码是

model = Sequential()
model.add(Flatten(input_shape=(128, 128, 3)))
model.add(Dense(100, activation="sigmoid"))
model.add(Dense(100, activation="sigmoid"))

更新:这可能是GPU ID问题吗?当我尝试使用以下代码创建multi_gpu_model而不指定gpus计数时:

model = multi_gpu_model(model)

我收到以下错误:

  

ValueError:要用multi_gpu_model调用gpus=3,我们希望   以下设备可用:['/ cpu:0','/ gpu:0','/ gpu:1',   '/ gpu:2']。但是,此计算机仅具有:['/ cpu:0','/ xla_cpu:0',   '/ xla_gpu:0','/ gpu:0','/ gpu:1']。尝试减少gpus

我只有2个GPU,它们分别连接到PCI端口1和2(我无法更改,我没有足够的空间将它们连接到端口0),这是否有意义当指定2个GPU时,TF将尝试获取GPU 0和GPU 1?我可以另外指定吗?

谢谢

1 个答案:

答案 0 :(得分:0)

我遇到了同样的错误,我通过将os.environ[CUDA_VISIBLE_DEVICES]='1, 3'更改为os.environ[CUDA_VISIBLE_DEVICES]="1, 3"来解决了 如果您已经完成此操作,则可能需要检查以下极其简单的代码:不要忘记将gpu设备更改为您的设备。

from keras.utils import multi_gpu_model
from keras import Input, Model
from keras.layers import Conv2D
import os
#if you have gpu 1,3 avaliable
os.environ["CUDA_VISIBLE_DEVICES"]="1,3"
x = Input((64,64,3))
out = Conv2D(64,(3,3),padding='same')(x)
model = Model(x,out)
#model = deeplabv3_nopadding.Deeplabv3()
model = multi_gpu_model(model,gpus=2)

它将输出:

  

使用TensorFlow后端。 2019-07-01 09:40:25.971722:我   tensorflow / core / platform / cpu_feature_guard.cc:141]您的CPU支持   该TensorFlow二进制文件未编译为使用的指令:   SSE4.1 SSE4.2 AVX AVX2 FMA 2019-07-01 09:40:26.277398:我   tensorflow / core / common_runtime / gpu / gpu_device.cc:1432]找到设备0   具有属性:名称:TITAN Xp主修:6主修:1   memoryClockRate(GHz):1.582 pciBusID:0000:03:00.0 totalMemory:   11.90GiB freeMemory:11.74GiB 2019-07-01 09:40:26.586391:I tensorflow / core / common_runtime / gpu / gpu_device.cc:1432]找到了设备1   具有属性:名称:TITAN Xp主修:6主修:1   memoryClockRate(GHz):1.582 pciBusID:0000:83:00.0 totalMemory:   11.90GiB freeMemory:11.74GiB 2019-07-01 09:40:26.586477:我tensorflow / core / common_runtime / gpu / gpu_device.cc:1511]添加可见   gpu设备:0,1 2019-07-01 09:40:27.377910:I   tensorflow / core / common_runtime / gpu / gpu_device.cc:982]设备   将StreamExecutor与强度1边缘矩阵互连:2019-07-01   09:40:27.377970:我   tensorflow / core / common_runtime / gpu / gpu_device.cc:988] 0 1   2019-07-01 09:40:27.377977:我   tensorflow / core / common_runtime / gpu / gpu_device.cc:1001] 0:N N   2019-07-01 09:40:27.377981:我   tensorflow / core / common_runtime / gpu / gpu_device.cc:1001] 1:N N   2019-07-01 09:40:27.378592:我   tensorflow / core / common_runtime / gpu / gpu_device.cc:1115]已创建   TensorFlow设备(/ job:localhost /副本:0 /任务:0 /设备:GPU:0与   11355 MB内存)->物理GPU(设备:0,名称:TITAN Xp,pci总线   id:0000:03:00.0,计算能力:6.1)2019-07-01 09:40:27.382844:   我tensorflow / core / common_runtime / gpu / gpu_device.cc:1115]创建   TensorFlow设备(/ job:localhost /副本:0 /任务:0 /设备:GPU:1与   11355 MB内存)->物理GPU(设备:1,名称:TITAN Xp,pci总线   id:0000:83:00.0,计算能力:6.1)