使用指定的 GPU
查看 GPU:nvidia-smi -L
查看 7 号 GPU:nvidia-smi -q -i 7
如果只看 memory 情况,可以用:nvidia-smi -q -i 7 -d MEMORY
设置 GPUid:CUDA_VISIBLE_DEVICES=6(或CUDA_VISIBLE_DEVICES=6,7)command
这条命令适用于命令行运行 tensorflow 程序的时候,指定 GPU
只需要在命令之前设置环境变量,简单来说比如原本程序是命令行运行 python train.py
假定这里 GPU 总共有八块,通过 nvidia-smi 查看发现 5,6,7 是空闲的(从0开始编号)
则运行命令修改为:CUDA_VISIBLE_DEVICES=5,6,7 python train.py
这样在跑你的网络之前,告诉程序只能看到 5、6、7 号 GPU,其他的 GPU 它不可见
(1)终端执行程序时设置使用的GPU
如果电脑有多个 GPU,tensorflow 默认全部使用。如果想只使用部分 GPU,可以设置CUDA_VISIBLE_DEVICES。在调用 python 程序时,可以使用:
CUDA_VISIBLE_DEVICES=1 python my_script.py
Environment Variable Syntax Results
CUDA_VISIBLE_DEVICES=1 Only device 1 will be seen
CUDA_VISIBLE_DEVICES=0,1 Devices 0 and 1 will be visible
CUDA_VISIBLE_DEVICES="0,1" Same as above, quotation marks are optional
CUDA_VISIBLE_DEVICES=0,2,3 Devices 0, 2, 3 will be visible; device 1 is masked
CUDA_VISIBLE_DEVICES="" No GPU will be visible
(2)python 代码中设置使用的 GPU
如果要在 python 代码中设置使用的 GPU(如使用 pycharm 进行调试时),可以使用下面的代码:
CUDA_VISIBLE_DEVICES=1 python my_script.py
来源:Tensorflow 学习笔记(七) ———— 多GPU操作
Tensorflow 中指定使用设备:
"/cpu:0": 机器中的 CPU
"/gpu:0": 机器中的 GPU, 如果你有一个的话.
"/gpu:1": 机器中的第二个 GPU, 以此类推...
但是有问题:
GPU 显存分析
默认 tensorflow 是使用 GPU 尽可能多的显存。可以通过下面的方式,来设置使用的 GPU 显存:
gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.7)
sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options))
上面分配给 tensorflow 的 GPU 显存大小为:GPU 实际显存*0.7。
上面的只能设置固定的大小。如果想按需分配,可以使用allow_growth
参数(参考网址:http://blog.csdn.net/cq361106306/article/details/52950081):
gpu_options = tf.GPUOptions(allow_growth=True)
sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options))
nvidia-smi 是 Nvidia 显卡命令行管理套件,基于 NVML 库,旨在管理和监控 Nvidia GPU 设备。
命令行输入nvidia-smi 指令即可看到当前 nvidia 显卡的使用情况。
但是有时我们希望不仅知道那一固定时刻的 GPU 使用情况,我们希望一直掌握其动向,此时我们就希望周期性地输出,比如每 10s 就更新显示。 这时候就需要用到 watch命令,来周期性地执行 nvidia-smi 命令了。
watch的基本用法是:watch [options] command
作用:周期性执行某一命令,并将输出显示。
最常用的参数是 -n, 后面指定是每多少秒来执行一次命令。
监视显存:我们设置为每 10s 显示一次显存的情况:watch -n 10 nvidia-smi
测试发现:该 watch 为 Linux 下命令, windows 下不可用
或者直接该命令的一个选项 -l,通过该选项我们可以动态查看 GPU 使用情况:
nvidia-smi.exe -l 10
,表示10秒钟更新一次信息
显存占用和 GPU 利用率是两个不一样的东西,显卡是由 GPU 计算单元和显存等组成的,显存和 GPU 的关系有点类似于内存和 CPU 的关系。
这里推荐一个好用的小工具:gpustat,直接 pip install gpustat
即可安装,gpustat 基于 nvidia-smi,可以提供更美观简洁的展示,结合 watch 命令,可以动态实时监控 GPU 的使用情况。watch --color -n1 gpustat -cpu