numpy 平方_[话俾你知]加速NumPY运算的手段——CuPy

    前面我曾经发文讲述如何安装PyCuda,如果你有C++开发能力可以使用GPU加速程序运算,今天要讲述的是一个基本可以相容NumPy的工具CuPy。它使用了CUDA开发,同样可以使用Nvidia GPU加速你的程序,与PyCuda不同的是,你可以使用CuPy替代多数的NumPy操作而不需要懂得怎么写C++,换句话说CuPy有更小的适用范围,但是相应地,使用门槛更低。

    如果要安装的话,使用conda命令是最直接的方式,安装CuPy之前需要安装显卡驱动,如何安装在我之前的文章曾经有讲述。

conda install -c conda-forge cupy

这样指定从conda-forge频道安装cupy,如果不指定频道的话安装的版本会比较低(6.0.0),但是指定频道之后更新所有包的时候会让你更加头痛,所以我索性直接

conda install cupy

    当你安装好了之后,测试一下

import timeitimport cupy as cpimport numpy as npcupy_array = cp.random.normal(1, 100, (8192, 8192))numpy_array = np.random.normal(1, 100, (8192, 8192))print(f"CUPY 生成数据所占的内存大小是 {cupy_array.nbytes}")print(f"NumPY 生成数据所占的内存大小是 {numpy_array.nbytes}")print(    "CUPY 执行效率\n",    timeit.repeat("cp.linalg.norm(cupy_array)",                  "from __main__ import cp, cupy_array",                  number=10))print(    "NumPy 执行效率\n",    timeit.repeat("np.linalg.norm(numpy_array)",                  "from __main__ import np, numpy_array",                  number=10))

    我们先分别用cupy和numpy两种生成相同大小的矩阵,进行相同的运算做比对,输出结果如下

numpy 平方_[话俾你知]加速NumPY运算的手段——CuPy_第1张图片

    此处我选择了计算范数的操作测试时间,结果来看明显cupy的时间更短。CuPy进行操作需要在显卡中进行,理论上数据在显存和内存之间交互也需要一定的时间,不知道对在性能上锱铢必计的场景而言是不是优化的一个方向,我们一般场景下矩阵计算效率提升已经相当可观了。

    值得注意的是,CuPy在速度的提升跟矩阵大小有正相关的关系,矩阵越大,则提升越明显,较小的矩阵运算速度可能还不如NumPy,但是矩阵大小达到某个数量级(有说法是千万数量级,上面8192平方是六千多万)就可以得到相当大的性能收益。同时也要考虑你GPU的显存,显存相对内存而言更加宝贵,一不小心可能会爆显存。

    如果单纯地进行矩阵运算,tensorflow-gpu对你来说可能太大了,这个时候CuPy就派上了用场。就像你每天上班可能会骑自行车或者开车,很方便,飞机比前两者快多了,但是没什么人开飞机上班,因为不好停。

你可能感兴趣的:(numpy,平方)