1. 程式人生 > 其它 >tensorflow 卡_限制TensorFlow視訊記憶體使用量

tensorflow 卡_限制TensorFlow視訊記憶體使用量

技術標籤:tensorflow 卡

問題是這樣的:比如我使用一塊英偉達的P40,每張卡都是24GB的視訊記憶體,但是我的程式只需要使用4G,深度學習框架是TensorFlow,那麼我怎麼限制這個視訊記憶體的使用量呢?


一、手動設定使用比例

眾所周知,TensorFlow是不會設定視訊記憶體大小的,比如程式4G視訊記憶體也能跑起來,但是TensorFlow就是會把P40的24GB全部用光,這顯然是很蛋疼的,所以一般會通過手動設定GPU使用比例,參考https://blog.csdn.net/m0_37041325/article/details/77488981,可以這樣設定:

gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.17)
sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options)) 

這個0.17就是我手動設定的4/24的大小,這樣設定好就能夠防止把資源吃光了(土豪隨意)。


二、自動設定使用比例

但這樣做有個顯然的缺點,就是這個比例的設定嚴重依賴顯示卡的大小,因為程式所需的視訊記憶體是不變的,即分子不變,那麼使用比例就跟分母即視訊記憶體大小相關了。

設想這樣一個場景:我本地有張1060的卡,只有6GB,那麼可以設定一個4/6=0.67的使用比例,本地我只想驗證一下程式能不能跑通,跑通了我就放到P40的伺服器了,這樣又要設定一個4/24=0.17的使用比例了,這樣就有兩個使用比例了,還是同一個程式。

一個簡單的方法就是讀取使用平臺的名稱,即platform.node(),根據這個來判斷是哪個機器,就使用對應的GPU使用比例了。

但這個顯然不夠smart了,而且,當面臨第三個平臺,這種不智慧化的部署會出問題的,我想到的解決方法就是先檢視顯示卡的大小,然而根據這個大小來確定使用比例。

檢視顯示卡大小有兩種方法:

第一種可以參考使用Tensorflow或Keras時對GPU記憶體限制 | 沐雨浥塵及python實現自動查詢並使用空閒GPU,直接使用官方命令取得,好處是不用安裝新的庫:

# compute GPU memory to use
memoryList = list(map(int, os.popen("nvidia-smi -q -d Memory | grep -A4 GPU | grep Total | awk '{print $3}'").readlines()))
memoryTotal = memoryList[0]
print ("memoryTotal = %s" % memoryTotal)	# 22912
memoryLimited = 4000.0	# use 4G memory
configTensorFlow.gpu_options.per_process_gpu_memory_fraction = memoryLimited / memoryTotal

第二種是python檢視顯示卡gpu資訊,貌似要安裝一個Python庫,沒有實踐過,就不多說了,有興趣的可以實踐實踐。

【已完結】