【问题标题】:Does Theano/Numpy's matrix inverse function use GPU at all?Theano/Numpy 的矩阵逆函数是否完全使用 GPU?
【发布时间】:2016-01-26 13:42:08
【问题描述】:

我运行了以下代码来计算矩阵的伪逆,但似乎我是否打开 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(我将省略cmets)。

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?

【问题讨论】:

    标签: python numpy matrix linear-algebra theano


    【解决方案1】:

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

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

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

    Numpy 通常不在 GPU 上运行。我不确定是否可以将其与 CudaBLAS 链接起来,但我想这超出了这里的范围。

    【讨论】:

    • 感谢您的指出。我稍微编辑了一下代码,结果结果差不多,所以我猜它根本不使用GPU?
    • 老实说,我不知道。也许矩阵逆不太适合 GPU 使用。但另一方面,倒数相当于求解方程,我相信这可以在 GPU 上完成。也许您有配置问题 - 其他操作是否使用 gpu?
    • 还有几点要检查:你有nvidia卡吗?你安装了 CUDA 吗?
    • 非常感谢,是的,我有 CUDA 和矩阵乘法等其他操作可以在 GPU 上很好地运行(虽然我不确定如何验证这一点,但它确实变得更快了) ,可能Theano还不支持GPU矩阵求逆。
    猜你喜欢
    • 2014-03-05
    • 1970-01-01
    • 2012-05-12
    • 2013-06-19
    • 2015-11-13
    • 2014-03-17
    • 1970-01-01
    • 2021-07-26
    • 2017-06-19
    相关资源
    最近更新 更多