本文將通過具體代碼示例,詳細介紹如何在PyTorch中利用GPU進行張量計算和模型訓練,包含設備查詢、數據遷移以及模型部署等完整流程。
1. 查看GPU硬件信息
使用?nvidia-smi
?命令檢查GPU狀態和進程信息:
# 查看GPU信息
!nvidia-smi
輸出示例:
顯示當前GPU型號(如NVIDIA GeForce RTX 3060)、顯存使用情況和運行中的進程。
2. 計算設備管理
2.1 定義設備對象
import torch
from torch import nn# 定義不同設備對象
device_cpu = torch.device('cpu')
device_gpu0 = torch.cuda.device('cuda')
device_gpu1 = torch.cuda.device('cuda:1')
device_cpu, device_gpu0, device_gpu1
輸出:
(device(type='cpu'), <torch.cuda.device at 0x...>, <torch.cuda.device at 0x...>)
2.2 查詢可用GPU數量
torch.cuda.device_count() # 返回可用GPU數量
輸出:1
(表示系統中有1塊可用GPU)
3. 靈活選擇設備
3.1 按需選擇GPU或CPU
def try_gpu(i=0):"""選擇指定GPU,若不可用則返回CPU"""if torch.cuda.device_count() >= i + 1:return torch.device(f'cuda:{i}')return torch.device('cpu')def try_all_gpu():"""返回所有可用GPU,若無則返回CPU"""devices = [torch.device(f'cuda:{i}') for i in range(torch.cuda.device_count())]return devices if devices else [torch.device('cpu')]try_gpu(), try_gpu(10), try_all_gpu()
?輸出:
(device(type='cuda', index=0), device(type='cpu'), [device(type='cuda', index=0)])
4. 張量與GPU操作
4.1 默認設備查詢
x = torch.tensor([1, 2, 3])
x.device # 默認在CPU上
輸出:device(type='cpu')
4.2 顯存中創建張量
x_gpu = torch.ones(2, 3, device='cuda:0') # 在GPU 0上創建全1張量
x_gpu
輸出:
tensor([[1., 1., 1.],[1., 1., 1.]], device='cuda:0')
4.3 GPU間計算
y_gpu = torch.rand(2, 3, device='cuda:0')
x_gpu + y_gpu # 必須同一設備才能計算
輸出示例:
tensor([[1.4571, 1.4172, 1.1364],[1.7572, 1.3977, 1.2402]], device='cuda:0')
5. 神經網絡模型部署到GPU
5.1 模型遷移
# 定義一個簡單神經網絡
net = nn.Sequential(nn.Linear(3, 1))
net = net.to(device='cuda') # 將模型參數移至GPU# 輸入數據需與模型在同一設備
output = net(x_gpu)
output
輸出示例:
tensor([[-0.4271],[-0.4271]], device='cuda:0', grad_fn=<AddmmBackward0>)
5.2 驗證參數位置
net[0].weight.data.device # 檢查參數存儲位置
輸出:device(type='cuda', index=0)
6. 關鍵注意事項
-
設備一致性:輸入數據和模型必須在同一設備(CPU/GPU)上才能進行計算。
-
顯存管理:及時釋放不再使用的GPU張量(
del tensor
?+?torch.cuda.empty_cache()
)。 -
多GPU支持:可通過
torch.nn.DataParallel
實現多卡并行訓練。
總結
本文演示了PyTorch中GPU加速的核心操作,包括設備選擇、張量遷移和模型部署。合理利用GPU可顯著加速深度學習任務,建議在訓練大型模型時優先使用GPU環境。如果遇到CUDA相關錯誤,請檢查驅動版本和PyTorch的GPU支持安裝。