Python程序如何⽤GPU加速:Tesla、CUDA、Numba
概念解析
⾸先,我们先整理⼀下:平时在使⽤⼀些GPU加速算法是都是在Python环境下执⾏,但是⼀般的Python代码是没办法使⽤GPU加速的,因为GPU是更接近计算机底层的硬件,Python⼀类的⾼级语⾔是没办法直接和GPU沟通的。
然后就引出话题的重点:硬件的加速必须使⽤硬件语⾔。
查询Python+GPU关键字,除了TensorFlow,另外出镜率⽐较⾼的⼏个概念是:Numba、CUDA、PyCUDA、minpy。
所以如果要想使对Python和GPU加速相关知识了解更深⼊,必须了解⼀些计算机的底层知识。
GPU概念相关
GPU(Graphics Processing Unit),视觉处理器、图形显⽰卡。
GPU负责渲染出2D、3D、VR效果,主要专注于计算机图形图像领域。后来⼈们发现,GPU⾮常适合并⾏计算,可以加速现代科学计
算,GPU也因此不再局限于游戏和视频领域。
⽆论是CPU还是GPU,在进⾏计算时,都需要⽤核⼼(Core,也就是ALU+寄存器)来做算术逻辑运算。
⼀个核⼼只能顺序执⾏某项任务,为了同时并⾏处理更多任务,芯⽚公司开发出了多核架构,只要相互之间没有依赖,每个核⼼做⾃⼰的事情,多核之间互不⼲扰,就可以达到并⾏计算的效果。
CPU的局限
个⼈桌⾯电脑CPU只有2~8个核⼼Core,数据中信的服务器上也只有20到40个核⼼,GPU却有上千个核⼼。
然⽽,CPU和GPU的核⼼并不相同,GPU的核⼼只能专注于某些特性的任务,⽽CPU核⼼具有更⼴泛的计算能⼒。
CPU更通⽤,起到协调管理的作⽤,GPU功能局限在计算特定任务。
CPU与GPU交互
CPU从主存(Main Memory)中读写数据,并通过总线(Bus)与GPU交互。
GPU在许多计算核⼼之外,也有⾃⼰独⽴的存储,称为显存。
GPU核⼼在做计算时,只能直接从显存中读写数据,程序员需要在代码中指明哪些数据需要从内存和显存之间相互拷贝,这些数据传输都是在总线上,因此总线(NVLink技术、PCI-E技术…)的传输速度和带宽也会是部分计算任务的瓶颈。
因为CPU和GPU是分开的,在英伟达的设计理念中,CPU和主存被称为Host,GPU被称为Device。
Host和·概念会贯穿整个英伟达GPU编程。
使⽤CPU和GPU组合来加速计算,也被称为异构计算。
世界第⼀的超级计算机Summit使⽤了9216个IBM POWER9 CPU和27648个英伟达Tesla GPU。
GPU架构
Turing 图灵
2018年发布
消费显卡:GeForce 2080 Ti
python虚拟机Volta 伏特
2017年发布
专业显卡:Tesla V100(16或32GB显存,5120个核⼼)
Pascal 帕斯卡
2016年发布
专业显卡:Tesla P100(12或16GB显存,3584个核⼼)
英伟达设计理念中,多个⼩核⼼组成⼀个Streaming Multiprocessor(SM),⼀张GPU卡⼜多个SM。
英伟达主要以SM为运算和调度的基本单元。
单个SM的结构包括:
针对不同计算的⼩核⼼(绿⾊⼩格⼦),包括优化深度学习的TENSOR CORE,32个64位浮点核⼼(FP64),64个整型核⼼(INT),64个32位浮点核⼼(FP32);
计算核⼼直接从寄存器(Register)中读写数据;
调度和分发器(Scheduler和Dispatch Unit);
L0和L1级缓存;
前⾯以物理学家命名的架构区分主要针对设计,对消费者⽽⾔,英伟达主要⼜两条产品线:
消费级产品 GeForce系列:GeForce 2080 Ti…
⾼性能计算产品 Telsa系列:Telsa V100、Telsa P100、Telsa P40…
GPU的软件⽣态
前⾯描述的都是GPU的物理层⾯的结构,英伟达之所以能在⼈⼯智能时代成功,除了上述硬件卓越之外,更主要的是率先提供了可编程的软件架构。
早期GPU编程不友好,2007年英伟达发布CUDA编程模型之后改变了这⼀情形。
CUDA对于GPU就像个⼈电脑上的Windows、⼿机上的安卓系统。⼀旦建⽴好系统,吸引了开发者,⽤户⾮常依赖这套软件⽣态体系。
英伟达软件栈:
GPU编程⽅法:
直接使⽤CUDA的C/C++版本进⾏编程;
Python使⽤Numba库调⽤CUDA;
CUDA及其软件栈的缺点:
软件环境复杂,库及版本很多;
顶层应⽤严重依赖底层⼯具库,⼊门者很难快读配置好⼀整套环境;多环境配置困难;
⽤户只能使⽤英伟达的显卡,成本⾼;
⼊门可以考虑云⼚商的Tesla P4虚拟机,⼤约⼗⼏元/⼩时。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论