Pytorch中GPU使用
本文中的內容轉載自:《動手學深度學習》
GPU計算
到目前為止,我們一直在使用CPU計算。對復雜的神經網絡和大規模的數據來說,使用CPU來計算可能不夠高效。在本節中,我們將介紹如何使用單塊NVIDIA GPU來計算。所以需要確保已經安裝好了PyTorch GPU版本。準備工作都完成后,下面就可以通過nvidia-smi命令來查看顯卡信息了。
!nvidia-smi # 對Linux/macOS用戶有效輸出:
Sun Mar 17 14:59:57 2019 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 390.48 Driver Version: 390.48 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================+======================+======================| | 0 GeForce GTX 1050 Off | 00000000:01:00.0 Off | N/A | | 20% 36C P5 N/A / 75W | 1223MiB / 2000MiB | 0% Default | +-------------------------------+----------------------+----------------------++-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| | 0 1235 G /usr/lib/xorg/Xorg 434MiB | | 0 2095 G compiz 163MiB | | 0 2660 G /opt/teamviewer/tv_bin/TeamViewer 5MiB | | 0 4166 G /proc/self/exe 416MiB | | 0 13274 C /home/tss/anaconda3/bin/python 191MiB | +-----------------------------------------------------------------------------+可以看到我這里只有一塊GTX 1050,顯存一共只有2000M(太慘了😭)。
4.6.1 計算設備
PyTorch可以指定用來存儲和計算的設備,如使用內存的CPU或者使用顯存的GPU。默認情況下,PyTorch會將數據創建在內存,然后利用CPU來計算。
用torch.cuda.is_available()查看GPU是否可用:
import torch from torch import nntorch.cuda.is_available() # 輸出 True查看GPU數量:
torch.cuda.device_count() # 輸出 1查看當前GPU索引號,索引號從0開始:
torch.cuda.current_device() # 輸出 0根據索引號查看GPU名字:
torch.cuda.get_device_name(0) # 輸出 'GeForce GTX 1050'4.6.2 Tensor的GPU計算
默認情況下,Tensor會被存在內存上。因此,之前我們每次打印Tensor的時候看不到GPU相關標識。
x = torch.tensor([1, 2, 3]) x輸出:
tensor([1, 2, 3])使用.cuda()可以將CPU上的Tensor轉換(復制)到GPU上。如果有多塊GPU,我們用.cuda(i)來表示第 iii 塊GPU及相應的顯存(iii從0開始)且cuda(0)和cuda()等價。
x = x.cuda(0) x輸出:
tensor([1, 2, 3], device='cuda:0')我們可以通過Tensor的device屬性來查看該Tensor所在的設備。
x.device輸出:
device(type='cuda', index=0)我們可以直接在創建的時候就指定設備。
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')x = torch.tensor([1, 2, 3], device=device) # or x = torch.tensor([1, 2, 3]).to(device) x輸出:
tensor([1, 2, 3], device='cuda:0')如果對在GPU上的數據進行運算,那么結果還是存放在GPU上。
y = x**2 y輸出:
tensor([1, 4, 9], device='cuda:0')需要注意的是,存儲在不同位置中的數據是不可以直接進行計算的。即存放在CPU上的數據不可以直接與存放在GPU上的數據進行運算,位于不同GPU上的數據也是不能直接進行計算的。
z = y + x.cpu()會報錯:
RuntimeError: Expected object of type torch.cuda.LongTensor but found type torch.LongTensor for argument #3 'other'4.6.3 模型的GPU計算
同Tensor類似,PyTorch模型也可以通過.cuda轉換到GPU上。我們可以通過檢查模型的參數的device屬性來查看存放模型的設備。
net = nn.Linear(3, 1) list(net.parameters())[0].device輸出:
device(type='cpu')可見模型在CPU上,將其轉換到GPU上:
net.cuda() list(net.parameters())[0].device輸出:
device(type='cuda', index=0)同樣的,我么需要保證模型輸入的Tensor和模型都在同一設備上,否則會報錯。
x = torch.rand(2,3).cuda() net(x)輸出:
tensor([[-0.5800],[-0.2995]], device='cuda:0', grad_fn=<ThAddmmBackward>)小結
- PyTorch可以指定用來存儲和計算的設備,如使用內存的CPU或者使用顯存的GPU。在默認情況下,PyTorch會將數據創建在內存,然后利用CPU來計算。
- PyTorch要求計算的所有輸入數據都在內存或同一塊顯卡的顯存上。
總結
以上是生活随笔為你收集整理的Pytorch中GPU使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vgh电压高了有什么_一文告诉你电压互感
- 下一篇: PCA方法对特征降维