我正在尝试使用
torch.sparse.spsolve
来求解线性方程组,如下所示:
A_sparse = torch.sparse_coo_tensor(indices, values, size=(eq_counter, self.num_regions))
A_sparse_csr = A_sparse.to_sparse_csr()
A_sparse_csr = A_sparse_csr.cuda()
# Create dense vector b
b = torch.tensor(b_values, dtype=slopes.dtype, device=slopes.device)
b = b.cuda()
# Solve the linear system A c = b using torch.sparse.spsolve
intercepts = torch.sparse.spsolve(A_sparse_csr, b) # Shape: (num_regions,)
但是,我收到以下奇怪的错误 - > RuntimeError:使用稀疏张量调用线性求解器需要使用 CUDA cuDSS 编译 PyTorch,并且在 ROCm 构建中不受支持。
我有 Nvidia RTX 40 系列显卡,所以我不明白为什么 ROCm 构建(与 AMD GPU 相关)甚至相关/出现在错误中?我尝试使用以下代码片段诊断错误:
print(f"PyTorch Version: {torch.__version__}")
print(f"CUDA Version: {torch.version.cuda}")
print(f"Is CUDA Available: {torch.cuda.is_available()}")
# Check the current CUDA device
if torch.cuda.is_available():
print(f"Current CUDA Device: {torch.cuda.current_device()}")
print(f"Device Name: {torch.cuda.get_device_name(torch.cuda.current_device())}")
输出符合预期:
PyTorch Version: 2.5.1+cu124
CUDA Version: 12.4
Is CUDA Available: True
Current CUDA Device: 0
Device Name: NVIDIA GeForce RTX 4090
所以我真的不知道问题是什么,非常感谢解决此问题的任何帮助!预先感谢
运行时错误:使用稀疏张量调用线性求解器需要 使用 CUDA cuDSS 编译 PyTorch,ROCm 构建不支持。
这意味着要使用
torch.sparse.spsolve
,你必须
pip install torch
中的 pytorch 二进制文件。你已经在使用RTX 4090时提出了第二点,所以你只需要安装cuDSS并从源代码编译pytorch,参考https://github.com/pytorch/pytorch?tab=readme-ov-文件#from-source。请注意,您应该在编译之前
export USE_CUDSS=1
。
使用编译好的pytorch和cuDSS,以下演示代码运行正常。 演示代码