Python PyTorch-GPU中的并行Cholesky分解
为了得到一个包含aPython 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循环中重
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循环:(