转自:机器之心

作为 Python 语言的一个扩展程序库,Numpy 支持大量的维度数组与矩阵运算,为 Python 社区带来了很多帮助。借助于 Numpy,数据科学家、机器学习实践者和统计学家能够以一种简单高效的方式处理大量的矩阵数据。那么 Numpy 速度还能提升吗?本文介绍了如何利用 CuPy 库来加速 Numpy 运算速度。

就其自身来说,Numpy 的速度已经较 Python 有了很大的提升。当你发现 Python 代码运行较慢,尤其出现大量的 for-loops 循环时,通常可以将数据处理移入 Numpy 并实现其向量化最高速度处理。

但有一点,上述 Numpy 加速只是在 CPU 上实现的。由于消费级 CPU 通常只有 8 个核心或更少,所以并行处理数量以及可以实现的加速是有限的。

这就催生了新的加速工具——CuPy 库。

何为 CuPy?

CuPy 是一个借助 CUDA GPU 库在英伟达 GPU 上实现 Numpy 数组的库。基于 Numpy 数组的实现,GPU 自身具有的多个 CUDA 核心可以促成更好的并行加速。

CuPy 接口是 Numpy 的一个镜像,并且在大多情况下,它可以直接替换 Numpy 使用。只要用兼容的 CuPy 代码替换 Numpy 代码,用户就可以实现 GPU 加速。

CuPy 支持 Numpy 的大多数数组运算,包括索引、广播、数组数学以及各种矩阵变换。

如果遇到一些不支持的特殊情况,用户也可以编写自定义 Python 代码,这些代码会利用到 CUDA 和 GPU 加速。整个过程只需要 C++格式的一小段代码,然后 CuPy 就可以自动进行 GPU 转换,这与使用 Cython 非常相似。

在开始使用 CuPy 之前,用户可以通过 pip 安装 CuPy 库:

pip install cupy

使用 CuPy 在 GPU 上运行

为符合相应基准测试,PC 配置如下:

  • i7–8700k CPU

  • 1080 Ti GPU

  • 32 GB of DDR4 3000MHz RAM

  • CUDA 9.0

CuPy 安装之后,用户可以像导入 Numpy 一样导入 CuPy:

import numpy as np
import cupy as cp
import time

在接下来的编码中,Numpy 和 CuPy 之间的切换就像用 CuPy 的 cp 替换 Numpy 的 np 一样简单。如下代码为 Numpy 和 CuPy 创建了一个具有 10 亿 1』s 的 3D 数组。为了测量创建数组的速度,用户可以使用 Python 的原生 time 库:

### Numpy and CPU
s = time.time()
*x_cpu = np.ones((1000,1000,1000))*
e = time.time()
print(e - s)### CuPy and GPU
s = time.time()
*x_gpu = cp.ones((1000,1000,1000))*
e = time.time()
print(e - s)

这很简单!

令人难以置信的是,即使以上只是创建了一个数组,CuPy 的速度依然快得多。Numpy 创建一个具有 10 亿 1』s 的数组用了 1.68 秒,而 CuPy 仅用了 0.16 秒,实现了 10.5 倍的加速。

但 CuPy 能做到的还不止于此。

比如在数组中做一些数学运算。这次将整个数组乘以 5,并再次检查 Numpy 和 CuPy 的速度。

### Numpy and CPU
s = time.time()
*x_cpu *= 5*
e = time.time()
print(e - s)### CuPy and GPU
s = time.time()
*x_gpu *= 5*
e = time.time()
print(e - s)

果不其然,CuPy 再次胜过 Numpy。Numpy 用了 0.507 秒,而 CuPy 仅用了 0.000710 秒,速度整整提升了 714.1 倍。

现在尝试使用更多数组并执行以下三种运算:

  1. 数组乘以 5

  2. 数组本身相乘

  3. 数组添加到其自身

### Numpy and CPU
s = time.time()
*x_cpu *= 5
x_cpu *= x_cpu
x_cpu += x_cpu*
e = time.time()
print(e - s)### CuPy and GPU
s = time.time()
*x_gpu *= 5
x_gpu *= x_gpu
x_gpu += x_gpu*
e = time.time()
print(e - s)

结果显示,Numpy 在 CPU 上执行整个运算过程用了 1.49 秒,而 CuPy 在 GPU 上仅用了 0.0922 秒,速度提升了 16.16 倍。

数组大小(数据点)达到 1000 万,运算速度大幅度提升

使用 CuPy 能够在 GPU 上实现 Numpy 和矩阵运算的多倍加速。值得注意的是,用户所能实现的加速高度依赖于自身正在处理的数组大小。下表显示了不同数组大小(数据点)的加速差异:

数据点一旦达到 1000 万,速度将会猛然提升;超过 1 亿,速度提升极为明显。Numpy 在数据点低于 1000 万时实际运行更快。此外,GPU 内存越大,处理的数据也就更多。所以用户应当注意,GPU 内存是否足以应对 CuPy 所需要处理的数据。

原文链接:https://towardsdatascience.com/heres-how-to-use-cupy-to-make-numpy-700x-faster-4b920dda1f56

推荐阅读

  • 【重磅】斯坦福李飞飞《注意力与Transformer》总结,84页ppt开放下载!

  • 分层级联Transformer!苏黎世联邦提出TransCNN: 显著降低了计算/空间复杂度!

  • 清华姚班教师劝退文:读博,你真的想好了吗?

  • 2021李宏毅老师最新40节机器学习课程!附课件+视频资料

  • 最强通道注意力来啦!金字塔分割注意力模块,即插即用,效果显著,已开源!

  • 登上更高峰!颜水成、程明明团队开源ViP,引入三维信息编码机制,无需卷积与注意力

  • 常用 Normalization 方法的总结与思考:BN、LN、IN、GN

  • 注意力可以使MLP完全替代CNN吗? 未来有哪些研究方向?

  • 清华鲁继文团队提出DynamicViT:一种高效的动态稀疏化Token的ViT

  • 并非所有图像都值16x16个词--- 清华&华为提出一种自适应序列长度的动态ViT

重磅!DLer-计算机视觉&Transformer群已成立!

大家好,这是计算机视觉&Transformer论文分享群里,群里会第一时间发布最新的Transformer前沿论文解读及交流分享会,主要设计方向有:图像分类、Transformer、目标检测、目标跟踪、点云与语义分割、GAN、超分辨率、视频超分、人脸检测与识别、动作行为与时空运动、模型压缩和量化剪枝、迁移学习、人体姿态估计等内容。

进群请备注:研究方向+学校/公司+昵称(如Transformer+上交+小明)

???? 长按识别,邀请您进群!

如何将Numpy加速700倍?用 CuPy 呀相关推荐

  1. 将Numpy加速700倍——CuPy

    就其自身来说,Numpy 的速度已经较 Python 有了很大的提升.当你发现 Python 代码运行较慢,尤其出现大量的 for-loops 循环时,通常可以将数据处理移入 Numpy 并实现其向量 ...

  2. 惊呆了!这样可以将Numpy加速700倍!

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 选自 | towardsdatascience  作者 | Geo ...

  3. 这一招将 Numpy 加速 700 倍!!!

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 选自towardsdatascience 机器之心编译 就其自身来说,Numpy 的速 ...

  4. Gradient Boosting, Decision Trees and XGBoost with CUDA ——GPU加速5-6倍

    xgboost的可以参考:https://xgboost.readthedocs.io/en/latest/gpu/index.html 整体看加速5-6倍的样子. Gradient Boosting ...

  5. html原生音频播放器倍速,HTML5倍数功能视频播放器(加速2倍,1.5倍播放)

    HTML5倍数功能视频播放器(加速2倍,1.5倍播放) 倍数功能视频播放器的应用: 培训场景,教育教学场景下,可以倍速观看视频,比如1.5倍,2倍的速度观看视频,可以更快速的看完课程,节省时间. va ...

  6. 在GPU上运行,性能是NumPy的11倍,这个Python库你值得拥有

    导读:NumPy是数据计算的基础,更是深度学习框架的基石.但如果直接使用NumPy计算大数据,其性能已成为一个瓶颈. 随着数据爆炸式增长,尤其是图像数据.音频数据等数据的快速增长,迫切需要突破NumP ...

  7. 百度大脑FaceID人脸识别模型量化技术,确保算法精度无损加速一倍

    随着FaceID人脸识别技术在手机.IoT等设备的普及,受能耗和设备体积的限制,端上硬件的计算性能和存储能力相对较弱,这给端上人脸识别带来了新的挑战--需要更小更快更强的模型. 为了实现FaceID人 ...

  8. html5带倍速功能的视频播放器(加速2倍,1.5倍播放)

    阿酷TONY  采用第三方云视频平台 HTML5倍数功能视频播放器(加速2倍,1.5倍播放) 倍数功能视频播放器的应用: 培训场景,教育教学场景下,可以倍速观看视频,比如1.5倍,2倍的速度观看视频, ...

  9. python matlab 速度_关于python:MATLAB的速度是Numpy的两倍

    我是一名工程学研究生,目前出于数值模拟的目的,正在从MATLAB过渡到Python.我的印象是,对于基本的数组操作,Numpy将与MATLAB一样快.但是,对于我编写的两个不同程序,MATLAB的运行 ...

最新文章

  1. linux里的挂载错误无法开机怎么办,Linux基础知识 - 开机挂载错误
  2. linux_check
  3. happiness[国家集训队2011(吴确)]
  4. html页面授权码,spring boot 2.0 整合 oauth2 authorization code授权码模式
  5. c调用python代码找不到模块_构建 Python C 扩展模块
  6. CAMoE——屠榜 video retrieval challenge
  7. 【AudioVideo】处理音频输出的变化(13)
  8. oracle内置函数 wmsys.wm_concat使用
  9. 网卡5790c linux驱动,(支持所有硬件、无需连接宽带)e驱动 v5.21 WIN7 32bit专版驱动包...
  10. 计算机第一级开机密码设置,开机密码怎么设置
  11. 2013年12月福建省广播电台网络影响力排名
  12. Mycat安装与配置详解
  13. H5特效demo网站
  14. 2020-04-17
  15. 机器视觉_相机开发(二)——大恒相机
  16. i5 10500h和i5 10300h有什么区别i510500h和i510300h差距大不大
  17. 最小化函数minimize
  18. 王唯佳被南开计算机学院录取,被南开录取!沈阳庞贝病少年王唯佳,祝贺你!辽宁日报 昨天辽宁...
  19. 三大战略分析方法——SWOT、PEST、波特五力模型
  20. 三十岁中国男人的婚姻思考 (显式声明: 这是转载的 @_@;;)

热门文章

  1. having 与where 的异同点
  2. c:forEach items=${list} var=tt varStatus=status 的相关大小长度
  3. matlab 字符分割
  4. 左右上下都能滚动的效果
  5. 在pcDuino上运行Python
  6. MySQL七种join
  7. 一个object上拥有一个同步队列和一个等待队列
  8. 30百度人撑起自动驾驶半壁江山
  9. lstm预测sin函数方法2思路的
  10. 上交大张拳石:深度学习可解释性,从百家争鸣到合众归一