自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

比較CPU和GPU中的矩陣計算

開發(fā) 前端
GPU 計算與 CPU 相比能夠快多少?在本文中,我將使用 Python 和 PyTorch 線性變換函數(shù)對其進行測試。

GPU 計算與 CPU 相比能夠快多少?在本文中,我將使用 Python 和 PyTorch 線性變換函數(shù)對其進行測試。

圖片

以下是測試機配置:

CPU:英特爾 i7 6700k (4c/8t) GPU:RTX 3070 TI(6,144 個 CUDA 核心和 192 個 Tensor 核心) 內(nèi)存:32G 操作系統(tǒng):Windows 10

無論是cpu和顯卡都是目前常見的配置,并不是頂配(等4090能夠正常發(fā)貨后我們會給出目前頂配的測試結(jié)果)?

NVIDIA GPU 術(shù)語解釋

CUDA 是Compute Unified Device Architecture的縮寫??梢允褂?CUDA 直接訪問 NVIDIA GPU 指令集,與專門為構(gòu)建游戲引擎而設(shè)計的 DirectX 和 OpenGL 不同,CUDA 不需要用戶理解復(fù)雜的圖形編程語言。但是需要說明的是CUDA為N卡獨有,所以這就是為什么A卡對于深度學(xué)習(xí)不友好的原因之一。

Tensor Cores是加速矩陣乘法過程的處理單元。

例如,使用 CPU 或 CUDA 將兩個 4×4 矩陣相乘涉及 64 次乘法和 48 次加法,每個時鐘周期一次操作,而Tensor Cores每個時鐘周期可以執(zhí)行多個操作。

上面的圖來自 Nvidia 官方對 Tensor Cores 進行的介紹視頻

CUDA 核心和 Tensor 核心之間有什么關(guān)系?Tensor Cores 內(nèi)置在 CUDA 核心中,當(dāng)滿足某些條件時,就會觸發(fā)這些核心的操作。

測試方法

GPU的計算速度僅在某些典型場景下比CPU快。在其他的一般情況下,GPU的計算速度可能比CPU慢!但是CUDA在機器學(xué)習(xí)和深度學(xué)習(xí)中被廣泛使用,因為它在并行矩陣乘法和加法方面特別出色。

上面的操作就是我們常見的線性操作,公式是這個

這就是PyTorch的線性函數(shù)torch.nn.Linear的操作??梢酝ㄟ^以下代碼將2x2矩陣轉(zhuǎn)換為2x3矩陣:

import torch
in_row,in_f,out_f = 2,2,3
tensor = torch.randn(in_row,in_f)
l_trans = torch.nn.Linear(in_f,out_f)
print(l_trans(tensor))

CPU 基線測試

在測量 GPU 性能之前,我需要線測試 CPU 的基準(zhǔn)性能。

為了給讓芯片滿載和延長運行時間,我增加了in_row、in_f、out_f個數(shù),也設(shè)置了循環(huán)操作10000次。

import torch
import torch.nn
import timein_row, in_f, out_f = 256, 1024, 2048
loop_times = 10000

現(xiàn)在,讓我們看看CPU完成10000個轉(zhuǎn)換需要多少秒:

s       = time.time()
tensor = torch.randn(in_row, in_f).to('cpu')
l_trans = torch.nn.Linear(in_f, out_f).to('cpu')
for _ in range(loop_times):

print('cpu take time:',time.time()-s)

#cpu take time: 55.70971965789795

可以看到cpu花費55秒。

GPU計算

為了讓GPU的CUDA執(zhí)行相同的計算,我只需將. To (' cpu ')替換為. cuda()。另外,考慮到CUDA中的操作是異步的,我們還需要添加一個同步語句,以確保在所有CUDA任務(wù)完成后打印使用的時間。

s       = time.time()
tensor = torch.randn(in_row, in_f).cuda()
l_trans = torch.nn.Linear(in_f, out_f).cuda()
for _ in range(loop_times):


torch.cuda.synchronize()
print('CUDA take time:',time.time()-s)

#CUDA take time: 1.327127456665039

并行運算只用了1.3秒,幾乎是CPU運行速度的42倍。這就是為什么一個在CPU上需要幾天訓(xùn)練的模型現(xiàn)在在GPU上只需要幾個小時。因為并行的簡單計算式GPU的強項

如何使用Tensor Cores

CUDA已經(jīng)很快了,那么如何啟用RTX 3070Ti的197Tensor Cores?,啟用后是否會更快呢?在PyTorch中我們需要做的是減少浮點精度從FP32到FP16。,也就是我們說的半精度或者叫混合精度

s       = time.time()
tensor = torch.randn(in_row, in_f).cuda().half()
layer = torch.nn.Linear(in_f, out_f).cuda().half()
for _ in range(loop_times):

torch.cuda.synchronize()
print('CUDA with tensor cores take time:',time.time()-s)

#CUDA with tensor cores take time:0.5381264686584473

又是2.6倍的提升。

總結(jié)

在本文中,通過在CPU、GPU CUDA和GPU CUDA +Tensor Cores中調(diào)用PyTorch線性轉(zhuǎn)換函數(shù)來比較線性轉(zhuǎn)換操作。下面是一個總結(jié)的結(jié)果:

圖片

NVIDIA的CUDA和Tensor Cores確實大大提高了矩陣乘法的性能。

后面我們會有兩個方向的更新

1、介紹一些簡單的CUDA操作(通過Numba),這樣可以讓我們了解一些細節(jié)

2、我們會在拿到4090后發(fā)布一個專門針對深度學(xué)習(xí)的評測,這樣可以方便大家購買可選擇

責(zé)任編輯:華軒 來源: DeepHub IMBA
相關(guān)推薦

2021-04-13 13:21:58

CPUGPU異構(gòu)

2019-08-21 09:24:45

GPUCPU深度學(xué)習(xí)

2019-01-03 14:21:51

CPUGPU系統(tǒng)

2019-07-22 15:37:56

CPU核心GPU

2010-06-22 13:11:18

超級計算機未來

2020-06-28 09:40:58

操作系統(tǒng)GPUCPU

2011-06-21 14:23:15

GPUCPU高性能計算

2019-06-03 20:00:09

LinuxCPU溫度GPU溫度

2023-12-11 07:52:19

圖像處理矩陣計算計算機視覺

2024-09-27 08:10:57

2012-09-24 09:35:31

APUCPUGPU

2024-10-23 09:05:07

PixijsMatrixTransform

2018-12-24 10:53:48

2021-06-09 13:10:01

CPUGPUVCU

2021-07-06 06:26:43

動態(tài)計算圖GPU深度學(xué)習(xí)

2018-11-13 13:10:10

CPUGPUTPU

2024-09-09 04:00:00

GPU人工智能

2010-06-21 10:31:25

GPU

2009-03-21 15:15:33

Nehalem服務(wù)器HPC

2023-02-08 17:04:14

Python計算庫數(shù)學(xué)函數(shù)
點贊
收藏

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