PyTorch GPU中的并行Cholesky分解



要得到一个包含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中提供的Batch LU因子分解。你可以用它来获得类似的东西:

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

其中p的行列式是CCD_ 9,p和U的行列式是对角元素的乘积。

从版本1.8开始,PyTorch对numpy风格的torch.linalg操作有原生支持,包括Cholesky分解:

torch.linalg.cholesky(input)

注意:当CUDA设备上有输入时,此功能会使该设备与CPU同步。

最新更新