即使tensorflow看起来运行得很好,Keras也没有使用我的GPU。我遵循其他人的建议使用以下方法检查张量流:
import tensorflow
from tensorflow.python.client import device_lib
print(device_lib.list_local_devices())
哪个给
[name: "/device:CPU:0"
device_type: "CPU"
memory_limit: 268435456
locality {
}
incarnation: 13541243483275802230
, name: "/device:GPU:0"
device_type: "GPU"
memory_limit: 6694395576
locality {
bus_id: 1
links {
}
}
incarnation: 17715053295272939021
physical_device_desc: "device: 0, name: GeForce GTX 1070, pci bus id: 0000:08:00.0, compute capability: 6.1"
]
到目前为止,一切都很好,但是当我在Keras中指定分类器并对其进行训练时,它的运行速度很快。没有GPU加速的迹象:
classifier.fit(X_train, y_train, batch_size = 10, epochs = 100, verbose=1)
我尝试过:
with tensorflow.device('/gpu:0'):
classifier.fit(X_train, y_train, batch_size = 10, epochs = 100)
具有相同的结果。 除了速度和明显的CPU使用率外,我不知道该如何判断Keras是否在使用GPU。
我还从tensorflow文档中运行了这个示例,在我的终端中,我可以清楚地看到它使用了GPU。它比上面的keras示例运行得快得多。 导入张量流 #创建一个图形。 a = tensorflow.constant([1.0,2.0,3.0,4.0,5.0,6.0],shape = [2,3],name ='a') b = tensorflow.constant([1.0,2.0,3.0,4.0,5.0,6.0],shape = [3,2],name ='b') c = tensorflow.matmul(a,b) #创建一个将log_device_placement设置为True的会话。 sess =张量流。会话(配置=张量流.ConfigProto(log_device_placement = True)) #运行操作。 打印(sess.run(c))
非常感谢您帮助我们找出Keras为什么看不到我的GPU的帮助
我使用python 3.6.5,tensorflow-gpu 1.11.0(未安装tensorflow),keras 2.2.4。 我需要提及的是,我不得不花一会儿时间才能使用Tensorflow才能使用GPU,但我仍然不知道为什么它突然出现了,但是现在一直如此。我的假设是Keras会自动继承。
A。
答案 0 :(得分:1)
我不再完全确定最初提出的问题。我认为Keras确实在使用GPU,但是CPU和GPU之间存在很大的瓶颈。当我增加批处理大小时,运行速度明显加快(对于每个时期),这没有多大意义,但似乎表明我在其他地方存在瓶颈。 我不知道该如何调试
答案 1 :(得分:0)
您可以尝试删除keras,然后安装keras-gpu(在anaconda中可用,也许在pip中也可用)
如果要确保使用with tensorflow.device('/gpu:0'):
,请在“定义模型时”使用它:
with tensorflow.device('/gpu:0'):
#blablablabla - layers for functional API model
classifier = Model(inputs, outputs) #or classifier = Sequential()
#blablabla - layers for sequential model