PyTorch GPU中的并行Cholesky分解

时间:2018-07-10 05:27:01

标签: gpu linear-algebra pytorch lapack

要获得一个包含D维正定矩阵C(在我的情况下,多元高斯微分熵)的行列式的可微分项,我可以使用:

torch.log2(torch.potrf(C).diag()).sum() + D / 2.0 * (np.log2(2 * np.pi * np.e))

potrf(C)执行Cholesky分解,其对角元素的对数值加到对数行列式除以2。

我想在一小批矩阵上调用potrf,以便在形状为potrf的张量上调用(N, D, D)会产生N不同的Cholesky分解。

目前,我只能在Python循环中重复调用potrf(),这对GPU的并行计算功能的使用不佳,因此运行速度比CPU慢3倍。

是否可以使用PyTorch在GPU上并行启动Cholesky分解?

2 个答案:

答案 0 :(得分:1)

批处理Cholesky分解现在可以在PyTorch中使用,从1.0开始,以及批处理inverse()等。

(下面是旧答案)


您正在寻找Batch Cholesky分解。目前尚未在Pytorch中实现,但是有一个open issue,并计划在将来添加。

我只知道Pytorch 0.4中有一个Batch LU factorization。您可以使用它来获得类似的内容:

det(D) = det(P)det(L)det(U)

其中P的行列式为(-1)^t,P和U的行列式是对角元素的乘积。

答案 1 :(得分:0)

从 1.8 版开始,PyTorch 原生支持 numpy 样式的 torch.linalg 操作,包括 Cholesky 分解:

torch.linalg.cholesky(input)
<块引用>

注意:当在 CUDA 设备上给定输入时,此函数会将该设备与 CPU 同步。