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
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虛擬機,大約十幾元/小時。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM