这两天测了下自己基于Keras的某应用的rest-api,单进程的应用占满了整块GPU的显存,但是实际利用率很低,并发请求的时候完全是串行处理的。采用多线程的方式并没有加快速度,所以考虑使用多进程。
但是!问题来了!Keras使用显卡时是默认调用所有的GPU,并且占满所有显存的!如果再跑一个进程就直接罢工,告诉你out of memory,真是太讨厌了!
所以就很有必要搞清楚Keras如何指定GPU和如何限制显存的使用比例了。
本文分为如下五个部分:指定某块GPU
指定多块GPU
控制GPU显存使用比例
指定GPU+控制显存使用
显存的按需分配(动态增长)
Part 1. 指定某块GPU
指定GPU很简单,在载入keras和tensorflow之前,设置CUDA计算使用的GPU序号即可。
这其实是CUDA本身的参数,对所有深度学习框架都是适用的。
需要注意的是最好写在improt keres 和 import tensorflow之前,不然可能出错。
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "1"
此代码选择的是编号为“1”的显卡。
显卡的编号是从“0”开始的,若只有一块显卡则编号为“0”。
Linux系统下,若想知道本机安装了哪些显卡可以使用如下命令:
nvidia-smi
Windows系统可以直接查看资源管理器。
Part