1. 程式人生 > 其它 >深度學習筆記015GPU的安裝與使用

深度學習筆記015GPU的安裝與使用

我的thinkpad沒有GPU(哭哭惹);

我家裡那臺頂配偏科機也沒有GPU!!!(放聲大哭);

所以只能在google上玩玩了,唉。

倒也還可以,最起碼是免費的。

因為我沒有GPU,自然也裝不了cuda……

關於上述GPU引數:https://www.cnblogs.com/testzcy/p/13298748.html

但是咱可以用torch裡面的api檢視thinkpad:

1 print(torch.cuda.is_available())
2 
3 print(torch.device('cpu'),torch.cuda.device('cuda'),torch.cuda.device('
cuda:1')) 4 5 # 查詢可用gpu的數量: 6 print(torch.cuda.device_count())

在google上:

接下來是兩個比較常用的GPu函式:

 1 # 如果有gpu,就返回GPU(i),否則就返回CPU()
 2 def try_gpu(i=0):
 3   if torch.cuda.device_count()>=i+1:
 4     return torch.device(f'cuda:{i}')
 5   return torch.device('cpu')
 6 
 7 # 返回所有GPU,如果沒有GPU,就返回cpu
 8
def try_all_gpus(): 9 devices=[torch.device(f'cuda:{i}') for i in range(torch.cuda.device_count())] 10 return devices if devices else [torch.device('cpu')] 11 12 # 測試一下 13 print(try_gpu()) 14 print(try_gpu(10)) 15 print(try_all_gpus())
1 # 查詢張量所在的裝置
2 x=torch.tensor([1,2,3])
3 x.device
#
將X儲存在GPU上 X=torch.ones(2,3,device=try_gpu()) X
# 可以給try_gpu裡寫編號,這裡我只有一個gpu,就不寫了
Y=torch.ones(2,3,device=try_gpu())
Y
# 在做運算的時候,必須保證兩個變數都在同一個gpu上
# 這裡假設Y在第一塊GPU上,為了運算,我要將Y移動到第0塊GPU
Z=Y.cuda(0) # 引數為目標gpu編號
X+Z

# 注意,X和Y本應可以在不同的device上儲存,但是在GPU之間,或者GPu與CPU之間挪動資料,非常慢,會造成嚴重的效能問題。
# 因此,為了保證效能,設計者禁止了在跨裝置之間的資料不允許運算。
Z.cuda(0) is Z # 自己往自己的裝置copy不會發生任何事情,這也是效能的考慮

重點來了,神經網路與GPU:

# 神經網路與GPU
net=nn.Sequential(nn.Linear(3,1))
net=net.to(device=try_gpu()) #將所有的引數在第0號GPU上copy一份,日後都是在第0號GPU執行

net(X)
net[0].weight.data.device

購買GPU

對於GPU,3件事比較重要:

  1、現存

  2、計算能力(每秒鐘能完成的浮點數運算)

  3、價格

Q&A

現存不夠的時候,可以把batch_size調小;或者把模型規模調小。

GPU使用可以滿負荷,但不要過熱(大於80),容易燒卡。

一般使用gpu訓練,data在net之前to gpu比較好。