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
效率對比
下面我們通過一些例子來對比一下numpy
和cupy
的執行效率,cupy的函式介面和numpy基本上都是一樣的
我們定義乙個函式來統計numpy
和cupy
的矩陣運算時間
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 進...