PyTorch上限制GPU視訊記憶體的函式

2021-08-27 03:25:56 字數 1160 閱讀 2637

pytorch版本 >=1.8.0

torch.cuda.set_per_process_memory_fraction(0.5, 0)

引數1:fraction 限制的上限比例,如0.5 就是總gpu視訊記憶體的一半,可以是0~1的任意float大小;

引數2:device 裝置號; 如0 表示gpu卡 0號;

import torch

# 限制0號裝置的視訊記憶體的使用量為0.5,就是半張卡那麼多,比如12g卡,設定0.5就是6g。

torch.cuda.set_per_process_memory_fraction(

0.5,0)

torch.cuda.empty_cache(

)# 計算一下總記憶體有多少。

total_memory = torch.cuda.get_device_properties(0)

.total_memory

# 使用0.499的視訊記憶體:

tmp_tensor = torch.empty(

int(total_memory *

0.499

), dtype=torch.int8, device=

'cuda'

)# 清空該視訊記憶體:

del tmp_tensor

torch.cuda.empty_cache(

)# 下面這句話會觸發視訊記憶體oom錯誤,因為剛好觸碰到了上限:

torch.empty(total_memory //

2, dtype=torch.int8, device=

'cuda'

)"""

it raises an error as follows:

runtimeerror: cuda out of memory. tried to allocate 5.59 gib (gpu 0; 11.17 gib total capacity; 0 bytes already allocated; 10.91 gib free; 5.59 gib allowed; 0 bytes reserved in total by pytorch)

"""視訊記憶體超標後,比不設定限制的錯誤資訊多了乙個提示,「5.59 gib allowed;」

函式限制的是程序的視訊記憶體,這點跟tensorflow的視訊記憶體限制類似。

GPU顯示卡,視訊記憶體位寬

視訊記憶體位寬是顯存在乙個時鐘週期內所能傳送資料的位數,位數越大則瞬間所能傳輸的資料量越大,這是視訊記憶體的重要引數之一。1簡介視訊記憶體位寬是顯存在乙個時鐘週期內所能傳送資料的位數,位數越大則瞬間所能傳輸的資料量越大,這是視訊記憶體的重要引數之一。視訊記憶體頻寬 視訊記憶體頻率x視訊記憶體位寬 8...

GPU視訊記憶體未釋放問題

我們正在使用tensorflow或pytorch寫程式的時候,有時會在控制台將程式殺死,但是有時候程式已經結束了,用nvidia smi也看到程式已經停止,但是gpu還佔著記憶體沒有釋放。這是因為,在使用pytorch設定多執行緒 threads 進行資料讀取 data loader 時,其實是假的...

顯示卡和GPU 視訊記憶體的理解

顯示卡 gpu決定一切,打個比方,你去奇瑞買qq花3w它也是4個輪,卡宴160w也是4個輪,這裡車輪也就相當於視訊記憶體,大家視訊記憶體一樣,奇瑞什麼發動機卡宴什麼發動機?奇瑞絕對跑不到200邁,也就是說gpu的好壞直接決定了你的顯示卡跑多少分。另外視訊記憶體還有位寬問題,就好比卡宴是四驅qq是兩驅...