【发布时间】:2016-02-16 09:15:54
【问题描述】:
我用 gpu、cuda 7.0 和 cudnn 6.5 安装了 tensorflow。当我导入 tensorflow 时,它运行良好。
我正在尝试在 Tensorflow 上运行一个简单的矩阵乘法,它不想使用我的 gpu,尽管它似乎可以识别它。我的电脑上有一个 nvidia geforce 970m 和一个有两个 Titan Z 的集群。
我的第一个代码是:
import tensorflow as tf
import numpy as np
size=100
#I create 2 matrix
mat1 = np.random.random_sample([size, size])*100
mat2 = np.random.random_sample([size, size])*100
a = tf.constant(mat1)
b = tf.constant(mat2)
c = tf.matmul(a, b)
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
sess.run(c)
这段代码有效,结果是:
Const_1: /job:localhost/replica:0/task:0/gpu:0
I tensorflow/core/common_runtime/simple_placer.cc:289] Const_1: /job:localhost/replica:0/task:0/gpu:0
Const: /job:localhost/replica:0/task:0/gpu:0
I tensorflow/core/common_runtime/simple_placer.cc:289] Const: /job:localhost/replica:0/task:0/gpu:0
MatMul: /job:localhost/replica:0/task:0/cpu:0
I tensorflow/core/common_runtime/simple_placer.cc:289] MatMul: /job:localhost/replica:0/task:0/cpu:0
所以以我的方式,tensorflow 使用我的 gpu 来创建常量,但不适用于 matmul(这很奇怪)。然后,我像这样强制 gpu:
with tf.device("/gpu:0"):
a = tf.constant(mat1)
b = tf.constant(mat2)
c = tf.matmul(a, b)
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
sess.run(c)
Tensorflow 返回:
InvalidArgumentError: Cannot assign a device to node 'MatMul': Could not satisfy explicit device specification '/gpu:0'
如果有人有同样的问题或想法,我会很高兴看到你的回答!
【问题讨论】:
-
也许你遇到了这个问题github.com/tensorflow/tensorflow/issues/29“Tensorflow 似乎需要 3.5 的 cuda 计算能力”——我们中的一些人只有 3.0。在这里检查你的:en.wikipedia.org/wiki/CUDA#Supported_GPUs
-
感谢您的回答,但我查了一下,gtx 970m 的计算能力为 5.2,titan Z 的计算能力为 3.5。此外,当执行脚本 ./configure.sh 它告诉我[默认为:“3.5,5.2”] 所以我认为这方面很好。
-
试试 mat1=np.random.random_sample([size, size]).astype(np.float32)*100
-
哦,它有效!非常感谢你 !所以现在我知道 float64 不是矩阵乘法的好主意;)
-
这取决于你需要做什么。如果您需要将损失函数最小化为“任意”精度,那么您需要双打
标签: gpu matrix-multiplication tensorflow invalid-argument