Theano/Numpy 的矩阵逆函数是否完全使用 GPU?
Does Theano/Numpy's matrix inverse function use GPU at all?
我运行下面的代码计算了一个矩阵的伪逆,但是开不开GPU好像没什么区别
mat = theano.shared(numpy.eye(300, dtype="float32")+1)
fn = theano.function([], theano.tensor.nlinalg.pinv(mat))
fn()
然后我查看了theano.tensor.nlinalg.MatrixPinv
的Theano源码,发现下面的代码只是调用了Numpy的numpy.linalg.pinv
(注释省略)
class MatrixPinv(Op):
__props__ = ()
def __init__(self):
pass
def make_node(self, x):
x = as_tensor_variable(x)
assert x.ndim == 2
return Apply(self, [x], [x.type()])
def perform(self, node, inputs, outputs):
(x,) = inputs
(z,) = outputs
z[0] = numpy.linalg.pinv(x).astype(x.dtype)
pinv = MatrixPinv()
我不是很了解Numpy的实现方式,可以在GPU上运行吗?
如果不是,那是否意味着每次我想在 Theano 中计算矩阵逆时,我都必须从 GPU 返回到 CPU?
请参阅 theano 文档中的文章 Using the GPU。
Note that we use the shared
function to make sure that the input x is stored on the graphics device.
您必须确保数据存储在显存中。否则,我想,theano 会退回到使用 numpy 例程。
Numpy 通常不会在 GPU 上 运行。我不确定是否可以 link 它反对 CudaBLAS 这样做,但我想这超出了这里的范围。
我运行下面的代码计算了一个矩阵的伪逆,但是开不开GPU好像没什么区别
mat = theano.shared(numpy.eye(300, dtype="float32")+1)
fn = theano.function([], theano.tensor.nlinalg.pinv(mat))
fn()
然后我查看了theano.tensor.nlinalg.MatrixPinv
的Theano源码,发现下面的代码只是调用了Numpy的numpy.linalg.pinv
(注释省略)
class MatrixPinv(Op):
__props__ = ()
def __init__(self):
pass
def make_node(self, x):
x = as_tensor_variable(x)
assert x.ndim == 2
return Apply(self, [x], [x.type()])
def perform(self, node, inputs, outputs):
(x,) = inputs
(z,) = outputs
z[0] = numpy.linalg.pinv(x).astype(x.dtype)
pinv = MatrixPinv()
我不是很了解Numpy的实现方式,可以在GPU上运行吗?
如果不是,那是否意味着每次我想在 Theano 中计算矩阵逆时,我都必须从 GPU 返回到 CPU?
请参阅 theano 文档中的文章 Using the GPU。
Note that we use the
shared
function to make sure that the input x is stored on the graphics device.
您必须确保数据存储在显存中。否则,我想,theano 会退回到使用 numpy 例程。
Numpy 通常不会在 GPU 上 运行。我不确定是否可以 link 它反对 CudaBLAS 这样做,但我想这超出了这里的范围。