深度学习笔记:windows+tensorflow 指定GPU占用内存(解决gpu爆炸问题)
目錄
文章目錄
- 目錄
- 前言
- 一、指定顯卡
- 二、限制GPU用量
- 1、設置使用GPU的百分比
- 進行配置,使用30%的GPU
- 設置session
- 2、GPU按需使用
- 三、指定GPU并且限制GPU用量
- 指定第一塊GPU可用
- 答疑
前言
最近在使用深度學習,跑了一個大的model,然后GPU炸了,上網搜索了一下如何解決這個問題,做下筆記,分享給大家。
keras在使用GPU的時候有個特點,就是默認全部占滿顯存。 這樣如果有多個模型都需要使用GPU跑的話,那么限制是很大的,而且對于GPU也是一種浪費。因此在使用keras時需要有意識的設置運行時使用那塊顯卡,需要使用多少容量。
具體可以分為以下三種情況:
查看GPU使用情況語句(linux)
# 1秒鐘刷新一次 watch -n 1 nvidia-smi一、指定顯卡
import os os.environ["CUDA_VISIBLE_DEVICES"] = "2"這里指定了使用編號為2的GPU,大家可以根據需要和實際情況來指定需要使用的GPU。
二、限制GPU用量
1、設置使用GPU的百分比
import tensorflow as tf import keras.backend.tensorflow_backend as KTF進行配置,使用30%的GPU
config = tf.ConfigProto() config.gpu_options.per_process_gpu_memory_fraction = 0.3 session = tf.Session(config=config)設置session
KTF.set_session(session )需要注意的是,雖然代碼或配置層面設置了對顯存占用百分比閾值,但在實際運行中如果達到了這個閾值,程序有需要的話還是會突破這個閾值。換而言之如果跑在一個大數據集上還是會用到更多的顯存。以上的顯存限制僅僅為了在跑小數據集時避免對顯存的浪費而已。
2、GPU按需使用
import tensorflow as tf import keras.backend.tensorflow_backend as KTFconfig = tf.ConfigProto() config.gpu_options.allow_growth=True #不全部占滿顯存, 按需分配 session = tf.Session(config=config)# 設置session KTF.set_session(sess)三、指定GPU并且限制GPU用量
這個比較簡單,就是講上面兩種情況連上即可。。。
import os import tensorflow as tf import keras.backend.tensorflow_backend as KTF指定第一塊GPU可用
os.environ["CUDA_VISIBLE_DEVICES"] = "0"config = tf.ConfigProto() config.gpu_options.allow_growth=True #不全部占滿顯存, 按需分配 sess = tf.Session(config=config)KTF.set_session(sess)keras在使用GPU的時候有個特點,就是默認全部占滿顯存。
若單核GPU也無所謂,若是服務器GPU較多,性能較好,全部占滿就太浪費了。
于是乎有以下三種情況:
在使用keras時候會出現總是占滿GPU顯存的情況,可以通過重設backend的GPU占用情況來進行調節。
上述兩個連一起用就行:
import os import tensorflow as tf os.environ["CUDA_VISIBLE_DEVICES"] = "2" from keras.backend.tensorflow_backend import set_session config = tf.ConfigProto() config.gpu_options.per_process_gpu_memory_fraction = 0.3 set_session(tf.Session(config=config)) CUDA_VISIBLE_DEVICES=0 python -m nmt.nmt這個問題在GitHub上已經摞了很高的,貌似是Windows特有的,而且和顯存容量有關。最后有一位宛如救世主的老兄給出了他的總結性發言與變相的解決方案
Here is a bit more info on how I temporarily resolved it. I believe these issues are all related to GPU memory allocation and have nothing to do with the errors being reported. There were other errors before this indicating some sort of memory allocation problem but the program continued to progress, eventually giving the cudnn errors that everyone is getting. The reason I believe it works sometimes is that if you use the gpu for other things besides tensorflow such as your primary display, the available memory fluctuates. Sometimes you can allocate what you need and other times it can’t. From the API https://www.tensorflow.org/versions/r0.12/how_tos/using_gpu/ ``` “By default, TensorFlow maps nearly all of the GPU memory of all GPUs (subject to CUDA_VISIBLE_DEVICES) visible to the process. This is done to more efficiently use the relatively precious GPU memory resources on the devices by reducing memory fragmentation.”I think this default allocation is broken in some way that causes this erratic behavior and certain situations to work and others to fail.I have resolved this issue by changing the default behavior of TF to allocate a minimum amount of memory and grow as needed as detailed in the webpage. ``` config = tf.ConfigProto() config.gpu_options.allow_growth = True session = tf.Session(config=config, …) I have also tried the alternate way and was able to get it to work and fail with experimentally choosing a percentage that worked. In my case it ended up being about .7. config = tf.ConfigProto()config.gpu_options.per_process_gpu_memory_fraction = 0.4session = tf.Session(config=config, …) Still no word from anyone on the TF team confirming this but it is worth a shot to see if others can confirm similar behavior.答疑
如果還有其他問題,可以關注公眾號,答主會在24h之內回復你。
總結
以上是生活随笔為你收集整理的深度学习笔记:windows+tensorflow 指定GPU占用内存(解决gpu爆炸问题)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python post有随机字符串_Py
- 下一篇: sql查询 关联帖子_MySQL的大分页