tensorflow 服务器使用必看
-
概述
tensorflow有一个非常恼火的默认设置,几乎占满所有可见的显卡显存。个人PC并不用在意,反正资源都是独占,但是在服务器上,占着茅坑不**就非常的让人愤慨了。
nvidia-smi简介
nvidia-smi提供了一些查看显卡信息的界面,截图如下
GPU Fan:风扇指标,0-1,越大风扇吹的越厉害吧。
index: GPU Fan下面是GPU的一个编号。
Name : GPU型号,这里是1080。
Perf: 性能指标,这个很少看。
Pwe: 功率。
Memory-Usage:显存使用率。
Volatile GPU-Util :GPU利用率。PS:
一般关注两个指标:利用率和显存占有率。错误示范
图中,PID=31415的进程占满了显存,但是该GPU利用率为0。推测首先,这个应用没有限制显存;第二,这个代码可能写崩了。
使用服务器GPU资源注意
为了文明礼貌的使用服务器,暂且先注意两条:
- 设定可见的gpu,虽然这个对性能影响多大我还没测过。
- 设置自适应的显存占用
1.仅0号设备可见,这样就只会占用一块GPU的显存了。 import os os.environ["CUDA_VISIBLE_DEVICES"] = "0" 2.当allow_growth设置为True时,分配器将不会指定所有的GPU内存,而是根据需求增长 config = tf.ConfigProto() config.gpu_options.allow_growth=True sess = tf.Session(config=config)
-
可以在运行py的时候指定显卡id
如:CUDA_VISIBLE_DEVICES=0 python train.py
也可以指定多个GPU:
CUDA_VISIBLE_DEVICES=0,1,2 python train.py
当然,直接在shell里export也是可以的
export CUDA_VISIBLE_DEVICES=0,1,2
-
这个操作更优雅一些
-
@continue 在 tensorflow 服务器使用必看 中说:
config = tf.ConfigProto()
config.gpu_options.allow_growth=True
sess = tf.Session(config=config)请问如果遇到GPU现存占满但是GPU利用率为0的情况,应该怎么改代码呢?