GPUコンピューティング

「Practice Deep Learning pytorch」の学習ノートの一部は、ご自身のレビューのみを目的としています。

GPUコンピューティング

複雑なニューラルネットワークや大規模なデータの場合、計算にCPUを使用すると効率が悪くなる可能性があります。このセクションでは、単一のNVIDIA GPUを使用して計算する方法を紹介します。したがって、PyTorch GPUバージョンがインストールされていることを確認する必要があります。準備が完了したら、nvidia-smiコマンドを使用してグラフィックカード情報を表示できます。

!nvidia-smi # 对Linux/macOS⽤用户有效 

出力:

2019年3月17日14:59:57
+ ---------------------------------------- --------------------------
----------- +
| NVIDIA-SMI 390.48ドライバーバージョン:390.48
|
| ------------------------------- + ----------------- ----- + -----------
----------- +
| GPU名の永続性-M | Bus-Id Disp.A | 揮発性
アンコア。ECC |
| ファンの一時的なパフォーマンスの電源:使用量/キャップ| メモリ使用量| GPU-Util
ComputeM。
| =============================== + ================= ===== + ===========
=========== |
| 0 GeForce GTX 1050オフ| 00000000:01:00.0オフ|
なし|
| 20%36C P5 N / A / 75W | 1223MiB / 2000MiB | 0%
デフォルト|
+ ------------------------------- + ----------------- ----- + -----------
----------- +
+ -------------------- ----------------------------------------------
---- ------- +
| プロセス:
GPUメモリ|
| GPU PIDタイププロセス名
使用法|| =========================================== ========================
=========== |
| 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 |
+ ------------------------------------------------- -----------------
----------- +

計算機

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' 

TENSORによるGPUコンピューティング

デフォルトでは、Tensorはメモリに保存されます。そのため、以前にTensorを印刷するたびに、GPU関連のロゴを見ることができませんでした。

x = torch.tensor([1, 2, 3])
x

出力:テンソル([1、2、3]) 

.cuda()を使用して、CPU上のTensorをGPU変換(コピー)します複数のGPUがある場合、.cuda(i)を使用してi番目のGPUと対応するビデオメモリ(0から開始)を表し、cuda(0)とcuda()は同等です。

x = x.cuda(0)
x

出力:

tensor([1、2、3]、device = 'cuda:0') 

Tensorのデバイス属性を通じて、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

GPUでデータの操作を実行しても、結果はGPUに保存されます。

y = x**2
y

出力:tensor([1、4、9]、device = 'cuda:0') 

同じ場所に保存されているデータを直接計算に入力することはできません。つまり、CPUに格納されたデータは、GPUに格納されたデータを使用して直接計算でき、同じGPUにあるデータも直接計算できます。

z = y + x.cpu() 

エラーを報告します:

RuntimeError:タイプtorch.cuda.LongTensorのオブジェクトが必要ですが
、引数#3 'other' のタイプtorch.LongTensorが見つかりました

モデルGPU計算

Tensorと同様に、PyTorchモデルも.cudaを介してGPU 変換できます。モデルのパラメーターのデバイス属性を確認することで、モデルを格納しているデバイスを表示できます。

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では、計算に必要なすべての入力データが同じグラフィックスカードの内部メモリまたはビデオメモリにある必要があります

おすすめ

転載: blog.csdn.net/dujuancao11/article/details/108469171