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 这样做,但我想这超出了这里的范围。