Theano / Numpy的矩阵反函数是否完全使用GPU?

时间:2016-01-26 13:42:09

标签: python numpy matrix linear-algebra theano

我运行了以下代码来计算矩阵的伪逆,但看起来我是否打开GPU没有任何区别。

mat = theano.shared(numpy.eye(300, dtype="float32")+1)
fn = theano.function([], theano.tensor.nlinalg.pinv(mat))
fn()

然后我查看了Theano的theano.tensor.nlinalg.MatrixPinv源代码,发现它只是在下面的代码中调用了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?

1 个答案:

答案 0 :(得分:3)

请参阅theano文档中的文章Using the GPU

  

请注意,我们使用shared函数确保输入x存储在图形设备上。

您必须确保数据存储在图形内存中。否则,我想,theano会回到使用numpy例程。

Numpy通常不会在GPU上运行。我不确定是否有可能将其与CudaBLAS联系起来,但我认为这超出了范围。