Python PyTorch-GPU中的并行Cholesky分解

Python PyTorch-GPU中的并行Cholesky分解,python,pytorch,gpu,linear-algebra,lapack,Python,Pytorch,Gpu,Linear Algebra,Lapack,为了得到一个包含aD维正定矩阵C行列式的可微项(在我的例子中是多元高斯的微分熵),我可以使用: torch.log2(torch.potrf(C).diag()).sum() + D / 2.0 * (np.log2(2 * np.pi * np.e)) potrf(C)执行Cholesky分解,其对角线元素的对数值之和等于对数行列式除以2 我想在一小批矩阵上调用potrf,这样在形状为(N,D,D)的张量上调用potrf就会产生N不同的Cholesky分解 目前,我只能在Python循环中重

为了得到一个包含a
D
维正定矩阵
C
行列式的可微项(在我的例子中是多元高斯的微分熵),我可以使用:

torch.log2(torch.potrf(C).diag()).sum() + D / 2.0 * (np.log2(2 * np.pi * np.e))
potrf(C)
执行Cholesky分解,其对角线元素的对数值之和等于对数行列式除以2

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

目前,我只能在Python循环中重复调用
potrf()
,这是对GPU并行计算能力的拙劣利用,因此运行速度比CPU慢约3倍

可以在GPU上与PyTorch并行启动Cholesky分解吗?

现在PyTorch中提供批量Cholesky分解。

以及批处理反转()等



对于Pytorch的旧版本

您正在寻找批处理Cholesky分解。目前它还没有在Pytorch中实现,但有一个新的版本,并计划在将来添加它

我只知道Pytorch 0.4中有一个可用的。你可以用它来得到类似的东西:

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

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

从1.8版开始,PyTorch对numpy风格的操作具有本机支持,包括Cholesky分解:

torch.linalg.cholesky(输入)
注意:当CUDA设备上给定输入时,此功能将使该设备与CPU同步


谢谢不幸的是,
btrifact
还不是可微的,我想我现在必须求助于Python循环:(