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庫,沒有實踐過,就不多說了,有興趣的可以實踐實踐。
【已完結】