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

记一次win10安装cupy的失败经历(附 cupy与numpy对比) win10安装cupy中踩的n多个坑 问题的根源应该是我在装cupy之前把Nvidia cuda更新到了最新的11.5版本,原本是10.2版本。中间经历真是太狗血了,花了将近一天时间来搞,当然最后终于好了 记录一下中间大概经历的事情吧,也算是个教训了,中间瞎几把拐弯抹角搞了好多东西,也看了很多的博客跟官方文档,但是都没啥用 中间因为一直在摸索,没想着会整这么久,绕这么多弯,很多就没有截图记录 问题的开始 想着先把nvidia的cuda (Compute Unified Device Archit 阅读详情

点击上方“编程派”,选择设为“设为星标”

优质文章,第一时间送达!

编译:机器之心

就其自身来说,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

回复下方「关键词」,获取优质资源

回复关键词「 pybook03」,立即获取主页君与小伙伴一起翻译的《Think Python 2e》电子版
回复关键词「入门资料」,立即获取主页君整理的 10 本 Python 入门书的电子版
回复关键词「m」,立即获取Python精选优质文章合集
回复关键词「book 数字」,将数字替换成 0 及以上数字,有惊喜好礼哦~
题图:pexels,CC0 授权。

好文章,我在看
ECU-TEST笔记&使用技巧01 说明 1)所述均基于如下环境:ECU-TEST 8.0、Win10系统、NI Veristand 2018(HIL测试)。不排除因为版本及软件环境问题,所述方法不奏效或有更好的方法,欢迎交流,一起提高。 2)本博客以问答形式进行,所述问题均来自于实际测试(包括MIL、HIL测试)遇到的问题及需求,目的是提高测试效率和自动化测试序列的可维护性。 3)本博客尽量从测试方法及ECU-TEST原... 阅读详情

相关推荐

用于可靠的钙钛矿薄膜瞬时光致发光模拟的拟合程序

简介 对光激发后的电荷载流子动态的研究对于确定太阳能电池的几个特性至关重要,例如,体和界面重组的数量以及向电荷传输层转移过程的速度。 瞬态光致发光(trPL)是用于研究这些特性的最流行的表征方法之一。 该实验是通过在样品上照射几纳秒的激光脉冲,并记录一段时间内的发光情况来进行的。辐射性重组的光生电荷载流子将引起太阳能电池的光子发射,而非辐射性重组的电荷载流子将不会对发光作出贡献。因此,可以测量到强度随时间递减的光致发光瞬态。(见图1表示trPL的测量和它的输出)。 图1. 一...

FluximAG的博客 2364

pytorch 网络预处理与后处理中基于numpy操作的GPU加速

0、背景 python脚本运行在服务器端的卷积神经网络往往需要将图片数据从cv2(numpy.ndarray)->tensor送入网络,之后进行inference,再将结果从tensor-> numpy.ndarray的过程。 由于cv2读取的数据存于内存中,以pytorch框架举例,在把数据送入GPU前会产生如下的数据转换: GPU准备进行inference之前会判断torch.c...

一呆飞仙的博客 4124

ENVI遥感技术

记录2024.03.06所遇到的遥感问题

qq_44453923的博客 4332

Cupy,一个神奇的 python 库

随着GPU在高性能计算中的普及,利用GPU进行数据计算已成为加速数据处理的关键方式。Cupy应运而生,它是一个为GPU计算设计的Python库,更是开启了在Python中进行高效GPU加速计算的新篇章。

dhygvj的博客 9866

2.4G射频微带线阻抗匹配设计实战(WiFi/BLE)

本文深入探讨了2.4G射频微带线阻抗匹配在WiFi/BLE产品开发中的关键作用。文章详细解析了共面波导微带线结构,提供了基于SI9000工具的阻抗计算实战指南,并总结了不同PCB板厚下的设计参数对照表。同时,文章分享了PCB布局布线、与板厂沟通以及天线匹配调试等核心避坑经验,旨在帮助硬件工程师构建从射频芯片到天线的稳定高效传输通道。

j0k1l2m3n的博客 369

保姆级教程:用Cesium的Primitive API实现火箭发射全流程动画(含代码避坑)

本文详细介绍了如何使用Cesium的Primitive API实现火箭发射全流程动画,包括模型控制、关节动画和精细时序管理。通过实战代码示例和性能优化技巧,帮助开发者高效构建高复杂度航天仿真系统,显著提升三维可视化效果与运行效率。

weixin_42565652的博客 214

Python的CuPy介绍

在数据科学和机器学习领域,处理大规模数据集和高维数组是常见的任务。为了加速这些计算任务,GPU(图形处理器)成为了一种强大的工具。Python的CuPy库提供了一个简单而高效的方式来利用GPU加速计算。本文将介绍CuPy库的基本概念和功能,以及它在加速Python程序中的应用。CuPy是一个基于NumPy接口开发的GPU加速计算库。它允许用户在GPU上执行NumPy风格的数组计算。CuPy库的核心思想是将数组数据存储在GPU内存中,并在GPU上执行计算,以提高计算速度。

牛肉胡辣汤 2375

CRaxsRat v7.6 安装与使用教程(附工具下载)

摘要:本文介绍远程管理工具CRaxsRat v7.6的合法应用与基本操作,强调仅限授权环境使用。该工具支持多客户端管理、TLS加密及文件/进程控制等功能,适用于内网维护与安全测试。安装需Windows 10/11系统及.NET 4.8,步骤包括解压运行、配置监听端口及生成客户端。文中提醒防火墙设置与杀软误报问题,并重申禁止非法用途,建议在虚拟机或隔离环境学习使用。

lzj781210的博客 3795

用 CuPy帮Numpy加速700倍

朋友们,我是床长! 如需转载请标明出处:http://blog.youkuaiyun.com/jiangjunshow 就其自身来说,Numpy 的速度已经较 Python 有了很大的提升。当你发现 Python 代码运行较慢,尤其出现大量的 for-loops 循环时,通常可以将数据处理移入 Numpy 并实现其向量化最高速度处理。 但有一点,上述 Numpy 加速只是在 CPU 上实现的。由于消...

人工智能AI技术 2003

从零开始:使用Labelme完成图像语义分割标注全流程

本文详细介绍了如何使用Labelme工具完成图像语义分割标注的全流程,从环境安装、数据准备到核心标注操作,并重点讲解了如何将标注结果转换为PASCAL VOC等深度学习框架可用的标准数据集格式。文章还提供了关键的避坑指南和高效技巧,帮助初学者快速上手,高效产出高质量的标注数据。

weixin_29073241的博客 492

筑基篇第9节:CUDA内存管理API进阶

CUDA多维内存管理与零拷贝技术 本文介绍了CUDA中高效处理多维数据的内存管理技术。对于二维数据,使用cudaMallocPitch可确保内存对齐访问,提升75%的带宽利用率;三维数据则通过cudaMalloc3D实现切片对齐。配套的cudaMemcpy2D/3D函数能高效处理数据拷贝。此外,零拷贝内存技术允许内核直接访问主机内存,避免显存拷贝开销。这些技术对图像处理、科学计算等应用至关重要,能显著提升多维数据处理的性能。

PeterPan的博客 83

pip 加速_这一招将 Numpy 加速 700 倍!!!

本文经机器之心(微信公众号:almosthuman2014)授权转载,禁止二次转载选自:towardsdatascience,作者:George Seif,参与:杜伟、张倩机器之心整理作为 Python 语言的一个扩展程序库,Numpy 支持大量的维度数组与矩阵运算,为 Python 社区带来了很多帮助。借助于 Numpy,数据科学家、机器学习实践者和统计学家能够以一种简单高效的方式处理...

weixin_39869432的博客 196

嵌入式工程师成长之路(7)——算法学习

算法大全1、风仲达——算法笔记2、坐在马桶上学算法3、啊哈算法4、深度强化学习实验室。

云轩阁 4万+

如何用CuPy来对Numpy进行700倍加速

点击上方“AI公园”,关注公众号,选择加“星标“或“置顶”作者:George Seif编译:ronghuaiyang导读给大家试试GPU的威力!Numpy是Python社...

AI公园 4595

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

将Numpy加速700倍——CuPy

就其自身来说,Numpy 的速度已经较 Python 有了很大的提升。当你发现 Python 代码运行较慢,尤其出现大量的 for-loops 循环时,通常可以将数据处理移入 Numpy 并实现其向量化最高速度处理。 但有一点,上述 Numpy 加速只是在 CPU 上实现的。由于消费级 CPU 通常只有 8 个核心或更少,所以并行处理数量以及可以实现的加速是有限的。 这就催生了新的加速工具——CuPy 库。 何为 CuPy? CuPy 是一个借助 CUDA GPU 库在英伟达 GPU 上实现 Numpy

平平淡淡,戒急用忍,一生学闭嘴。 831

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

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

选自towardsdatascience,作者:George Seif本文转自机器之心(nearhuman2014)本文介绍了如何利用 CuPy 库来加速 Numpy 运算速度。就其自...

小詹学python的博客 683

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

如何将Numpy加速700倍?用 CuPy 呀

转自:机器之心作为 Python 语言的一个扩展程序库,Numpy 支持大量的维度数组与矩阵运算,为 Python 社区带来了很多帮助。借助于 Numpy,数据科学家、机器学习实践者和统计...

深度学习技术前沿 259

CuPy | 教你一招将Numpy加速700倍?

本文转自『机器之心编译』就其自身来说,Numpy 的速度已经较 Python 有了很大的提升。当你发现 Python 代码运行较慢,尤其出现大量的 for-loops 循...

机器学习算法与Python学习 644

把Numpy加速700倍?用 CuPy 吧!

来源:机器之心作为 Python 语言的一个扩展程序库,Numpy 支持大量的维度数组与矩阵运算,为 Python 社区带来了很多帮助。借助于 Numpy,数据科学家、机器学习实践者和统计...

Oner.wv的专栏 414
上一篇: Django 3 学习笔记
下一篇: 程序员必备的 Github 高级搜索技巧
codingpy
博客等级 码龄11年 1873粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值