偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

用 CuPy 將Numpy加速700倍?

開(kāi)發(fā) 后端
本文介紹了如何利用 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 代碼,用戶(hù)就可以實(shí)現(xiàn) GPU 加速。

CuPy 支持 Numpy 的大多數(shù)數(shù)組運(yùn)算,包括索引、廣播、數(shù)組數(shù)學(xué)以及各種矩陣變換。

如果遇到一些不支持的特殊情況,用戶(hù)也可以編寫(xiě)自定義 Python 代碼,這些代碼會(huì)利用到 CUDA 和 GPU 加速。整個(gè)過(guò)程只需要 C++格式的一小段代碼,然后 CuPy 就可以自動(dòng)進(jìn)行 GPU 轉(zhuǎn)換,這與使用 Cython 非常相似。

在開(kāi)始使用 CuPy 之前,用戶(hù)可以通過(guò) pip 安裝 CuPy 庫(kù): 

  1. 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 安裝之后,用戶(hù)可以像導(dǎo)入 Numpy 一樣導(dǎo)入 CuPy: 

  1. import numpy as np  
  2. import cupy as cp  
  3. 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ù)組的速度,用戶(hù)可以使用 Python 的原生 time 庫(kù): 

  1. ### Numpy and CPU  
  2. s = time.time()  
  3. *x_cpu = np.ones((1000,1000,1000))*  
  4. e = time.time()  
  5. print(e - s)### CuPy and GPU  
  6. s = time.time()  
  7. *x_gpu = cp.ones((1000,1000,1000))*  
  8. e = time.time()  
  9. 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 的速度。 

  1. ### Numpy and CPU  
  2. s = time.time()  
  3. *x_cpu *= 5*  
  4. e = time.time()  
  5. print(e - s)### CuPy and GPU  
  6. s = time.time()  
  7. *x_gpu *= 5*  
  8. e = time.time()  
  9. print(e - s) 

果不其然,CuPy 再次勝過(guò) Numpy。Numpy 用了 0.507 秒,而 CuPy 僅用了 0.000710 秒,速度整整提升了 714.1 倍。

現(xiàn)在嘗試使用更多數(shù)組并執(zhí)行以下三種運(yùn)算:

  1.  數(shù)組乘以 5
  2.  數(shù)組本身相乘
  3.  數(shù)組添加到其自身 
  1. ### Numpy and CPU  
  2. s = time.time()  
  3. *x_cpu *= 5  
  4. x_cpu *= x_cpu  
  5. x_cpu += x_cpu*  
  6. e = time.time()  
  7. print(e - s)### CuPy and GPU  
  8. s = time.time()  
  9. *x_gpu *= 5  
  10. x_gpu *= x_gpu  
  11. x_gpu += x_gpu*  
  12. e = time.time()  
  13. print(e - s) 

結(jié)果顯示,Numpy 在 CPU 上執(zhí)行整個(gè)運(yùn)算過(guò)程用了 1.49 秒,而 CuPy 在 GPU 上僅用了 0.0922 秒,速度提升了 16.16 倍。

數(shù)組大小(數(shù)據(jù)點(diǎn))達(dá)到 1000 萬(wàn),運(yùn)算速度大幅度提升

使用 CuPy 能夠在 GPU 上實(shí)現(xiàn) Numpy 和矩陣運(yùn)算的多倍加速。值得注意的是,用戶(hù)所能實(shí)現(xiàn)的加速高度依賴(lài)于自身正在處理的數(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ù)也就更多。所以用戶(hù)應(yīng)當(dāng)注意,GPU 內(nèi)存是否足以應(yīng)對(duì) CuPy 所需要處理的數(shù)據(jù)。 

 

責(zé)任編輯:龐桂玉 來(lái)源: 馬哥Linux運(yùn)維
相關(guān)推薦

2025-09-09 05:00:00

2019-11-01 10:49:21

技術(shù)開(kāi)源應(yīng)用

2022-08-09 09:10:31

TaichiPython

2019-12-25 14:08:50

Pandas數(shù)據(jù)計(jì)算

2025-10-21 08:54:00

微軟LLM模型

2022-10-27 08:31:31

架構(gòu)

2022-09-20 10:50:34

PandasNumPy

2013-09-24 09:40:41

Java圖形加速

2018-11-26 14:56:15

云計(jì)算UCloud云主機(jī)

2023-05-23 14:06:53

微軟研究

2020-04-07 11:30:12

人工智能AI智慧城市

2020-09-20 21:46:00

量子芯片網(wǎng)絡(luò)

2025-09-22 17:03:09

2022-05-26 08:12:39

PandasApply技巧

2023-11-07 09:00:00

Python

2024-06-12 08:08:08

2022-01-08 19:00:09

NumPyPython編程語(yǔ)言

2022-04-18 13:42:46

區(qū)塊鏈金融安全

2025-01-08 13:15:02

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)