日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Ubuntu >内容正文

Ubuntu

【Ubuntu-Tensorflow】GPU设置及显存资源分配

發布時間:2023/12/15 Ubuntu 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Ubuntu-Tensorflow】GPU设置及显存资源分配 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近筆者在做GPU顯存資源分配的研究,發現在tf中gpu一些實用的方法和接口,共享出來,供大家參考學習,如有問題,歡迎留言討論。

1.運行程序時,控制臺設置GPU運行參數,占用顯存全部資源

$ CUDA_VISIBLE_DEVICES=0 python predict.py # 只使用gpu:0設備運行predict.py程序。

$ CUDA_VISIBLE_DEVICES=1 python predict.py # 只使用gpu:1設備運行predict.py程序。

$ CUDA_VISIBLE_DEVICES=0,1 python predict.py # 只使用gpu:0,1設備運行predict.py程序。

【PS】2017/8/23
注意: CUDA_VISIBLE_DEVICES=0,1 是存在設備的優先級的,[0,1]和[1,0]排列的設備是不同的,排在前面的設備優先級高,運行程序的時候會優先使用。如[0,1]則先使用0號設備的gpu資源,[1,0]則先試用1號設備的gpu資源

以上三個指令運行predict.py程序,都會占用GPU顯存的全部資源。

2.在tensorflow代碼中with tf.device(‘/gpu:x’)

在tensorflow代碼中with tf.device(‘/gpu:0’)
在tensorflow代碼中with tf.device(‘/gpu:1’)
在tensorflow代碼中with tf.device(‘/gpu:0,1’)

上面三種設定效果與1中控制臺輸入CUDA_VISIABLE_DEVICES=x 的效果相同,運行程序,都會占用全部資源

3.在程序中,設置GPU設備的環境變量

os.environ[“CUDA_DEVICE_ORDER”] = “PCI_BUS_ID” # 按照PCI_BUS_ID順序從0開始排列GPU設備
os.environ[“CUDA_VISIBLE_DEVICES”] = “0” #設置當前使用的GPU設備僅為0號設備
os.environ[“CUDA_VISIBLE_DEVICES”] = “1” #設置當前使用的GPU設備僅為1號設備
os.environ[“CUDA_VISIBLE_DEVICES”] = “0,1” #設置當前使用的GPU設備為0,1號兩個設備

設定的效果與1和2相同。

4.session初始化時設定GPU_Config

gpuConfig = tf.ConfigProto()
gpuConfig.allow_soft_placement = config.getboolean(‘gpu’, ‘allow_soft_placement’)#設置為True,當GPU不存在或者程序中出現GPU不能運行的代碼時,自動切換到CPU運行
【PS】2017/8/24
GPU切換CPU的條件
1.運算無法在GPU上執行
2.沒有GPU資源(指定GPU device num 錯誤)
3.運算輸入包含對CPU計算結果的引用
gpuConfig.gpu_options.allow_growth = config.getboolean(‘gpu’, ‘allow_growth’)#設置為True,程序運行時,會根據程序所需GPU顯存情況,分配最小的資源
gpuConfig.gpu_options.per_process_gpu_memory_fraction = config.getfloat(‘gpu’, ‘rate’)#程序運行的時,所需的GPU顯存資源最大不允許超過rate的設定值

【PS】當allow_growth和per_process_gpu_memory_fraction 同時設定的時候,兩者為或的關系

GPU_config = utils.GPU_config()

sess = tf.Session(config=GPU_config) #設定一個自定義GPU配置的session

【PS】上面的自定義GPU_config只會指定GPU內存分配情況,而不會選定GPU具體的device_id,而如何指定GPU device_id還是要使用1,2,3指出的方法

下面給出一個采用CUDA_VISIBLE_DEVICES=0,1兩個gpu設備運行一段程序的顯存占用情況,從下面這個運行結果來看,按照per_process_gpu_memory_fraction 自動占用最小分配顯存的情況運行程序,兩個GPU的資源并不是均勻分配,0號設備占用資源較多.

圖1 CUDA_VISIBLE_DEVICES=0,1 python predict.py

下面給出一個采用CUDA_VISIBLE_DEVICES=1,0兩個gpu設備運行一段程序的顯存占用情況,從下面這個運行結果來看,按照per_process_gpu_memory_fraction 自動占用最小分配顯存的情況運行程序,兩個GPU的資源并不是均勻分配,1號設備占用資源較多.


圖2 CUDA_VISIBLE_DEVICES=1,0 python predict.py

以上兩幅圖反映了,根據gpu設備號的排列,存在使用的優先級問題,排在前面的優先級較高。

如果認真觀察在運行程序的時候的兩個gpu顯存的變化,就會發現,程序運行其實只占用了優先級較高的設備了,這是因為1個gpu設備已經滿足程序運行的需要了,而對于第二個設備也占用了顯存資源,仔細發現,你能夠看到,兩個gpu在程序進行初始化的,并未進行session run的時候,出現顯存占用情況,切優先級較低的設備在后續的程序運行過程中,顯存占有并未增加。

參考博客:tensorflow gpu使用說明

總結

以上是生活随笔為你收集整理的【Ubuntu-Tensorflow】GPU设置及显存资源分配的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。