You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

大规模稀疏矩阵最小二乘计算加速方案咨询

大规模稀疏矩阵最小二乘求解的加速方案咨询

背景

我通过最小二乘法求解方程A_des·x = b以得到x,该操作需执行数千次。每次迭代中A_des会变化,但始终保持稀疏性(矩阵中仅约4%为有效数据)。

问题

A_des规模较大(维度为(28106, 1185)),单次求解线性系统耗时约1秒,而我需要执行30万次该操作。

咨询问题

请问有哪些可行的加速方案?

已尝试方案

我分别在CPU和GPU上实现了求解函数,使用pytorch进行GPU计算,但加速效果不稳定。由于求解器通常已支持多线程,无法额外并行化。在CPU上尝试了多种求解器:np.linalg.solve、np.linalg.lstsq、scipy.linalg.solve、scipy.optimize.least_squares、scipy.sparse.linalg.lsqr(预先将A_des转换为scipy.sparse.coo_array(A_des))。

当前最优方案

我找到的最优折中方案是使用np.linalg.solve,但需要手动进行矩阵操作。例如,用最小二乘函数求解为x = np.linalg.lstsq(A_des, b),而用solve则需写成x = np.linalg.solve(A_des.T@A_des, A_des.T@b)。另一个更快的选项是x = scipy.sparse.linalg.lsqr(A_des, b, atol = 1e-3, btol = 1e-3),但求解结果精度不佳。

我的求解函数

def Inverter(GPU, A_des, b):

    if GPU:
        # Migrate b to torch
        b= torch.from_numpy(b).to(device).double()
        # Migrate design matrix to GPU
        A_des = torch.from_numpy(A_des).to(device)
        x= torch.linalg.solve(A_des.T@A_des,A_des.T@(b)).cpu()
    else:
        #x= scipy.sparse.coo_array(A_des)
        #x= scipy.sparse.linalg.lsqr(A_des, b)[0]
        #x = scipy.linalg.solve(A_des.T@A_des,A_des.T@(b))
        x= np.linalg.solve(A_des.T@A_des,A_des.T@b)
        

    return x

内容的提问来源于stack exchange,提问作者Nihilum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 02:55:09