cupy利用GPU來加速你的numpy操作

2021-10-07 16:36:26 字數 2572 閱讀 3590

numpy是python中常用的乙個矩陣運算庫,而且numpy的底層都是採用c實現的,所以執行效率和速度也是很快的,但numpy是利用cpu來進行矩陣運算的,如果遇到大資料的矩陣運算,你會發現numpy真的很慢。

那有沒有什麼辦法來加速呢?想到大矩陣的運算肯定會想多使用gpu來計算,就讓我們來看看numpy的gpu版本cupy

環境要求

作業系統 其他

安裝cupy

pip install cupy
git clone 

cd cupy

pip install

.

在安裝之前需要先確定cuda的版本,以安裝對應的版本,否則在後面使用cupy的是會出現一些錯誤

#檢視cuda的版本

nvcc -v

#輸出資訊

#nvcc: nvidia (r) cuda compiler driver

#built on fri_sep__1_21:08:03_cdt_2017

#cuda compilation tools, release 9.0, v9.0.176

#通過上面的資訊,可以看出cuda的版本是9.0

#安裝cuda為9.0版本的cupy

pip install cupy-cuda90

效率對比

下面我們通過一些例子來對比一下numpycupy的執行效率,cupy的函式介面和numpy基本上都是一樣的

我們定義乙個函式來統計numpycupy的矩陣運算時間

import time

import numpy as np

import cupy as cp

deftest_dot_time

(is_gpu,num,dim=

1024

,times=10)

:#用來統計每次計算消耗的時間

consum_time =

#使用cupy來運算矩陣的點積

if is_gpu:

matrix = cp

#使用numpy來運算矩陣的點積

else

: matrix = np

#測試10次,取平均值

for i in

range

(times)

: start_time = time.time(

)#初始化乙個num×dim的二維矩陣

a = matrix.random.normal(size=num*dim)

a = a.reshape(

(num,dim)

)#初始化乙個dim×1的二維矩陣

b = matrix.random.normal(size=dim*1)

#矩陣的點積

c = matrix.dot(a,b)

end_time = time.time(

)print

("a time consume %.2f sec"

%np.mean(consum_time)

)

對比100000×1024矩陣和1024×1矩陣的點積運算的消耗時間,計算10次統計最終的平均時間

num =

100000

test_dot_time(

true

,num)

#a time consume 0.18 sec

test_dot_time(

false

,num)

#a time consume 5.48 sec

通過對比可以發現,cupy要比numpy節省30倍的時間消耗,這裡只是展示了一種運算,如果你的矩陣運算越多,矩陣越大使用cupy運算節省的時間會更加明顯。

那麼是不是以後我們可以使用cupy來替代numpy了呢?這也不一定,我們來看看當num較小時的情況,當num為10的時候會怎麼樣呢?

num =

10test_dot_time(

true

,num,times=10)

# a time consume 0.20425036 sec

test_dot_time(

false

,num,times=10)

#a time consume 0.00120769 sec

這時候居然numpy要比cupy更快?這是為什麼呢?

一方面是因為cpu到gpu這裡有乙個資料傳輸,而且cpu中還有乙個cache可以用來計算,這個計算速度要比gpu快,不過這個大小有限大概幾十m。這就是為什麼小資料cpu要比gpu快的原因。

使用GPU加速你的xgboost lightgbm

當面對結構化資料的機器學習任務時,樹模型往往可以作為首選進行嘗試。然而如果你的資料量大 百萬或千萬 且恰好你又使用了交叉驗證以及網格搜尋,那想必如何加速訓練便是你接下來要考慮的事情。使用gpu並非tensorflow等這些深度學習框架的專項,xgboost 以及 lightgbm之類的整合學習工具包...

加速你的 Ubuntu Feisty Fawn

方法來自這篇文章 feisty performance fly like a butterfly 中文翻譯 作者總結了很多關於優化和加速 feisty 的方法。按照下面的方法來做,到底有沒有實際效果,就得大家試了才知道,至少我使用後,發現啟動速度有了很大的提高。注意 以下部分步驟如果修改錯誤,會導致...

加速你的Python

當你尋找這種問題的時候,很開心,你的 水平以及對python的各種資料型別的認知會上公升乙個台階!我是什麼時候開始思考這種問題的呢?當然是有一天發現模型跑資料的時候,程式一直在執行但卻一直不出最終結果,然後發現作者寫的 真的是低效,不得不說,會寫模型的人不一定會寫 1.用 set 而非 list 進...