【PyTorch教程】P30 GPU加速
生活随笔
收集整理的這篇文章主要介紹了
【PyTorch教程】P30 GPU加速
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
P30 GPU加速
- 調(diào)用 GPU的兩種方法:
- 1、調(diào)用 .cuda()
- 在這三個(gè)內(nèi)容后面,加上 .cuda()方法
下圖中,在原來的三種內(nèi)容上,分別加上.cuda( ),就可以了:讓他們的返回值,繼續(xù)等于原來的變量名,就可以不用管框架中的其他內(nèi)容了:
-
還有個(gè)loss function,不截圖了。
-
還有更規(guī)范的寫法,這樣的寫法,可以避免沒有g(shù)pu的電腦上跑不通的弊端:
-
在視頻中,還比較了cup和gpu的計(jì)算時(shí)間:
-
注意在哪里添加start_time和end_time,以及做差:
Cpu:
Gpu:
-
后面說了Google的GPU加速方法:
-
需要登錄google賬號(hào),再訪問:Google.colaboratory.com
-
具體操作:
-
新建筆記本:
print(torch.version)
print(torch.cuda.is_avaiable( )):應(yīng)該是報(bào)錯(cuò)的:按圖中位置,找到筆記本設(shè)置,選擇gpu:
- 選擇好了之后,重新載入import torch等環(huán)境:
-
!nvidia-smi 查看硬件版本(上面的代碼都是python代碼,直接 + 代碼,點(diǎn)擊三角運(yùn)行就行;想要在terminal中運(yùn)行命令,在最前面加上!就可以)
-
修改 筆記本設(shè)置 找到 硬件加速器 設(shè)為 GPU
- 還是挺好用的,不過,我最近登錄之后被分配的GPU不是T4了,也沒有16Gb顯存:
可以運(yùn)行的代碼
# !usr/bin/env python3 # -*- coding:utf-8 -*-""" author :24nemodate :2021年07月12日 """import timeimport torch import torchvision # from model import * # 準(zhǔn)備數(shù)據(jù)集 from torch import nn from torch.utils.data import DataLoader from torch.utils.tensorboard import SummaryWritertrain_data = torchvision.datasets.CIFAR10(root="../dataset", train=True, transform=torchvision.transforms.ToTensor(),download=True) test_data = torchvision.datasets.CIFAR10(root="../dataset", train=False, transform=torchvision.transforms.ToTensor(),download=True)# length 長度 train_data_size = len(train_data) test_data_size = len(test_data) # 如果train_data_size=10, 訓(xùn)練數(shù)據(jù)集的長度為:10 print("訓(xùn)練數(shù)據(jù)集的長度為:{}".format(train_data_size)) print("測(cè)試數(shù)據(jù)集的長度為:{}".format(test_data_size))# 利用 DataLoader 來加載數(shù)據(jù)集 train_dataloader = DataLoader(train_data, batch_size=64) test_dataloader = DataLoader(test_data, batch_size=64)# 創(chuàng)建網(wǎng)絡(luò)模型 class Tudui(nn.Module):def __init__(self):super(Tudui, self).__init__()self.model = nn.Sequential(nn.Conv2d(3, 32, 5, 1, 2),nn.MaxPool2d(2),nn.Conv2d(32, 32, 5, 1, 2),nn.MaxPool2d(2),nn.Conv2d(32, 64, 5, 1, 2),nn.MaxPool2d(2),nn.Flatten(),nn.Linear(64 * 4 * 4, 64),nn.Linear(64, 10))def forward(self, x):x = self.model(x)return xtudui = Tudui() if torch.cuda.is_available():tudui = tudui.cuda() # 這是GPU加速訓(xùn)練的第一部分# 損失函數(shù) loss_fn = nn.CrossEntropyLoss() if torch.cuda.is_available():loss_fn = loss_fn.cuda() # 這是GPU加速訓(xùn)練的第二部分 # 優(yōu)化器 # learning_rate = 0.01 # 1e-2=1 x (10)^(-2) = 1 /100 = 0.01 learning_rate = 1e-2 optimizer = torch.optim.SGD(tudui.parameters(), lr=learning_rate)# 設(shè)置訓(xùn)練網(wǎng)絡(luò)的一些參數(shù) # 記錄訓(xùn)練的次數(shù) total_train_step = 0 # 記錄測(cè)試的次數(shù) total_test_step = 0 # 訓(xùn)練的輪數(shù) epoch = 10# 添加tensorboard writer = SummaryWriter("../logs_train")# 添加開始時(shí)間start_time = time.time()for i in range(epoch):print("-------第 {} 輪訓(xùn)練開始-------".format(i + 1))# 訓(xùn)練步驟開始tudui.train()for data in train_dataloader:imgs, targets = dataif torch.cuda.is_available():imgs = imgs.cuda() # 這兩行是GPU加速的第三部分(未完)targets = targets.cuda()outputs = tudui(imgs)loss = loss_fn(outputs, targets)# 優(yōu)化器優(yōu)化模型optimizer.zero_grad()loss.backward()optimizer.step()total_train_step = total_train_step + 1if total_train_step % 100 == 0:end_time = time.time() # 結(jié)束時(shí)間print(end_time - start_time)print("訓(xùn)練次數(shù):{}, Loss: {}".format(total_train_step, loss.item()))writer.add_scalar("train_loss", loss.item(), total_train_step)# 測(cè)試步驟開始tudui.eval()total_test_loss = 0total_accuracy = 0with torch.no_grad():for data in test_dataloader:imgs, targets = dataif torch.cuda.is_available(): # 這兩行也是必不可少的,GPU加速訓(xùn)練的部分imgs = imgs.cuda()targets = targets.cuda()outputs = tudui(imgs)loss = loss_fn(outputs, targets)total_test_loss = total_test_loss + loss.item()accuracy = (outputs.argmax(1) == targets).sum()total_accuracy = total_accuracy + accuracyprint("整體測(cè)試集上的 Loss: {}".format(total_test_loss))print("整體測(cè)試集上的正確率: {}".format(total_accuracy / test_data_size))writer.add_scalar("test_loss", total_test_loss, total_test_step)writer.add_scalar("test_accuracy", total_accuracy / test_data_size, total_test_step)total_test_step = total_test_step + 1torch.save(tudui, "tudui_{}.pth".format(i))print("模型已保存")writer.close()'''兩種GPU訓(xùn)練方式方式一:網(wǎng)絡(luò)模型、損失函數(shù)、數(shù)據(jù)(輸入、標(biāo)注)調(diào)用 .cuda以上三者有cuda方法,能夠?qū)崿F(xiàn) '''""" google的GPU"""完整目錄
- P6-P7 數(shù)據(jù)加載
- P8-9 Tensorboard使用
- P10-11 Transform的用法
- P12-13 常用的tranforms
- P14 torchvision中的數(shù)據(jù)集的使用
- P15 dataloader的使用
- P16 nn.Module
- P17 卷積
- P18 卷積層使用
- P19 池化
- P20 ReLU
- P21線性層和其它層
- P22 squential和小實(shí)戰(zhàn)
- P23 loss function
- P24 優(yōu)化器
- P25 pytorch中現(xiàn)有模型
- P26 網(wǎng)絡(luò)模型的保存和加載
- P27、28、29 完整的模型套路
- P30 GPU加速
- P31 GPU加速_2
- P32 完整的模型驗(yàn)證套路
- P33 github的使用
總結(jié)
以上是生活随笔為你收集整理的【PyTorch教程】P30 GPU加速的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: centos 关于logrotate的使
- 下一篇: 2022-01-06至10交易记录