最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用PyTorch實現(xiàn)限制GPU顯存的可使用上限

 更新時間:2024年03月28日 08:37:48   作者:小鋒學(xué)長生活大爆炸  
從?PyTorch?1.4?版本開始,引入了一個新的功能,可以允許用戶為特定的?GPU?設(shè)備設(shè)置進(jìn)程可使用的顯存上限比例,下面我們就來看看具體實現(xiàn)方法吧

從 PyTorch 1.4 版本開始,引入了一個新的功能 torch.cuda.set_per_process_memory_fraction(fraction, device),這個功能允許用戶為特定的 GPU 設(shè)備設(shè)置進(jìn)程可使用的顯存上限比例。

測試代碼:

torch.cuda.empty_cache()
 
# 設(shè)置進(jìn)程可使用的GPU顯存最大比例為50%
torch.cuda.set_per_process_memory_fraction(0.5, device=0)
 
# 計算總內(nèi)存
total_memory = torch.cuda.get_device_properties(0).total_memory
print("實際總內(nèi)存:", round(total_memory / (1024 * 1024), 1), "MB")
 
# 嘗試分配大量顯存的操作
try:
    # 使用10%的顯存:
    tmp_tensor = torch.empty(int(total_memory * 0.1), dtype=torch.int8, device='cuda:0')
    print("分配的內(nèi)存:", round(torch.cuda.memory_allocated(0) / (1024 * 1024), 1), "MB")
    print("保留的內(nèi)存:", round(torch.cuda.memory_reserved(0) / (1024 * 1024), 1), "MB")
    # 清空顯存
    del tmp_tensor
    torch.cuda.empty_cache()
    # 使用50%的顯存:
    torch.empty(int(total_memory * 0.5), dtype=torch.int8, device='cuda:0')
except RuntimeError as e:
    print("Error allocating tensor:", e)
 
# 打印當(dāng)前GPU的顯存使用情況
print("分配的內(nèi)存:", torch.cuda.memory_allocated(0) / (1024 * 1024), "MB")
print("保留的內(nèi)存:", torch.cuda.memory_reserved(0) / (1024 * 1024), "MB")

結(jié)果如下

已分配顯存:通過torch.cuda.memory_allocated(device)查詢,它返回已經(jīng)直接分配給張量的顯存總量。這部分顯存是當(dāng)前正在被Tensor對象使用的。

保留(預(yù)留)顯存:通過torch.cuda.memory_reserved(device)查詢,它包括了已分配顯存以及一部分由PyTorch的CUDA內(nèi)存分配器為了提高分配效率和減少CUDA操作所需時間而預(yù)留的顯存。這部分預(yù)留的顯存不直接用于存儲Tensor對象的數(shù)據(jù),但可以被視為快速響應(yīng)未來顯存分配請求的“緩沖區(qū)”。

知識補充

除了上文的方法,小編還為大家整理了一些其他PyTorch限制GPU使用的方法,有需要的可以參考下

限制使用顯存

# 指定之后所有操作在 GPU3 上執(zhí)行
torch.cuda.set_device(3)

# 限制 GPU3 顯存使用50%
desired_memory_fraction = 0.5  # 50% 顯存
torch.cuda.set_per_process_memory_fraction(desired_memory_fraction)

# 獲取當(dāng)前GPU上的總顯存容量
total_memory = torch.cuda.get_device_properties(3).total_memory

# 指定使用 GPU3
tmp_tensor = torch.empty(int(total_memory * 0.4999), dtype=torch.int8, device="cuda") # 此處 cuda 即指 GPU3

# 獲取當(dāng)前已分配的顯存,計算可用顯存
allocated_memory = torch.cuda.memory_allocated()
available_memory = total_memory - allocated_memory

# 打印結(jié)果
print(f"Total GPU Memory: {total_memory / (1024**3):.2f} GB")
print(f"Allocated GPU Memory: {allocated_memory / (1024**3):.2f} GB")
print(f"Available GPU Memory: {available_memory / (1024**3):.2f} GB")

此時占用了50%的顯存,而將0.4999改為0.5會爆顯存,可能是受浮點數(shù)精度影響。

PyTorch限制GPU顯存的函數(shù)與使用

函數(shù)形態(tài)

torch.cuda.set_per_process_memory_fraction(0.5, 0)

參數(shù)1:fraction 限制的上限比例,如0.5 就是總GPU顯存的一半,可以是0~1的任意float大?。?/p>

參數(shù)2:device 設(shè)備號; 如0 表示GPU卡 0號;

使用示例:

import torch
# 限制0號設(shè)備的顯存的使用量為0.5,就是半張卡那么多,比如12G卡,設(shè)置0.5就是6G。
torch.cuda.set_per_process_memory_fraction(0.5, 0)
torch.cuda.empty_cache()
# 計算一下總內(nèi)存有多少。
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()

# 下面這句話會觸發(fā)顯存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)
"""
顯存超標(biāo)后,比不設(shè)置限制的錯誤信息多了一個提示,“5.59 GiB allowed;”

注意事項:

函數(shù)限制的是進(jìn)程的顯存,這點跟TensorFlow的顯存限制類似。

到此這篇關(guān)于使用PyTorch實現(xiàn)限制GPU顯存的可使用上限的文章就介紹到這了,更多相關(guān)PyTorch限制GPU使用上限內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 利用python設(shè)計圖像加密技術(shù)(Arnold算法)

    利用python設(shè)計圖像加密技術(shù)(Arnold算法)

    這篇文章主要介紹了利用python設(shè)計圖像加密技術(shù)(Arnold算法),本文將借助Arnold置亂法,講解如何用python從頭至尾設(shè)計出一套圖像加密算法,需要的小伙伴可以才參考一下
    2022-03-03
  • Python異步編程入門協(xié)程到底是什么與線程、進(jìn)程的區(qū)別

    Python異步編程入門協(xié)程到底是什么與線程、進(jìn)程的區(qū)別

    這篇文章介紹了Python異步編程中的協(xié)程,解釋了它們?nèi)绾谓鉀Q同步編程中的阻塞問題,并與線程和進(jìn)程進(jìn)行了比較,感興趣的朋友跟隨小編一起聊聊這個話題
    2025-12-12
  • PyTorch中torch.tensor()和torch.to_tensor()的區(qū)別

    PyTorch中torch.tensor()和torch.to_tensor()的區(qū)別

    在Pytorch中Tensor和tensor都用于生成新的張量,但二者并不相同,下面這篇文章主要給大家介紹了關(guān)于PyTorch中torch.tensor()和torch.to_tensor()區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • 淺談python中的占位符

    淺談python中的占位符

    這篇文章主要介紹了淺談python中的占位符,分享了其簡單實例,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • Appium自動化測試實現(xiàn)九宮格解鎖

    Appium自動化測試實現(xiàn)九宮格解鎖

    本文主要介紹了Appium自動化測試實現(xiàn)九宮格解鎖,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Python面向?qū)ο笾械姆庋b詳情

    Python面向?qū)ο笾械姆庋b詳情

    這篇文章主要介紹了Python面向?qū)ο笾械姆庋b詳情,在python中也有對對象的封裝操作,使其對外只提供固定的訪問模式,不能訪問其內(nèi)部的私有屬性和私有方法。下文詳細(xì)內(nèi)容,需要的小伙伴可以參考一下
    2022-03-03
  • 對Python 3.5拼接列表的新語法詳解

    對Python 3.5拼接列表的新語法詳解

    今天小編就為大家分享一篇對Python 3.5拼接列表的新語法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • 在PyCharm中控制臺輸出日志分層級分顏色顯示的方法

    在PyCharm中控制臺輸出日志分層級分顏色顯示的方法

    今天小編就為大家分享一篇在PyCharm中控制臺輸出日志分層級分顏色顯示的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python運行錯誤異常代碼含義對照表

    Python運行錯誤異常代碼含義對照表

    這篇文章主要介紹了Python運行錯誤異常代碼含義對照表,需要的朋友可以參考下
    2021-04-04
  • python3中str(字符串)的使用教程

    python3中str(字符串)的使用教程

    這篇文章主要介紹了python3中str(字符串)的使用教程,文中介紹的非常詳細(xì),對python3中各種str字符串的操作都包含這篇文章中了,需要的朋友可以參考學(xué)習(xí),下面來一起看看吧。
    2017-03-03

最新評論

凤台县| 新田县| 赤峰市| 洪泽县| 宁强县| 泗水县| 当雄县| 绥滨县| 吕梁市| 顺平县| 华阴市| 镇雄县| 南岸区| 仲巴县| 革吉县| 宜州市| 安阳市| 宁国市| 霍州市| 金阳县| 合肥市| 包头市| 葵青区| 武隆县| 宜州市| 偏关县| 金沙县| 浮梁县| 喀喇沁旗| 阜城县| 永登县| 文山县| 上栗县| 和硕县| 罗山县| 阿尔山市| 磐安县| 乌拉特前旗| 佛山市| 永平县| 怀仁县|