torch.cuda用於設定和執行cuda操作。它跟蹤當前選定的gpu,預設情況下,您分配的所有cuda tensor都將在該裝置上建立。
無論怎麼樣,一旦分配了乙個張量,就可以對它進行操作,而不必考慮所選的裝置,結果將始終與張量放在同乙個裝置上。
預設情況下不允許跨gpu操作,除了copy_u()和其他具有類似於copy的功能的方法,如to()和cuda()。除非使用點對點記憶體訪問,否則任何試圖在分布於不同裝置上的tensor啟動的操作嘗試都將引發錯誤。
下面有一些例子:
cuda = torch.
device
('cuda'
) # 預設的 cuda 裝置
cuda0 = torch.
device
('cuda:0'
)cuda2 = torch.
device
('cuda:2'
) # gpu
2(這些裝置以0為開始索引)
x = torch.
tensor([
1.,2.]
, device=cuda0)
# x.device is device
(type=
'cuda'
, index=0)
y = torch.
tensor([
1.,2.]
).cuda()
# y.device is device
(type=
'cuda'
, index=0)
with torch.cuda.
device(1
):# 在 gpu
1 上分一塊記憶體給tensor a
a = torch.
tensor([
1.,2.]
, device=cuda)
# 將乙個tensor從 cpu 轉換為 gpu
1 儲存
b = torch.
tensor([
1.,2.]
).cuda()
# a.device 和 b.device 都在第1塊 gpu 裝置上儲存 device
(type=
'cuda'
, index=1)
# 你也可以使用``
tensor.to``
來轉換tensor:
b2 = torch.
tensor([
1.,2.]
).to(device=cuda)
# b2.device 和 b.device 都在第1塊 gpu 裝置上儲存 device
(type=
'cuda'
, index=1)
c = a + b
# c.device在第1塊 gpu 裝置上儲存 device
(type=
'cuda'
, index=1)
z = x + y
# z.device在第0塊 gpu 裝置上儲存 device
(type=
'cuda'
, index=0)
# 即使在上下文中,也可以指定裝置
# (或者給.cuda呼叫乙個gpu索引)
d = torch.
randn(2
, device=cuda2)
e = torch.
randn(2
).to(cuda2)
f = torch.
randn(2
).cuda
(cuda2)
# d.device, e.device, and f.device 都儲存在 device
(type=
'cuda'
, index=
2)
預設情況下,gpu操作是非同步的。當您呼叫乙個使用gpu的函式時,這些操作將排隊到特定的裝置,但不一定要在稍後執行。它允許我們並行地執行更多的計算,包括對cpu或其他gpu的操作。
一般來說,非同步計算的效果對呼叫者是不可見的,因為
(1)每個裝置按照它們排隊的順序執行操作,
(2)pytorch在cpu和gpu之間或兩個gpu之間複製資料時自動執行必要的同步。
因此,計算將繼續進行,好像每個操作都是同步執行的。
您可以通過設定環境變數cuda_launch_blocking=1來強制同步計算。當gpu上發生錯誤時,這很方便。(對於非同步執行,在實際執行操作之前不會報告此類錯誤,因此堆疊跟蹤不會顯示請求的位置。)
start_event = torch.cuda.
event
(enable_timing=true)
end_event = torch.cuda.
event
(enable_timing=true)
start_event.
record()
# 跑一些東西
end_event.
record()
torch.cuda.
synchronize
() # 等待時間被記錄!
elapsed_time_ms = start_event.
elapsed_time
(end_event)
Pytorch官方指南(三) 翻譯版本
torch package包含多維tensor的資料結構,並定義了它們的數 算。此外,它還提供了許多實用程式來高效序列化tensor和任意型別,以及其他有用的實用程式。它有乙個cuda對應項,使您能夠在計算能力大於等於3.0的nvidia gpu上執行tensor計算。引數 obj物件。作用 判斷該...
Pytorch官方指南(四) 翻譯版本
引數 data,tensor的初始資料。可以是list tuple numpy ndarray scalar和其他型別。dtype,可選 返回的張量的所需資料型別。預設值 從輸入資料推斷的型別。device,可選 返回的張量的所需資料型別。預設值 當前預設裝置。作用 將其他型別資料轉換為tensor...
Pytorch官方文件(八)翻譯版本
import torch.nn as nn import torch.nn.functional as fclass model nn.module def init self super model,self init self.conv1 nn.conv2d 1 20,5 self.conv2 ...