- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的最终目标是通过使用支持 CUDA 的 GPU 来加速 Python 中矩阵向量乘积的计算。矩阵 A 约为 15k x 15k 且稀疏(密度 ~ 0.05),向量 x 为 15k 元素且密集,我正在计算 Ax。我必须多次执行此计算,因此使其尽可能快是理想的选择。
我当前的非 GPU“优化”是将 A 表示为 scipy.sparse.csc_matrix 对象,然后简单地计算 A.dot(x),但我希望在具有几个 NVIDIA 的虚拟机上加快速度连接 GPU,如果可能的话仅使用 Python(即不手动写出详细的内核函数)。我已经使用 cudamat 库成功加速了密集矩阵向量乘积,但不适用于稀疏情况。网上有一些针对稀疏案例的建议,例如使用 pycuda、scikit-cuda 或 anaconda 的加速包,但信息不多,因此很难知道从哪里开始。
我不需要非常详细的说明,但如果有人以前解决过这个问题,并且可以为最简单的方法提供“大局”路线图,或者知道如何加速稀疏 GPU -基于矩阵向量乘积将超过 scipy 的稀疏算法,这将非常有帮助。
最佳答案
另一种选择是使用 CuPy
包。它具有与 numpy/scipy 相同的界面(这很好)并且(至少对我来说),它比 pycuda 更容易安装。新代码看起来像这样:
import cupy as cp
from cupyx.scipy.sparse import csr_matrix as csr_gpu
A = some_sparse_matrix #(scipy.sparse.csr_matrix)
x = some_dense_vector #(numpy.ndarray)
A_gpu = csr_gpu(A) #moving A to the gpu
x_gpu = cp.array(x) #moving x to the gpu
for i in range(niter):
x_gpu = A_gpu.dot(x_gpu)
x = cp.asnumpy(x_gpu) #back to numpy object for fast indexing
更新:cupy 现在还通过其 ROCm 堆栈支持 AMD GPU,因此这是一个额外的好处
关于python - 如何使用 CUDA 通过目前通过 scipy.sparse.csc_matrix.dot 实现的密集向量积来加速稀疏矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49019189/
我有一个 numpy 数组,X: type(X) >>> 我有兴趣在第 0 列中找到非零条目的行的索引。我试过: getcol = X.getcol(0) print getcol 这给了我: (
我想将这个矩阵转换为 Pandas 数据框。 csc_matrix 括号中的第一个数字应该是索引,第二个数字是列和最后的数字是数据。 我想这样做是为了在文本分析中进行特征选择,第一个数字代表文档,第二
我想知道是否有任何方法可以在 python 中为 mlpy 提供 scipy.sparse.csc_matrix 格式。我以前使用过 mlpy 并且一直处理非稀疏矩阵。例如,如果我每行有 5 个特征和
我有一个 scipy.sparse.csc_matrix我正在尝试使用 scipy.sparse.csc_matrix.toarray() 转换为数组。当我将该函数用于小型数据集时,它工作正常。但是,
我想将 pandas SparseDataFrame 转换为 scipy.sparse.csc_matrix。但我不想先将其转换回稠密矩阵。 现在我有类似下面的内容。 df = pd.get_dumm
我正在尝试从现有的 csc 矩阵创建 petsc 矩阵。用this在脑海中,我创建了以下示例代码: import numpy as np import scipy.sparse as sp impor
我有一个非常大的 Scipy 稀疏矩阵 ( CSR_MATRIX )。我只想知道如何计算每一行的值之和以及矩阵每一列的值之和。 我有一个执行相同操作的代码,但它使用的是 CSC_MATRIX。这两者在
我的代码中有以下表达式: a = (b / x[:, np.newaxis]).sum(axis=1) 其中 b 是形状为 (M, N) 的数组,x 是形状为 (M, )。现在,b 实际上是稀疏的,因
我想生成一个大的稀疏矩阵并将其求和,但我经常遇到 MemoryError 。于是我尝试通过 scipy.sparse.csc_matrix.sum 进行操作相反,但发现求和后数据类型又变回了 nump
我的最终目标是通过使用支持 CUDA 的 GPU 来加速 Python 中矩阵向量乘积的计算。矩阵 A 约为 15k x 15k 且稀疏(密度 ~ 0.05),向量 x 为 15k 元素且密集,我正在
我正在编写代码以同时有效地从几个大型并行 scipy sparse.csc 矩阵中删除多个列(这意味着所有矩阵都具有相同的 dim,并且所有 nnz 元素都在相同的位置) .我这样做是通过仅索引到我想
我是 Matlab 和 Python 的新手,所以,如果这个问题有点愚蠢,我深表歉意... 我正在尝试使用 numpy 和 scipy 将一些 Matlab 代码转换为 Python,在我到达某人编写
我是一名优秀的程序员,十分优秀!