PyTorch 張量的使用
在這趟旅程之前,我們需要先檢查CUDA和PyTorch是否正確安裝,是可以正常運作,首先在終端機執行指令「nvidia-smi 」
動態示範:
如果有正確安裝CUDA會得到類似以下輸出:
Sat Jan 7 05:32:21 2020
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 460.91.03 Driver Version: 460.91.03 CUDA Version: 11.2 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 GeForce GTX 1650 Off | 00000000:01:00.0 Off | N/A |
| N/A 55C P0 15W / N/A | 374MiB / 3911MiB | 26% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| 0 N/A N/A 2282 G /usr/lib/xorg/Xorg 193MiB |
| 0 N/A N/A 2489 G /usr/bin/gnome-shell 30MiB |
| 0 N/A N/A 3145 G ...382846677369537246,131072 138MiB |
| 0 N/A N/A 8777 G ...gmail.com/app/firefox-bin 7MiB |
+-----------------------------------------------------------------------------+
再來我們用PyTorch確認:
import torch
print(f'PyTorch check :{torch.cuda.is_available()}')
如果輸出為「 PyTorch check :True 」,表示沒問題,就可以開使用pytorch模組來寫程式了。
Tensor是張量的意思,可以當作多維陣列來理解。在PyTorch中,建立張量的方是torch.tensor例如建立一個二階張量,也就是矩陣:
(1)
以PyTorch的語法會寫成:
t = torch.tensor([[1, 3], [2, 4]])
print(f"Tensor :\n{t}")
輸出:
Tensor :
tensor([[1, 3],
[2, 4]])
這裡特別要注意的是tensor可以透過dype指定型態(在某些計算當中必須要指定,例如梯度計算),在文件中有詳系列出:https://pytorch.org/docs/stable/tensors.html 。這裡示範指定tensor的dtype屬性為torch.float64 雙精度浮點數:
t = torch.tensor([[1, 3], [2, 4]],dtype=torch.float64)
print(f"Tensor :\n{t}")
輸出:
Tensor :
tensor([[1., 3.],
[2., 4.]], dtype=torch.float64)
此外,tensor存放的位置也可以指定,在傳統的程式計算中,變數的存放位置一般都是在記憶體中,但加入GPGPU之後,變數存放的位置可以是GPU的記憶體中。指定tensor初始化於指定的設備中則需要先用方法 tensor.device 叫出目前可用的CPU/GPU設備,例如GPU的0號:
device=torch.device('cuda', 0)
# or
device=torch.device('cuda:0’)
至於目前要使用哪個ID可以在終端機下 nvidia-smi 指令確認目前顯卡被電腦安排編號的具體情況。以我這裡為例就是編號0。
接下來,只要把device當參數傳給 torch.tensor 即可:
if torch.cuda.is_available(): # 避免沒有gpu可用
gpu = torch.device('cuda', 0)
t = torch.tensor([[1, 2], [3, 4]], dtype=torch.float64,
device=gpu)
print(f"Tensor from cuda 0:\n{t}")
輸出:
Tensor from cuda 0:
tensor([[1., 2.],
[3., 4.]], device='cuda:0', dtype=torch.float64)
以上就是如何直接指定元素值來建立一個PyTorch 的tensor物件。
本文允許重製、散布、傳輸以及修改,但不得為商業目的之使用
使用時必須註明出處自:楊明翰 , 台灣人工智慧與資料科學研究室 https://aistudio.tw