創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買多久送多久,劃算不套路!
專注于為中小企業(yè)提供成都做網(wǎng)站、網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)古冶免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上1000+企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。這篇文章將為大家詳細(xì)講解有關(guān)將Numpy加速700倍的方法,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
作為 Python 語(yǔ)言的一個(gè)擴(kuò)展程序庫(kù),Numpy 支持大量的維度數(shù)組與矩陣運(yùn)算,為 Python 社區(qū)帶來(lái)了很多幫助。借助于 Numpy,數(shù)據(jù)科學(xué)家、機(jī)器學(xué)習(xí)實(shí)踐者和統(tǒng)計(jì)學(xué)家能夠以一種簡(jiǎn)單高效的方式處理大量的矩陣數(shù)據(jù)。那么 Numpy 速度還能提升嗎?本文介紹了如何利用 CuPy 庫(kù)來(lái)加速 Numpy 運(yùn)算速度。
就其自身來(lái)說(shuō),Numpy 的速度已經(jīng)較 Python 有了很大的提升。當(dāng)你發(fā)現(xiàn) Python 代碼運(yùn)行較慢,尤其出現(xiàn)大量的 for-loops 循環(huán)時(shí),通??梢詫?shù)據(jù)處理移入 Numpy 并實(shí)現(xiàn)其向量化最高速度處理。
但有一點(diǎn),上述 Numpy 加速只是在 CPU 上實(shí)現(xiàn)的。由于消費(fèi)級(jí) CPU 通常只有 8 個(gè)核心或更少,所以并行處理數(shù)量以及可以實(shí)現(xiàn)的加速是有限的。
這就催生了新的加速工具——CuPy 庫(kù)。
何為 CuPy?
CuPy 是一個(gè)借助 CUDA GPU 庫(kù)在英偉達(dá) GPU 上實(shí)現(xiàn) Numpy 數(shù)組的庫(kù)?;?Numpy 數(shù)組的實(shí)現(xiàn),GPU 自身具有的多個(gè) CUDA 核心可以促成更好的并行加速。
CuPy 接口是 Numpy 的一個(gè)鏡像,并且在大多情況下,它可以直接替換 Numpy 使用。只要用兼容的 CuPy 代碼替換 Numpy 代碼,用戶就可以實(shí)現(xiàn) GPU 加速。
CuPy 支持 Numpy 的大多數(shù)數(shù)組運(yùn)算,包括索引、廣播、數(shù)組數(shù)學(xué)以及各種矩陣變換。
如果遇到一些不支持的特殊情況,用戶也可以編寫自定義 Python 代碼,這些代碼會(huì)利用到 CUDA 和 GPU 加速。整個(gè)過(guò)程只需要 C++格式的一小段代碼,然后 CuPy 就可以自動(dòng)進(jìn)行 GPU 轉(zhuǎn)換,這與使用 Cython 非常相似。
在開始使用 CuPy 之前,用戶可以通過(guò) pip 安裝 CuPy 庫(kù):
pip install cupy
使用 CuPy 在 GPU 上運(yùn)行
為符合相應(yīng)基準(zhǔn)測(cè)試,PC 配置如下:
i7–8700k CPU 1080 Ti GPU 32 GB of DDR4 3000MHz RAM CUDA 9.0
CuPy 安裝之后,用戶可以像導(dǎo)入 Numpy 一樣導(dǎo)入 CuPy:
import numpy as np import cupy as cp import time
在接下來(lái)的編碼中,Numpy 和 CuPy 之間的切換就像用 CuPy 的 cp 替換 Numpy 的 np 一樣簡(jiǎn)單。如下代碼為 Numpy 和 CuPy 創(chuàng)建了一個(gè)具有 10 億 1』s 的 3D 數(shù)組。為了測(cè)量創(chuàng)建數(shù)組的速度,用戶可以使用 Python 的原生 time 庫(kù):
### Numpy and CPU s = time.time() *x_cpu = np.ones((1000,1000,1000))* e = time.time() print(e - s)### CuPy and GPU s = time.time() *x_gpu = cp.ones((1000,1000,1000))* e = time.time() print(e - s)
這很簡(jiǎn)單!
令人難以置信的是,即使以上只是創(chuàng)建了一個(gè)數(shù)組,CuPy 的速度依然快得多。Numpy 創(chuàng)建一個(gè)具有 10 億 1』s 的數(shù)組用了 1.68 秒,而 CuPy 僅用了 0.16 秒,實(shí)現(xiàn)了 10.5 倍的加速。
但 CuPy 能做到的還不止于此。
比如在數(shù)組中做一些數(shù)學(xué)運(yùn)算。這次將整個(gè)數(shù)組乘以 5,并再次檢查 Numpy 和 CuPy 的速度。
### Numpy and CPU s = time.time() *x_cpu *= 5* e = time.time() print(e - s)### CuPy and GPU s = time.time() *x_gpu *= 5* e = time.time() print(e - s)
果不其然,CuPy 再次勝過(guò) Numpy。Numpy 用了 0.507 秒,而 CuPy 僅用了 0.000710 秒,速度整整提升了 714.1 倍。
現(xiàn)在嘗試使用更多數(shù)組并執(zhí)行以下三種運(yùn)算:
數(shù)組乘以 5
數(shù)組本身相乘
數(shù)組添加到其自身
### Numpy and CPU s = time.time() *x_cpu *= 5 x_cpu *= x_cpu x_cpu += x_cpu* e = time.time() print(e - s)### CuPy and GPU s = time.time() *x_gpu *= 5 x_gpu *= x_gpu x_gpu += x_gpu* e = time.time() print(e - s)
數(shù)組大?。〝?shù)據(jù)點(diǎn))達(dá)到 1000 萬(wàn),運(yùn)算速度大幅度提升
使用 CuPy 能夠在 GPU 上實(shí)現(xiàn) Numpy 和矩陣運(yùn)算的多倍加速。值得注意的是,用戶所能實(shí)現(xiàn)的加速高度依賴于自身正在處理的數(shù)組大小。下表顯示了不同數(shù)組大?。〝?shù)據(jù)點(diǎn))的加速差異:
數(shù)據(jù)點(diǎn)一旦達(dá)到 1000 萬(wàn),速度將會(huì)猛然提升;超過(guò) 1 億,速度提升極為明顯。Numpy 在數(shù)據(jù)點(diǎn)低于 1000 萬(wàn)時(shí)實(shí)際運(yùn)行更快。此外,GPU 內(nèi)存越大,處理的數(shù)據(jù)也就更多。所以用戶應(yīng)當(dāng)注意,GPU 內(nèi)存是否足以應(yīng)對(duì) CuPy 所需要處理的數(shù)據(jù)。
關(guān)于將Numpy加速700倍的方法就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
文章標(biāo)題:將Numpy加速700倍的方法-創(chuàng)新互聯(lián)
文章網(wǎng)址:http://aaarwkj.com/article10/dgodgo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、靜態(tài)網(wǎng)站、微信小程序、品牌網(wǎng)站制作、手機(jī)網(wǎng)站建設(shè)、品牌網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容