PyTorch可以指定用來存儲和計算的設備,如使用內存的CPU或者使用顯存的GPU。在默認情況下,PyTorch會將數據創建在內存,然后利用CPU來計算。
PyTorch要求計算的所有輸入數據都在內存或同一塊顯卡的顯存上。
檢測是否可以使用GPU,使用一個全局變量use_gpu,便於后面操作使用
use_gpu = torch.cuda.is_available()
可以使用GPU,use_gpu的值為True,否則為False。當可以使用GPU,我們不想使用,可以直接賦值use_gpu = False
我們在進行轉換時,需要把數據,網絡,與損失函數轉換到GPU上
1.構建網絡時,把網絡,與損失函數轉換到GPU上
model = get_model() loss_f = t.nn.CrossEntropyLoss() if(use_gpu): model = model.cuda() loss_f = loss_f.cuda()
2.訓練網絡時,把數據轉換到GPU上
if (use_gpu): x,y = x.cuda(),y.cuda()
3.取出數據時,需要從GPU准換到CPU上進行操作
if(use_gpu): loss = loss.cpu() acc = acc.cpu()
法一:
device=torch.device("cuda:0" if torch.cuda.is_available() else "cpu") model=model.to(device) x=x.to(device) y=y.to(device)
法二:
model=model.cuda() x=x.cuda() y=y.cuda()
list 列表 不能使用 .to(device)
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
self.device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
model = LSTM().to(device)
model.hidden_cell = (torch.zeros(1, 1, model.hidden_layer_size).to(device),
torch.zeros(1, 1, model.hidden_layer_size).to(device))
y_pred = model(seq.to(device))
single_loss = loss_function(y_pred, labels.to(device))
REF
https://discuss.pytorch.org/t/trying-to-train-lstm-on-gpu/47674
https://blog.csdn.net/yzy__zju/article/details/85014576
https://www.cnblogs.com/sdu20112013/p/12145857.html