一个自包含的稀疏Cholesky求解器,兼容CPU和GPU张量框架。
项目描述
这个仓库是什么?
这是一个简约的、自包含的稀疏Cholesky求解器,支持在CPU和GPU上解决,易于集成到您的张量管道中。
当我们正在撰写我们的“几何逆渲染大步”论文[1]时,我们发现将现有的稀疏线性求解器连接到我们的管道相当具有挑战性,我们通过添加对大型项目的依赖(即cusparse
和scikit-sparse
),仅使用其功能的一小部分来实现这一点。因此,我们决定实现自己的库,该库只有一个目的:使用Cholesky分解高效地在GPU或CPU上解决稀疏线性系统。
底层,它依赖于CHOLMOD进行稀疏矩阵分解。在求解阶段,它使用CHOLMOD的CPU版本,并使用构建求解器时运行的一次分析步骤的结果,在GPU上进行快速求解[2]。
它实现了与其他框架相当的性能,并附带漂亮的依赖项。
在Linux Ryzen 3990X工作站上使用TITAN RTX运行的基准测试
Python绑定使用nanobind生成,这使得它容易与大多数张量框架(Numpy、PyTorch、JAX...)进行互操作
安装
使用PyPI(推荐)
pip install cholespy
从源码
git clone --recursive https://github.com/rgl-epfl/cholespy
pip install ./cholespy
文档
该模块中只有一个类,包含两个变体:CholeskySolverF
和 CholeskySolverD
。它们之间的唯一区别是 CholeskySolverF
使用单精度解算系统,而 CholeskySolverD
使用双精度。这在GPU上解算时非常有用,因为CPU版本依赖于CHOLMOD,而CHOLMOD只支持双精度。
默认支持最常用的张量框架(PyTorch、NumPy、TensorFlow...)。您可以直接将它们传递到模块中,无需手动转换。
由于两种变体具有相同的签名,以下仅详细说明 CholeskySolverF
:
cholespy.CholeskySolverF(n_rows, ii, jj, x, type)
参数
n_rows
- 稀疏矩阵中的行数。ii
- 稀疏矩阵表示中的第一个索引数组。如果type
是COO
,则此数组为行索引数组。如果是CSC
(或CSR
),则此数组为列(或行)索引数组,其中列(或行)k
的行(或列)索引存储在jj[ii[k]:ii[k+1]]
中,相应的条目存储在x[ii[k]:ii[k+1]]
中。jj
- 稀疏矩阵表示中的第二个索引数组。如果type
是COO
,则此数组为列索引数组。如果是CSC
(或CSR
),则此数组为行(或列)索引数组。x
- 非零条目的数组。type
- 矩阵表示类型,类型为MatrixType
。可用类型包括MatrixType.COO
、MatrixType.CSC
和MatrixType.CSR
。
cholespy.CholeskySolverF.solve(b, x)
参数
b
- 要解算的方程的右端。可以是向量或矩阵。如果是矩阵,则其形状必须为(n_rows, n_rhs)
。它必须在与传递给求解器构造函数的张量相同的设备上。如果使用CUDA数组,则n_rhs
的最大支持值为128
。x
- 解的占位符。它必须在同一设备上,并且具有与b
相同的形状。
x
和 b
必须 与所使用的求解器具有相同的数据类型,即 CholeskySolverF
为 float32
或 CholeskySolverD
为 float64
。由于 x
将就地修改,因此不支持隐式类型转换。
示例用法
from cholespy import CholeskySolverF, MatrixType
import torch
# Identity matrix
n_rows = 20
rows = torch.arange(n_rows, device='cuda')
cols = torch.arange(n_rows, device='cuda')
data = torch.ones(n_rows, device='cuda')
solver = CholeskySolverF(n_rows, rows, cols, data, MatrixType.COO)
b = torch.ones(n_rows, device='cuda')
x = torch.zeros_like(b)
solver.solve(b, x)
# b = [1, ..., 1]
参考
[1] Nicolet, B.,Jacobson, A.,& Jakob, W. (2021). 大步推进几何逆渲染。ACM Transactions on Graphics (TOG),40(6),1-13。
[2] Naumov, M. (2011). 在GPU上的预条件迭代方法中并行求解稀疏三角线性系统。NVIDIA Corp.,Westford,MA,USA,技术报告NVR-2011,1。
项目详情
cholespy-2.1.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 13d069270fcdbb364c1db8ebee877b7d5be0b4bac00296879ec5cef1317473fe |
|
MD5 | f46208be00f7f22efdf5628ba2343372 |
|
BLAKE2b-256 | a9f99379a33e23e14eae7bc011b4aac83875f7201bb7afd29fc12fcfc21cd2a0 |
cholespy-2.1.0-cp312-abi3-win_amd64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d851e3d249506caf7d1e8af7942143c3eb0eb1721a26e558900df35415a1ef93 |
|
MD5 | 694b235483744a7cc9f84dc4806a2feb |
|
BLAKE2b-256 | db1e748e3a3725188bc28161ebd96695c2f383260f4696d6edad3b92349aa3dd |
cholespy-2.1.0-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 5b3394896e7bd27df73e95b321d80983cf02b9e7d7bc5b1113b22505383728bc |
|
MD5 | 28dfb3c53c5ff5e775b0686765c317e0 |
|
BLAKE2b-256 | f7f4957d9c22278281674ecdada12a1788cfa760f4548a655dd95eb181444b81 |
哈希值 用于 cholespy-2.1.0-cp312-abi3-macosx_11_0_arm64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 8a592dbd0cf46b1afb96187d65bb50a83b7b8c85e7f453379ec912cb1f86f5d1 |
|
MD5 | 11a351a2cb0b72b7eb71b4df9b92701b |
|
BLAKE2b-256 | 458096ae0f967d79ae05f14781b26cb389c80b7b3b8646172c17362e097fa44e |
哈希值 用于 cholespy-2.1.0-cp312-abi3-macosx_10_14_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d8eed87977dddd1ee8bbfb4a34772ad34d173536ae77bf1532964659b78a4dbe |
|
MD5 | 9649b3ba133d3ae9e74647933ea574e4 |
|
BLAKE2b-256 | f693b7029ff7f05f3d353d0f8ab590012bb45b4678636e3d23ddf676aeb94a98 |
哈希值 用于 cholespy-2.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 4e197b4db52ce68e4290db7269160ac29fa0967ed6e2f455751251f378783f6d |
|
MD5 | b923bc653d53397eed0ef2ebee9c37f5 |
|
BLAKE2b-256 | f3907c4c5b68fbbb4683c75971a52c2630cb8058460d49c6dad8a15104274b7d |
哈希值 用于 cholespy-2.1.0-cp311-cp311-macosx_11_0_arm64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1a762eb52259ad5a38eb22bf72a0e311afcffcaf599da1169ef04e42d9b28b4e |
|
MD5 | 2d037125c2d812bc4a1a2cdb4da29b8b |
|
BLAKE2b-256 | e3a69d3c92111bbb333bb81a28205095ade1f746a25772ab8e02ecdbf2665865 |
哈希值 用于 cholespy-2.1.0-cp311-cp311-macosx_10_14_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ca3e921e0525c01e990761a5372f4a434c319c9ceb0bf53ddbf5d744236a4604 |
|
MD5 | bc85ea99b3371c7cb858add7a868d33b |
|
BLAKE2b-256 | 483f916b56cf5440736a23695cd8fdd2cd3589e2ce9a472f8b715f90868968ba |
哈希值 用于 cholespy-2.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 9d04c5830c037e3604d16b48f8c2bd793671d2bcee5b1e3da4755b3d5a4078e1 |
|
MD5 | 1d0a922331c455410604b15649104025 |
|
BLAKE2b-256 | 0fe9889fc88147736716febcab23c7ff41fced1fec90d922eaad42b749772689 |
哈希值 用于 cholespy-2.1.0-cp310-cp310-macosx_11_0_arm64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 315a5d3361a89ea6b4154379c015bf45005f47acefd239257ee49e7e0fba5a6d |
|
MD5 | 78c6c69985941a8e874859321eb5cd51 |
|
BLAKE2b-256 | 8ade9f0c4d06251a65482b1c04f5988c6e156811d1cffbd59d36faa12222e1f4 |
哈希值 用于 cholespy-2.1.0-cp310-cp310-macosx_10_14_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d6128f1c1fede81b054cb2ba09cb0b45ba72619cf0c8ec4dab2a1a522b695314 |
|
MD5 | 29f69ef2a1d9394ee5b6d3ac60a17b0f |
|
BLAKE2b-256 | 6404a7623b76c611957076adf21503f196257d8c4953abe49c7e8f34114b616c |
哈希值 用于 cholespy-2.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e26a87cf2f9d4e4b5eb405db0ccb455740a46ef77c63a29e3b0d25a82e98825c |
|
MD5 | fd0c64542e6e9141566209fa1cf09ae4 |
|
BLAKE2b-256 | 7f870c199eb7582a89bd720d6e788ef771cf1028e33dfb7872c1d9d0d30b1100 |
哈希值 用于 cholespy-2.1.0-cp39-cp39-macosx_11_0_arm64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ca91a83766d4e206365c2732a66d7f072f10c22b6a74f92c121d3a3fb4ea1062 |
|
MD5 | 37df1656a5a2424cce6eb9a0bd80965b |
|
BLAKE2b-256 | 0e3c3edf4387ed4f749ed432152b7be8490ad2524582b93de714348bdc9055d3 |
哈希值 用于 cholespy-2.1.0-cp39-cp39-macosx_10_14_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 0a9a268af93f804083f2450d2f7ec28a9299db82332ca6d1948077bd4811a223 |
|
MD5 | 49c620c6b71e37b8b46609a7bd6b9682 |
|
BLAKE2b-256 | 583841aeb9298a13b3fa9978976541c38cf3603f0a107c16832b631b5e31a02a |
哈希值 用于 cholespy-2.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3f069c30a64f20e73ff07e67f798ac6c6e56efb34b80ad30f1ed87272393340f |
|
MD5 | 838e725c8ccff388694d1c78812a25dd |
|
BLAKE2b-256 | 85387ed718d2e42edcf8a59dbc6f07052feea9d81fec1f11f1fa8231c4682f65 |
哈希值 用于 cholespy-2.1.0-cp38-cp38-macosx_10_14_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ad8f23e6a0d381eb1bb5561ba336ab4830f4a51ac1245253103512b3773f767c |
|
MD5 | 5ac726cebd1e367a927341c73d451a7e |
|
BLAKE2b-256 | 026fedb4147340830e9f44f5c1106f5a9150693e9fd48c9eaf9067e5bf6f7790 |