1. 程式人生 > >【Python-GPU加速】基於Numba的GPU計算加速(一)基本

【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 np

def 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.array((n))
    b = np.array((n))
    tic1 = time.time()
    my_add(a,b)
    t1 = time.time()-tic1
    print('python time:',t1)
	
    tic2 = time.time()
    my_numba_add(a,b)
    t2 = time.time()-tic2
    print('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