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是兩驅...