pytorch学習ノート(18):Use-GPu
このセクションでは、単一のNVIDIA GPUを使用して計算する方法について説明します.PyTorch GPUバージョンがインストールされていることを確認する必要があります.準備が完了すると、
出力:
1.計算装置
PyTorchは、メモリを使用するCPUや、ディスプレイメモリを使用するGPUなど、記憶および計算のためのデバイスを指定することができる.デフォルトでは、PyTorchはメモリにデータを作成し、CPUで計算します.
GPU数の表示:
現在のGPUインデックス番号を表示します.インデックス番号は0から始まります.
インデックス番号に基づいてGPU名を表示するには:
2.
デフォルトでは、
出力:
出力:
出力:
作成時にデバイスを直接指定できます.
出力:
GPU上のデータを演算すると、結果はGPU上に格納される.
出力:
なお、異なる位置に格納されたデータは、直接計算することはできない.すなわち、CPUに格納されたデータはGPUに格納されたデータと直接演算することはできず、異なるGPUに格納されたデータも直接計算することはできない.
エラーが表示されます.
3.モデルのGPU計算
出力:
可視モデルはCPUにあり、GPUに変換されます.
出力:
同様に、モデル入力の
出力:
小結 PyTorchは、メモリを使用するCPUや、ディスプレイメモリを使用するGPUなどの記憶および計算のためのデバイスを指定することができる.デフォルトでは、PyTorchはメモリにデータを作成し、CPUを使用して計算します. PyTorchは、計算されたすべての入力データがメモリまたは同じグラフィックスカードのディスプレイメモリに存在することを要求します.
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 |
+-----------------------------------------------------------------------------+
1.計算装置
PyTorchは、メモリを使用するCPUや、ディスプレイメモリを使用するGPUなど、記憶および計算のためのデバイスを指定することができる.デフォルトでは、PyTorchはメモリにデータを作成し、CPUで計算します.
torch.cuda.is_available()
でGPUが利用可能かどうかを確認します.import torch
from torch import nn
torch.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'
2.
Tensor
のGPU計算デフォルトでは、
Tensor
がメモリに存在します.そのため、これまでTensor
を印刷するたびにGPU関連の標識が見えませんでした.x = torch.tensor([1, 2, 3])
x
出力:
tensor([1, 2, 3])
.cuda()
を使用して、CPU上のTensor
をGPUに変換(コピー)することができる.複数のGPUがある場合、我々は、第i i iブロックGPUおよび対応するメモリ(i i i iは0から始まる)を.cuda(i)
で表し、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'
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=)
小結