问题

随着机器学习对模型运算速度的需求越来越强烈,

一直想进行GPU编程,但一直以来这些都是c++的专利

一想到c++里的各种坑,就提不起劲来,毕竟这样来来回回填坑的投入产出,生产效率就会大打折扣

解决方案

让人欣喜的是,随着Python阵营的不断发展壮大,使用python进行GPU编程也越来越便捷了

那么具体有些什么样的包,能针对GPU做些啥事呢?

看看一些具体的代码,就能大概明白:

首先是pycuda,这是它的一个例子:

mod = SourceModule("""__global__ void multiply_them(float *dest, float *a, float *b){const int i = threadIdx.x;dest[i] = a[i] * b[i];}""")

由上面的代码我们可以看出,pycuda将调用gpu的c++代码做了包装,可以在python里直接使用

再看看numba:

@cuda.jit

def increment_by_one(an_array):

pos = cuda.grid(1)

if pos < an_array.size:

an_array[pos] += 1

我们可以发现,numba更进一步,直接使用装饰器的办法让调用GPU的过程更简洁方便

再看看cupy:

import numpy as np

import cupy as cp

x_gpu = cp.array([1, 2, 3])

l2_gpu = cp.linalg.norm(x_gpu)

cupy的调用方法看起来更加简单清晰,直接将np替换为cp即可

比较

所以,从机器学习全流程的角度我做了下汇总:

目前cupy和numba对numpy的支持都不全面,可两者结合使用

从上面可以看出,基本上已经涵盖了机器学习的全流程,大部分包只支持cuda,主要都是为方便使用n卡加速

部分包还是只能使用c/c++语言构建核函数,主要还是受限于cuda驱动的capability

所以实际使用门槛并没有降低,只是将核函数包装到python里使用

GPU的主要优势在于大规模的并行计算,所以我又收集了一些并行计算框架,方便日后使用

至于机器学习/深度学习框架,那就更不用说了:

xgboost已经开始支持GPU,RandomForest也有GPU的版本,

tensorflow, pytorch默认就是支持GPU的,这里就不再赘述

结论

没有框架时,我们希望有效率的python包能快速解决问题,可框架多了,又会出现选择困难症

各种框架都宣称自己效率高,灵活好用,各种benchmark也让人眼花缭乱,目不暇接

到底用哪个框架合适,我把自己的一些经验也总结下,希望能让大家少踩一些坑:

1.对于一般的并行计算任务,使用joblib就能方便完成;

2.对于需要集群或GPU的计算任务,可以选择dask或ray;

这里推荐下dask,dask于机器学习/深度学习的计算包结合的更紧密,推出了dask_ml用于处理分布式机器学习;

3.如果想快速迁移numpy/pandas的代码到gpu,可以使用cupy + cudf的组合方式;

4.如果有复杂自定义的计算以及为了追求性能,可以使用pycuda + numba的形式;

5.对于numpy的替换到底选用cupy还是numba?

这里没有严格的界限,两者对GPU的调用方式设计,实际都会有一定的编码成本

从cupy的基本例子中可以看出,对于部分调用来说cupy更简洁,但是牺牲了cpu并行和分布式并行的功能为代价

所以目前可以持续关注这两个框架

6.对于替换pandas到底选用cudf还是modin?

modin本身并不是专为cuda并行化而设计,它只是底层支持了dask和ray,由此间接的支持了GPU

且到目前为止对pandas方法的支持还不全面,所以这里推荐选择cudf

思考

总之,python作为机器学习的首选语言,正在不断的开疆拓土,不断的降低并行计算的门槛

短短几年前,还只能用xgboost + spark的方式进行分布式训练,转眼现在就有了多种python解决方案

短短几年前,还只能用c++ cuda的方式进行GPU编程,转眼现在也有了多种纯python的框架支持

短短几年前,将GPU进行集群化、虚拟化管理几乎是不可能的,转眼现在也有了可靠的解决方案

……

但是,到目前为止,还没有一款真正能充分智能化的利用并行能力计算的框架:它能综合cpu+gpu+分布式的计算能力,目标就是为了加速计算,得到结果。期待这样的框架诞生!

相信不久的将来,会有更多更强大的python框架出现,不断的加速自动化的进程

让更多的生产力能从原始的轮子中解放出来,加快人工智能的进化!

python gpu加速 显卡_使用Python玩转GPU相关推荐

  1. python gpu加速 显卡_PyTorch-GPU加速实例

    硬件:NVIDIA-GTX1080 软件:Windows7.python3.6.5.pytorch-gpu-0.4.1 一.基础知识 将数据和网络都推到GPU,接上.cuda() 二.代码展示 imp ...

  2. 跑python gpu利用率低_训练效率低?GPU利用率上不去?快来看看别人家的tricks吧~...

    前言 首先,如果你现在已经很熟悉tf.data+estimator了,可以把文章x掉了╮( ̄▽ ̄"")╭ 但是!如果现在还是在进行session.run(..)的话!尤其是苦恼于G ...

  3. python 循环加速_CPU靠边站!使用cuDF在GPU加速Pandas

    标星★公众号     爱你们♥ 作者:George Seif 编译:1+1=6 近期原创文章: ♥ 5种机器学习算法在预测股价的应用(代码+数据) ♥ Two Sigma用新闻来预测股价走势,带你吊打 ...

  4. python跳一跳教程_使用python玩跳一跳超详细使用教程

    在上一篇文章里介绍了使用Python玩微信跳一跳的详细使用教程,不过依旧还是有很多小伙伴有各种各样的问题.为了让各位小伙伴都能使用黑科技,于是再做一个超详细教程.从Python的安装开始,手把手教你一 ...

  5. python大数据免费_用python做大数据

    不学Python迟早会被淘汰?Python真有这么好的前景? 最近几年Python编程语言在国内引起不小的轰动,有超越Java之势,本来在美国这个编程语言就是最火的,应用的非常非常的广泛,而Pytho ...

  6. python简历数据提取_提取python简介

    书籍:掌握Python的网络和安全 Mastering Python for Networking and Security - 2018.pdf 简介 掌握Python的网络和安全 掌握Python ...

  7. python大牛 关东升_《Python从小白到大牛》第4章 Python语法基础

    本章主要为大家介绍Python的一些语法,其中包括标识符.关键字.常量.变量.表达式.语句.注释.模块和包等内容. 标识符和关键字 任何一种计算机语言都离不开标识符和关键字,因此下面将详细介绍Pyth ...

  8. python 客户端应用程序_创建python Web服务和C#客户端应用程序的最佳方法 - c#

    我正在寻找一种简单可靠的方法来创建Python Web Service并从.Net(c#)应用程序中使用它. 我发现了很多不同的库,其中一个库比另一个库好,但是似乎没有人提供关于Python Web ...

  9. python之禅 中文_《Python之禅》中对于Python编程过程中的一些建议

    <Python之禅>中对于Python编程过程中的一些建议 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  <Python之禅>中对于Pyt ...

最新文章

  1. 编程软件python怎样开始学-Python 3.7从零开始学
  2. wxWidgets:wxAutomationObject类用法
  3. ITK:手动遍历具有成形邻域的图像区域
  4. 将替代ListView的RecyclerView 的使用(一)
  5. NULL、nil、Nil、NSNull的区别
  6. 主键与聚集索引的区别
  7. quantum_如何从Firefox Quantum删除Pocket
  8. 如何使WordPress博客添加多个sidebar侧边栏
  9. php5.2 array,详解php 5.2.x 数组操作实例
  10. matlab 电路频率响应_电力电子模型频率响应估计
  11. html5谷歌地图,谷歌地图API和HTML 5
  12. Anaconda虚拟环境中,让Python3使用ROS的cv_bridge
  13. 联想新款小新 Pro 27 一体机 评测 怎么样
  14. 看电影哪款蓝牙耳机降噪效果最好?性价比降噪蓝牙耳机推荐
  15. JS 获取第一个和最后一个,子节点、子元素
  16. 微信应用号(小程序)开发IDE配置
  17. 认识电脑的各大组件 【主板、CPU、内存条、硬盘、显卡、显示器】
  18. ffmpeg编解码应用
  19. html提交成功跳转页面,提交表单后跳转到想要的页面--jQuery form
  20. 倍福EK1110模块介绍

热门文章

  1. mysql 生成流水号 存储过程 订单编号
  2. 关于文件乱码解决方法(英文正常,而中午错误)
  3. Anaconda+tensorflow+opencv安装+pycharm设置(win10系统)
  4. 2018,金融机构的下一个发力点在哪?
  5. 苏宁零售30年,张近东的“无敌”之路
  6. 差分、偏微分方程的解法
  7. 强强联合 极智嘉助力Rhenus部署亚洲首个AMR智能仓
  8. 79、业务代码的结构、分类、分工
  9. 阿里云服务器不同账号专有网络内网互通
  10. Linux下用C实现域名到IP的转换(域名解析)