該軟件包增加了對(duì) CUDA 張量類(lèi)型的支持,該類(lèi)型實(shí)現(xiàn)與 CPU 張量相同的功能,但是它們利用 GPU 進(jìn)行計(jì)算。
它是延遲初始化的,因此您始終可以導(dǎo)入它,并使用 is_available()
確定您的系統(tǒng)是否支持 CUDA。
CUDA 語(yǔ)義具有有關(guān)使用 CUDA 的更多詳細(xì)信息。
torch.cuda.current_blas_handle()?
返回 cublasHandle_t 指向當(dāng)前 cuBLAS 句柄的指針
torch.cuda.current_device()?
返回當(dāng)前所選設(shè)備的索引。
torch.cuda.current_stream(device=None)?
返回給定設(shè)備的當(dāng)前選擇的 Stream
。
參數(shù)
設(shè)備 (torch設(shè)備 或 python:int , 可選 )–所選設(shè)備。 如果 device
為None
(默認(rèn)值),則返回由 current_device()
給定的當(dāng)前設(shè)備當(dāng)前選擇的 Stream
。
torch.cuda.default_stream(device=None)?
返回給定設(shè)備的默認(rèn) Stream
。
Parameters
設(shè)備 (torch設(shè)備 或 python:int , 可選 )–所選設(shè)備。 如果 device
為None
(默認(rèn)值),則返回由 current_device()
給定的當(dāng)前設(shè)備的默認(rèn) Stream
。
class torch.cuda.device(device)?
更改所選設(shè)備的上下文管理器。
Parameters
設(shè)備 (torch設(shè)備 或 python:int )–選擇的設(shè)備索引。 如果此參數(shù)為負(fù)整數(shù)或None
,則為空。
torch.cuda.device_count()?
返回可用的 GPU 數(shù)量。
class torch.cuda.device_of(obj)?
將當(dāng)前設(shè)備更改為給定對(duì)象的上下文管理器。
您可以將張量和存儲(chǔ)都用作參數(shù)。 如果未在 GPU 上分配給定對(duì)象,則為空操作。
Parameters
obj (tensor 或 存儲(chǔ))–在所選設(shè)備上分配的對(duì)象。
torch.cuda.get_device_capability(device=None)?
獲取設(shè)備的 CUDA 功能。
Parameters
設(shè)備 (torch設(shè)備 或 python:int , 可選 )–要為其返回設(shè)備功能的設(shè)備。 如果此參數(shù)為負(fù)整數(shù),則此函數(shù)為空操作。 如果 device
為None
,則使用 current_device()
給定的當(dāng)前設(shè)備。
退貨
設(shè)備的主要和次要 CUDA 功能
返回類(lèi)型
元組(int,int)
torch.cuda.get_device_name(device=None)?
獲取設(shè)備的名稱(chēng)。
Parameters
設(shè)備 (torch設(shè)備 或 python:int , 可選 )–要為其返回名稱(chēng)的設(shè)備。 如果此參數(shù)為負(fù)整數(shù),則此函數(shù)為空操作。 如果 device
為None
,則使用 current_device()
給定的當(dāng)前設(shè)備。
torch.cuda.init()?
初始化 PyTorch 的 CUDA 狀態(tài)。 如果您通過(guò) PyTorch 的 C API 與 PyTorch 進(jìn)行交互,則可能需要顯式調(diào)用此方法,因?yàn)樵谶M(jìn)行初始化之前,CUDA 功能的 Python 綁定才可以。 普通用戶(hù)不需要此,因?yàn)樗?PyTorch 的 CUDA 方法都會(huì)自動(dòng)按需初始化 CUDA 狀態(tài)。
如果 CUDA 狀態(tài)已經(jīng)初始化,則不執(zhí)行任何操作。
torch.cuda.ipc_collect()?
CUDA IPC 釋放后,F(xiàn)orce 將收集 GPU 內(nèi)存。
注意
檢查是否可以從內(nèi)存中清除任何已發(fā)送的 CUDA 張量。 如果沒(méi)有活動(dòng)計(jì)數(shù)器,則強(qiáng)制關(guān)閉用于引用計(jì)數(shù)的共享內(nèi)存文件。 當(dāng)生產(chǎn)者進(jìn)程停止主動(dòng)發(fā)送張量并希望釋放未使用的內(nèi)存時(shí),此選項(xiàng)很有用。
torch.cuda.is_available()?
返回一個(gè)布爾值,指示 CUDA 當(dāng)前是否可用。
torch.cuda.is_initialized()?
返回 PyTorch 的 CUDA 狀態(tài)是否已初始化。
torch.cuda.set_device(device)?
設(shè)置當(dāng)前設(shè)備。
不推薦使用此功能,而推薦使用 device
。 在大多數(shù)情況下,最好使用CUDA_VISIBLE_DEVICES
環(huán)境變量。
Parameters
設(shè)備 (torch設(shè)備 或 python:int )–選定的設(shè)備。 如果此參數(shù)為負(fù),則此函數(shù)為空操作。
torch.cuda.stream(stream)?
選擇給定流的上下文管理器。
在其上下文中排隊(duì)的所有 CUDA 內(nèi)核都將排隊(duì)在選定的流上。
Parameters
流 (流)–選擇的流。 如果經(jīng)理是None
,則為空手。
Note
流是按設(shè)備的。 如果所選的流不在當(dāng)前設(shè)備上,則此功能還將更改當(dāng)前設(shè)備以匹配該流。
torch.cuda.synchronize(device=None)?
等待 CUDA 設(shè)備上所有流中的所有內(nèi)核完成。
Parameters
設(shè)備 (torch設(shè)備 或 python:int , 可選 )–要同步的設(shè)備。 如果 device
為None
,則使用 current_device()
給定的當(dāng)前設(shè)備。
torch.cuda.get_rng_state(device='cuda')?
以 ByteTensor 的形式返回指定 GPU 的隨機(jī)數(shù)生成器狀態(tài)。
Parameters
設(shè)備 (torch設(shè)備 或 python:int , 可選 )–返回 RNG 狀態(tài)的設(shè)備。 默認(rèn)值:'cuda'
(即,當(dāng)前 CUDA 設(shè)備torch.device('cuda')
)。
警告
該函數(shù)會(huì)急切地初始化 CUDA。
torch.cuda.get_rng_state_all()?
返回表示所有設(shè)備的隨機(jī)數(shù)狀態(tài)的 ByteTensor 元組。
torch.cuda.set_rng_state(new_state, device='cuda')?
設(shè)置指定 GPU 的隨機(jī)數(shù)生成器狀態(tài)。
Parameters
'cuda'
(即,當(dāng)前 CUDA 設(shè)備torch.device('cuda')
)。torch.cuda.set_rng_state_all(new_states)?
設(shè)置所有設(shè)備的隨機(jī)數(shù)生成器狀態(tài)。
Parameters
new_state (Torch.ByteTensor 的元組)–每個(gè)設(shè)備的所需狀態(tài)
torch.cuda.manual_seed(seed)?
設(shè)置種子以為當(dāng)前 GPU 生成隨機(jī)數(shù)。 如果沒(méi)有 CUDA,則可以安全地調(diào)用此函數(shù); 在這種情況下,它會(huì)被靜默忽略。
Parameters
種子 (python:int )–所需的種子。
Warning
如果您使用的是多 GPU 模型,則此功能不足以獲得確定性。 要播種所有 GPU,請(qǐng)使用 manual_seed_all()
。
torch.cuda.manual_seed_all(seed)?
設(shè)置用于在所有 GPU 上生成隨機(jī)數(shù)的種子。 如果沒(méi)有 CUDA,則可以安全地調(diào)用此函數(shù); 在這種情況下,它會(huì)被靜默忽略。
Parameters
seed (python:int) – The desired seed.
torch.cuda.seed()?
將用于生成隨機(jī)數(shù)的種子設(shè)置為當(dāng)前 GPU 的隨機(jī)數(shù)。 如果沒(méi)有 CUDA,則可以安全地調(diào)用此函數(shù); 在這種情況下,它會(huì)被靜默忽略。
Warning
如果您使用的是多 GPU 模型,則此功能將僅在一個(gè) GPU 上初始化種子。 要初始化所有 GPU,請(qǐng)使用 seed_all()
。
torch.cuda.seed_all()?
將在所有 GPU 上生成隨機(jī)數(shù)的種子設(shè)置為隨機(jī)數(shù)。 如果沒(méi)有 CUDA,則可以安全地調(diào)用此函數(shù); 在這種情況下,它會(huì)被靜默忽略。
torch.cuda.initial_seed()?
返回當(dāng)前 GPU 的當(dāng)前隨機(jī)種子。
Warning
This function eagerly initializes CUDA.
torch.cuda.comm.broadcast(tensor, devices)?
向多個(gè) GPU 廣播張量。
Parameters
Returns
包含tensor
副本的元組,放置在與devices
的索引相對(duì)應(yīng)的設(shè)備上。
torch.cuda.comm.broadcast_coalesced(tensors, devices, buffer_size=10485760)?
將序列張量廣播到指定的 GPU。 首先將小張量合并到緩沖區(qū)中以減少同步次數(shù)。
Parameters
Returns
A tuple containing copies of the tensor
, placed on devices corresponding to indices from devices
.
torch.cuda.comm.reduce_add(inputs, destination=None)?
來(lái)自多個(gè) GPU 的張量求和。
所有輸入應(yīng)具有匹配的形狀。
Parameters
Returns
包含所有輸入的元素和的張量,放置在destination
設(shè)備上。
torch.cuda.comm.scatter(tensor, devices, chunk_sizes=None, dim=0, streams=None)?
在多個(gè) GPU 上分散張量。
Parameters
devices
相匹配,并且總和應(yīng)等于tensor.size(dim)
。 如果未指定,則張量將分為相等的塊。Returns
包含tensor
塊的元組,分布在給定的devices
中。
torch.cuda.comm.gather(tensors, dim=0, destination=None)?
收集來(lái)自多個(gè) GPU 的張量。
與dim
不同的所有維度中的張量大小必須匹配。
Parameters
Returns
位于destination
設(shè)備上的張量,這是tensors
與dim
并置的結(jié)果。
class torch.cuda.Stream?
CUDA 流周?chē)陌b器。
CUDA 流是屬于特定設(shè)備的線性執(zhí)行序列,獨(dú)立于其他流。 有關(guān)詳細(xì)信息,請(qǐng)參見(jiàn) CUDA 語(yǔ)義。
Parameters
device
為None
(默認(rèn)值)或負(fù)整數(shù),則將使用當(dāng)前設(shè)備。
query()?
檢查所有提交的工作是否已完成。
Returns
一個(gè)布爾值,指示該流中的所有內(nèi)核是否已完成。
record_event(event=None)?
記錄事件。
Parameters
事件 (事件 , 可選)–記錄事件。 如果未給出,將分配一個(gè)新的。
Returns
記錄的事件。
synchronize()?
等待此流中的所有內(nèi)核完成。
Note
這是對(duì)cudaStreamSynchronize()
的包裝:有關(guān)更多信息,請(qǐng)參見(jiàn) CUDA 流文檔。
wait_event(event)?
使所有將來(lái)提交到流的工作都等待事件。
Parameters
事件 (事件)–等待的事件。
Note
這是對(duì)cudaStreamWaitEvent()
的包裝:有關(guān)更多信息,請(qǐng)參見(jiàn) CUDA 流文檔。
該函數(shù)無(wú)需等待event
就返回:僅影響以后的操作。
wait_stream(stream)?
與另一個(gè)流同步。
提交給該流的所有將來(lái)的工作將等到調(diào)用完成時(shí)提交給給定流的所有內(nèi)核。
Parameters
流 (流)–要同步的流。
Note
該函數(shù)返回而無(wú)需等待 stream
中當(dāng)前排隊(duì)的內(nèi)核:僅影響將來(lái)的操作。
class torch.cuda.Event?
CUDA 事件的包裝器。
CUDA 事件是同步標(biāo)記,可用于監(jiān)視設(shè)備的進(jìn)度,準(zhǔn)確測(cè)量時(shí)序并同步 CUDA 流。
當(dāng)?shù)谝淮斡涗浽撌录驅(qū)⑵鋵?dǎo)出到另一個(gè)進(jìn)程時(shí),基礎(chǔ) CUDA 事件將被延遲初始化。 創(chuàng)建后,只有同一設(shè)備上的流才能記錄該事件。 但是,任何設(shè)備上的流都可以等待事件。
Parameters
False
)True
, wait()
將被阻止(默認(rèn) :False
)True
,則事件可以在進(jìn)程之間共享(默認(rèn)值:False
)
elapsed_time(end_event)?
返回記錄事件之后到記錄 end_event 之前經(jīng)過(guò)的時(shí)間(以毫秒為單位)。
classmethod from_ipc_handle(device, handle)?
從給定設(shè)備上的 IPC 句柄重構(gòu)事件。
ipc_handle()?
返回此事件的 IPC 句柄。 如果尚未錄制,則該事件將使用當(dāng)前設(shè)備。
query()?
檢查事件當(dāng)前捕獲的所有工作是否已完成。
Returns
一個(gè)布爾值,指示當(dāng)前由事件捕獲的所有工作是否已完成。
record(stream=None)?
在給定的流中記錄事件。
如果未指定流,則使用torch.cuda.current_stream()
。 流的設(shè)備必須與活動(dòng)的設(shè)備匹配。
synchronize()?
等待事件完成。
等待直到此事件中當(dāng)前捕獲的所有工作完成。 這樣可以防止 CPU 線程在事件完成之前繼續(xù)執(zhí)行。
Note
這是cudaEventSynchronize()
的包裝:有關(guān)更多信息,請(qǐng)參見(jiàn) CUDA 事件文檔。
wait(stream=None)?
使所有將來(lái)提交給定流的工作都等待此事件。
如果未指定流,則使用torch.cuda.current_stream()
。
torch.cuda.empty_cache()?
釋放當(dāng)前由緩存分配器保留的所有未占用的緩存內(nèi)存,以便這些內(nèi)存可在其他 GPU 應(yīng)用程序中使用,并在 <cite>nvidia-smi</cite> 中可見(jiàn)。
Note
empty_cache()
不會(huì)增加 PyTorch 可用的 GPU 內(nèi)存量。 但是,在某些情況下,它可能有助于減少 GPU 內(nèi)存的碎片。 有關(guān) GPU 內(nèi)存管理的更多詳細(xì)信息,請(qǐng)參見(jiàn)內(nèi)存管理。
torch.cuda.memory_stats(device=None)?
返回給定設(shè)備的 CUDA 內(nèi)存分配器統(tǒng)計(jì)信息的字典。
此函數(shù)的返回值是統(tǒng)計(jì)字典,每個(gè)字典都是非負(fù)整數(shù)。
核心統(tǒng)計(jì)數(shù)據(jù):
"allocated.{all,large_pool,small_pool}.{current,peak,allocated,freed}"
:內(nèi)存分配器接收到的分配請(qǐng)求數(shù)。"allocated_bytes.{all,large_pool,small_pool}.{current,peak,allocated,freed}"
:分配的內(nèi)存量。"segment.{all,large_pool,small_pool}.{current,peak,allocated,freed}"
:來(lái)自cudaMalloc()
的保留段數(shù)。"reserved_bytes.{all,large_pool,small_pool}.{current,peak,allocated,freed}"
:保留的內(nèi)存量。"active.{all,large_pool,small_pool}.{current,peak,allocated,freed}"
:活動(dòng)存儲(chǔ)塊的數(shù)量。"active_bytes.{all,large_pool,small_pool}.{current,peak,allocated,freed}"
:活動(dòng)內(nèi)存量。"inactive_split.{all,large_pool,small_pool}.{current,peak,allocated,freed}"
:非活動(dòng),不可釋放的存儲(chǔ)塊的數(shù)量。"inactive_split_bytes.{all,large_pool,small_pool}.{current,peak,allocated,freed}"
:非活動(dòng),不可釋放的內(nèi)存量。對(duì)于這些核心統(tǒng)計(jì)信息,值細(xì)分如下。
泳池類(lèi)型:
all
:所有內(nèi)存池的組合統(tǒng)計(jì)信息。large_pool
:大型分配池的統(tǒng)計(jì)信息(截至 2019 年 10 月,>大小= 1MB 分配)。small_pool
:小型分配池的統(tǒng)計(jì)信息(截至 2019 年 10 月,<大小為 1MB 分配)。指標(biāo)類(lèi)型:
current
:此度量標(biāo)準(zhǔn)的當(dāng)前值。peak
:此指標(biāo)的最大值。allocated
:此指標(biāo)的歷史總數(shù)增長(zhǎng)。freed
:此指標(biāo)的歷史總數(shù)下降。除了核心統(tǒng)計(jì)信息之外,我們還提供了一些簡(jiǎn)單的事件計(jì)數(shù)器:
"num_alloc_retries"
:導(dǎo)致高速緩存刷新并重試的cudaMalloc
調(diào)用失敗的次數(shù)。"num_ooms"
:拋出的內(nèi)存不足錯(cuò)誤數(shù)。Parameters
設(shè)備 (torch設(shè)備 或 python:int , 可選 )–所選設(shè)備。 如果 device
為None
(默認(rèn)值),則返回由 current_device()
給定的當(dāng)前設(shè)備的統(tǒng)計(jì)信息。
Note
有關(guān) GPU 內(nèi)存管理的更多詳細(xì)信息,請(qǐng)參見(jiàn)內(nèi)存管理。
torch.cuda.memory_summary(device=None, abbreviated=False)?
返回給定設(shè)備的當(dāng)前內(nèi)存分配器統(tǒng)計(jì)信息的可讀記錄。
這對(duì)于在訓(xùn)練期間或處理內(nèi)存不足異常時(shí)定期顯示很有用。
Parameters
device
為None
(默認(rèn)值),則返回由 current_device()
給定的當(dāng)前設(shè)備的打印輸出。Note
See Memory management for more details about GPU memory management.
torch.cuda.memory_snapshot()?
返回所有設(shè)備上 CUDA 內(nèi)存分配器狀態(tài)的快照。
解釋此函數(shù)的輸出需要熟悉內(nèi)存分配器內(nèi)部。
Note
See Memory management for more details about GPU memory management.
torch.cuda.memory_allocated(device=None)?
返回給定設(shè)備的張量占用的當(dāng)前 GPU 內(nèi)存(以字節(jié)為單位)。
Parameters
設(shè)備 (torch設(shè)備 或 python:int , 可選 )–所選設(shè)備。 如果 device
為None
(默認(rèn)值),則返回由 current_device()
給定的當(dāng)前設(shè)備的統(tǒng)計(jì)信息。
Note
這可能少于 <cite>nvidia-smi</cite> 中顯示的數(shù)量,因?yàn)槟承┪词褂玫膬?nèi)存可以由緩存分配器保存,并且某些上下文需要在 GPU 上創(chuàng)建。 有關(guān) GPU 內(nèi)存管理的更多詳細(xì)信息,請(qǐng)參見(jiàn)內(nèi)存管理。
torch.cuda.max_memory_allocated(device=None)?
返回給定設(shè)備的張量占用的最大 GPU 內(nèi)存(以字節(jié)為單位)。
默認(rèn)情況下,這將返回自此程序開(kāi)始以來(lái)的峰值分配內(nèi)存。 reset_peak_stats()
可用于重置跟蹤該指標(biāo)的起點(diǎn)。 例如,這兩個(gè)功能可以測(cè)量訓(xùn)練循環(huán)中每個(gè)迭代的峰值分配內(nèi)存使用量。
Parameters
device (torch.device or python:int__, optional) – selected device. Returns statistic for the current device, given by current_device()
, if device
is None
(default).
Note
See Memory management for more details about GPU memory management.
torch.cuda.reset_max_memory_allocated(device=None)?
重置用于跟蹤給定設(shè)備的張量占用的最大 GPU 內(nèi)存的起點(diǎn)。
有關(guān)詳細(xì)信息,請(qǐng)參見(jiàn) max_memory_allocated()
。
Parameters
device (torch.device or python:int__, optional) – selected device. Returns statistic for the current device, given by current_device()
, if device
is None
(default).
Warning
現(xiàn)在,此函數(shù)調(diào)用reset_peak_memory_stats()
,它將重置/ all /峰值內(nèi)存狀態(tài)。
Note
See Memory management for more details about GPU memory management.
torch.cuda.memory_reserved(device=None)?
返回給定設(shè)備由緩存分配器管理的當(dāng)前 GPU 內(nèi)存,以字節(jié)為單位。
Parameters
device (torch.device or python:int__, optional) – selected device. Returns statistic for the current device, given by current_device()
, if device
is None
(default).
Note
See Memory management for more details about GPU memory management.
torch.cuda.max_memory_reserved(device=None)?
返回給定設(shè)備的緩存分配器管理的最大 GPU 內(nèi)存(以字節(jié)為單位)。
默認(rèn)情況下,這將返回自此程序開(kāi)始以來(lái)的峰值緩存內(nèi)存。 reset_peak_stats()
可用于重置跟蹤該指標(biāo)的起點(diǎn)。 例如,這兩個(gè)功能可以測(cè)量訓(xùn)練循環(huán)中每次迭代的峰值緩存內(nèi)存量。
Parameters
device (torch.device or python:int__, optional) – selected device. Returns statistic for the current device, given by current_device()
, if device
is None
(default).
Note
See Memory management for more details about GPU memory management.
torch.cuda.memory_cached(device=None)?
不推薦使用; 參見(jiàn) memory_reserved()
。
torch.cuda.max_memory_cached(device=None)?
不推薦使用; 參見(jiàn) max_memory_reserved()
。
torch.cuda.reset_max_memory_cached(device=None)?
重置跟蹤由給定設(shè)備的緩存分配器管理的最大 GPU 內(nèi)存的起點(diǎn)。
Parameters
device (torch.device or python:int__, optional) – selected device. Returns statistic for the current device, given by current_device()
, if device
is None
(default).
Warning
This function now calls reset_peak_memory_stats()
, which resets /all/ peak memory stats.
Note
See Memory management for more details about GPU memory management.
torch.cuda.nvtx.mark(msg)?
描述在某個(gè)時(shí)刻發(fā)生的瞬時(shí)事件。
Parameters
msg (字符串)–與事件關(guān)聯(lián)的 ASCII 消息。
torch.cuda.nvtx.range_push(msg)?
將范圍推入嵌套范圍跨度的堆棧中。 返回從零開(kāi)始的范圍的深度。
Parameters
msg (字符串)–與范圍關(guān)聯(lián)的 ASCII 消息
torch.cuda.nvtx.range_pop()?
從嵌套范圍跨度堆棧中彈出范圍。 返回結(jié)束范圍的從零開(kāi)始的深度。
更多建議: