<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          如何將Numpy加速700倍?用 CuPy 呀

          共 2981字,需瀏覽 6分鐘

           ·

          2021-07-10 11:29

          來源:機(jī)器之心
          作為 Python 語言的一個(gè)擴(kuò)展程序庫,Numpy 支持大量的維度數(shù)組與矩陣運(yùn)算,為 Python 社區(qū)帶來了很多幫助。借助于 Numpy,數(shù)據(jù)科學(xué)家、機(jī)器學(xué)習(xí)實(shí)踐者和統(tǒng)計(jì)學(xué)家能夠以一種簡單高效的方式處理大量的矩陣數(shù)據(jù)。那么 Numpy 速度還能提升嗎?本文介紹了如何利用 CuPy 庫來加速 Numpy 運(yùn)算速度。

          就其自身來說,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 庫。


          何為 CuPy?


          CuPy 是一個(gè)借助 CUDA GPU 庫在英偉達(dá) GPU 上實(shí)現(xiàn) Numpy 數(shù)組的庫?;?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è)過程只需要 C++格式的一小段代碼,然后 CuPy 就可以自動(dòng)進(jìn)行 GPU 轉(zhuǎn)換,這與使用 Cython 非常相似。


          在開始使用 CuPy 之前,用戶可以通過 pip 安裝 CuPy 庫:

          pip install cupy

          使用 CuPy 在 GPU 上運(yùn)行


          為符合相應(yīng)基準(zhǔn)測試,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

          在接下來的編碼中,Numpy 和 CuPy 之間的切換就像用 CuPy 的 cp 替換 Numpy 的 np 一樣簡單。如下代碼為 Numpy 和 CuPy 創(chuàng)建了一個(gè)具有 10 億 1』s 的 3D 數(shù)組。為了測量創(chuàng)建數(shù)組的速度,用戶可以使用 Python 的原生 time 庫:

          ### 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)

          這很簡單!


          令人難以置信的是,即使以上只是創(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 再次勝過 Numpy。Numpy 用了 0.507 秒,而 CuPy 僅用了 0.000710 秒,速度整整提升了 714.1 倍。


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


          1. 數(shù)組乘以 5

          2. 數(shù)組本身相乘

          3. 數(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)


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


          數(shù)組大?。〝?shù)據(jù)點(diǎn))達(dá)到 1000 萬,運(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 萬,速度將會(huì)猛然提升;超過 1 億,速度提升極為明顯。Numpy 在數(shù)據(jù)點(diǎn)低于 1000 萬時(shí)實(shí)際運(yùn)行更快。此外,GPU 內(nèi)存越大,處理的數(shù)據(jù)也就更多。所以用戶應(yīng)當(dāng)注意,GPU 內(nèi)存是否足以應(yīng)對(duì) CuPy 所需要處理的數(shù)據(jù)。

          原文鏈接:https://towardsdatascience.com/heres-how-to-use-cupy-to-make-numpy-700x-faster-4b920dda1f56


          加入知識(shí)星球【我們談?wù)摂?shù)據(jù)科學(xué)】

          500+小伙伴一起學(xué)習(xí)!








          · 推薦閱讀 ·

          使用Matplotlib & Cartopy繪制我國臺(tái)風(fēng)路徑圖

          這款地圖可視化神器終于支持新版jupyter lab了!

          這款拓展讓你的jupyter lab使用更高效



          瀏覽 26
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  99视频在线免费观看 | 久久综合se婷婷 | 黄色一级片免费直播 | 操芘网站大全 | 美女扣逼网站 |