matmul上GPU的Tensorflow问题。GPU不是';我认不出

matmul上GPU的Tensorflow问题。GPU不是';我认不出,gpu,matrix-multiplication,tensorflow,invalid-argument,Gpu,Matrix Multiplication,Tensorflow,Invalid Argument,我用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

我用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'

如果有人有同样的问题或想法,我会很高兴看到你的答案

我没有足够的声誉发表评论,我遇到了一个类似的问题,我的问题在这里


也许您遇到了这个问题“Tensorflow似乎需要3.5的cuda计算能力”——我们中的一些人只有3.0。在这里查看您的答案:谢谢您的回答,但我检查了gtx 970m的计算能力为5.2,titan Z的计算能力为3.5。此外,当执行脚本。/configure.sh时,它会告诉我[默认值为:“3.5,5.2”],因此我认为它在这方面很好。试试mat1=np.random.random_sample([size,size])。astype(np.float32)*100Oh它可以工作!非常感谢你!所以现在我知道float64不是矩阵乘法的好主意;)这取决于你需要做什么。如果您需要将损失函数最小化到“任意”精度,那么您需要doublesuseful上下文,您现在应该有足够的声誉来评论;)