项目场景:Docker+Gunicorn+flask+Tensorflow2.3.0使用单GPU加载双模型
问题描述:如果单Tensorflow2.3.0使用GPU加载双模型出现out of memory
原因分析:
tensorflow使用GPU时默认将整个GPU占满。
解决方案:
1.from tensorflow.compat.v1 import ConfigProto
from tensorflow.compat.v1 import InteractiveSession
config = ConfigProto()
config.gpu_options.allow_growth = True
session = InteractiveSession(config=config)
使用allow_growth option,刚一开始分配少量的GPU容量,然后按需慢慢的增加,由于不会释放内存,所以会导致碎片。这种方式将GPU显存一分为二供两个模型使用,nvidia-smi查看的话,GPU也是占满的。
from tensorflow.compat.v1 import ConfigProto
from tensorflow.compat.v1 import InteractiveSession
config = ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.4
session = InteractiveSession(config=config)
设置每个模型占用GPU的显存,0.4代表 40%。两个模型加起来就是整个GPU显存的80%。