【Python-GPU加速】基于Numba的GPU计算加速(一)基本
Numba是一个可以利用GPU/CPU和CUDA 对python函数进行动态编译,大幅提高执行速度的加速工具包。
- 利用修饰器
@jit,@cuda.jit,@vectorize
等对函数进行编译- JIT:即时编译,提高执行速度
- 基于特定数据类型
- 集中于数值计算(高效编译math,cmath,sub-numpy)
Numba是一个开源的JIT编译器,可以将python或者numpy 的一些数学计算编译为运算速度极快的机器码,从而大幅提升程序的运算效率。它使用通用的LLVM编译库,不仅可以编译用于CPU执行的代码,达到和C相比拟的速度,同时还可以调用GPU库(如NVIDIA的CUDA和AMD的ROCs等)来实现GPU加速,所左右这些,都可以简单的利用python中的装饰器
来实现。
注:本系列主要集中于GPU和CUDA加速的使用。
1. 安装
如果安装过anaconda以及tensorflow等软件,numba可能已经在环境中了。先检查避免重复安装。
请仔细对照官网步骤以免GPU驱动出错!!!
官网步骤>>>link
直接利用conda
或者pip
即可安装:
$ conda install numba
$ pip install numba
GPU 安装请注意驱动!!
对于NvidiaGPU需要安装驱动和CUDA(推荐CUDA 8.0 or later)
#官网介绍:conda直接安装cudatoolkit即可,无需安装cuda
$ conda install cudatoolkit
但*pip安装可能需要自行安装cuda,并设置环境变量
NUMBAPRO_CUDA_DRIVER
:Path to the CUDA driver shared library file
NUMBAPRO_NVVM
:Path to the CUDA libNVVM shared library file
NUMBAPRO_LIBDEVICE
:Path to the CUDA libNVVM libdevice directory which contains .bc files
最后使用:numba -s
来查看安装情况。
对于numba,如果安装不便的情况下可以使用云服务或者在线notebook来学习, 以及一个GPU的notebook
2.基本使用
Numba主要使用修饰器来对python函数进行编译加速,其中包括了@jit,@vectorize,@cuda.jit
等常用修饰器。
import numpy as npdef my_add(a,b):return a+b
使用Numpy加速:
from numba import jit
#利用jit编译加速 cpu
@jit
def my_numba_add(x, y):return x + y
测试一下函数的表现
###
#在jupyter 中可以使用%timeit来测试
import time
def test(n):a = np.random.random(1000)b = np.random.random(1000)# 勘误,下文的测试时间有误# a = np.array((n))# b = np.array((n))tic1 = time.time()my_add(a,b)t1 = time.time()-tic1print('python time:',t1)tic2 = time.time()my_numba_add(a,b)t2 = time.time()-tic2print('Numba time:',t2)print('Numba acclerated %f times'%(t1/t2))
#由于计算比较简单,获得的加速比并不大。有兴趣可以加入复杂运算做测试
>>>test(1000)
python time: 2.956390380859375e-05
Numba time: 1.7881393432617188e-05
Numba acclerated 1.653333 times
pic from pexels.com
ref:
http://numba.pydata.org/
https://www.jianshu.com/p/f342ecf11c26
https://blog.csdn.net/u013975830/article/details/78822919?utm_source=blogxgwz8
【Python-GPU加速】基于Numba的GPU计算加速(一)基本相关推荐
- 云知声 Atlas 超算平台: 基于 Fluid + Alluxio 的计算加速实践
Fluid 是云原生基金会 CNCF 下的云原生数据编排和加速项目,由南京大学.阿里云及 Alluxio 社区联合发起并开源.本文主要介绍云知声 Atlas 超算平台基于 Fluid + Alluxi ...
- Python Numba实现GPU加速
Python与GPU Python作为解释型语言,.py文件一般是没法直接用GPU加速的,关于Python与GPU的结合点,以及GPU.CPU.CUDA.多核.并行.机器码-等底层实现,参考: < ...
- python如何使用gpu_如何使用GPU加速numpy运算
GPU用于为矩阵运算进行加速开始在工业界和研究人员中获得了广泛关注.尤其是近来推出的各种深度学习框架,如mxnet.TensorFlow等,GPU加速更是不可或缺,成了提升运算速度的法宝. 然而,作为 ...
- 基于CUDA的GPU计算PI值
访问[WRITE-BUG数字空间]_[内附完整源码和文档] 基于CUDA的GPU计算PI值.本项目使用CUDA编程模型并行计算PI值,研究GPU与CPU效率的比较,分析不同GPU线程分块对性能的影响. ...
- python numba_如何用numba加速python?
我把写好的markdown导入进来,但是没想到知乎的排版如此感人.如果对知乎排版不满想要看高清清爽版,请移步微信公众号原文 如何用numba加速python?同时欢迎关注 前言 说道现在最流行的语言, ...
- 基于京东云GPU云主机搭建TensorFlow深度学习环境
TensorFlow是一个开放源代码软件库,用于进行高性能数值计算.借助其灵活的架构,用户可以轻松地将计算工作部署到多种平台(CPU.GPU.TPU)和设备(桌面设备.服务器集群.移动设备.边缘设备等 ...
- 3维线程格 gpu_基于CUDA的GPU并行优化重力三维反演
重力勘探由于其成本较低.施工方法方便等, 被广泛应用于大尺度的地质异常体勘查.大范围找矿普查.以及小比例尺密度三维地质建模等工作中.目前常用的反演方法有两种, 2.5维联合3维界面反演[和三维物性反演 ...
- OpenCV之gpu 模块. 使用GPU加速的计算机视觉:GPU上的相似度检测(PNSR 和 SSIM)
GPU上的相似度检测(PNSR 和 SSIM) 学习目标 在 OpenCV的视频输入和相似度测量 教程中我们已经学习了检测两幅图像相似度的两种方法:PSNR和SSIM.正如我们所看到的,执行这些算法需 ...
- 基于Anaconda安装GPU版PyTorch深度学习开发环境
基于Anaconda安装GPU版PyTorch深度学习开发环境 1 安装Anaconda 2 安装GPU计算驱动 2.1 检查是否有合适的GPU 2.2 下载CUDA和cuDNN 2.3 安装CUDA ...
最新文章
- UVa1153 Keep The Customer Satisfied(贪心)
- 计算机中丢失sense3.dll,sense3.dll
- 《大众创业做电商——淘宝与微店 开店 运营 推广 一册通》一一1.3 选择创业的行业...
- sqlite like concat 怎么 替代_Joplin:真正的 Evernote 开源替代品
- linux系统——fread()与read()函数族区别
- the job was canceled什么意思_宇宙中的第一种颜色是什么?
- spark sql 优化心得
- 何时运行 A/B 测试,亚马逊、微软、谷歌等大厂是怎么做的?
- Linux 命令(80)—— chown 命令
- CCF NOI1138 高精度加法
- polyfill 与 transform-runtime
- mybatis-generator自动生成代码(lombok带注释)
- 【论坛项目】简单的论坛小项目-麻雀虽小,五脏俱全
- java机甲类回合制游戏,课内资源 - 基于java的RPG回合制游戏
- Kettle/Pentaho的安装与配置
- 优秀的程序员都热爱写作
- 【Comsol学习】二维非稳态热传导问题
- CAD -2012软件安装的讲解
- 如何搭建一个自己的FTP服务器
- Value cannot be null. (Parameter ‘connectionString‘)
热门文章
- 怪物猎人OL简单测评与碎碎念
- 爬虫实战——网页抓取及信息提取
- 使用 Python 将若干个 PDF 文件合并到一个中
- 上线不足 6 个月,米哈游《原神》移动端疯狂吸金超 65 亿元,钟离上线首日收入破亿
- 微信公众平台开发—成语接龙
- contains unrecognized parameters: [ccs_minimize_roundtrips], [ignore_throttled]]]
- 借助二维码可以建立完整的居民垃圾分类档案
- Linux FTP服务器与客户端(FTP命令 C/C++代码实现)
- 手机python怎么用_手把手教你如何使用Python向手机发送通知
- 无线接入认证web服务器搭建,基于WEB和RADIUS的无线局域网接入认证系统