天天看點

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互動

Python程式如何用GPU加速:Tesla、CUDA、Numba

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、手機上的安卓系統。一旦建立好系統,吸引了開發者,使用者非常依賴這套軟體生态體系。

英偉達軟體棧:

Python程式如何用GPU加速:Tesla、CUDA、Numba

GPU程式設計方法:

直接使用CUDA的C/C++版本進行程式設計;

Python使用Numba庫調用CUDA;

CUDA及其軟體棧的缺點:

軟體環境複雜,庫及版本很多;

頂層應用嚴重依賴底層工具庫,入門者很難快讀配置好一整套環境;多環境配置困難;

使用者隻能使用英偉達的顯示卡,成本高;

入門可以考慮雲廠商的Tesla P4虛拟機,大約十幾元/小時。