记录tensorflow多GPU操作的各个方面。
Tensorflow中指定使用设备
- “/cpu:0”: 机器中的 CPU
- “/gpu:0”: 机器中的 GPU, 如果你有一个的话.
- “/gpu:1”: 机器中的第二个 GPU, 以此类推…
1 | import tensorflow as tf |
1 | [[ 22. 28.] |
notebook里没有看到设备指派的log
观察到一个问题,显存被全部占满。
1 | # 新建一个graph. |
1 | [[ 22. 28.] |
虽然计算的时候指定了设备,但是问题来了,显存还是都被占满。
1 | # 指定多个GPU |
结论:修改device不会改变显存占用。
不全部占满显存的方法
1.所有显存设置分配比例
1 | gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.333) |
1 | [[ 44. 56.] |
显示占用了所有显存的30%。
2.自动增长:按需求分配显存
1 | config = tf.ConfigProto() |
1 | [[ 44. 56.] |
上面的几种方法都是所有的gpu都会涉及,不够干脆。和别人共用GPU还是使用下面的方法。
3.指定可见的gpu
在命令行执行 export CUDA_VISIBLE_DEVICES = "8,9,10,11,12,13,14,15"
(你所用的gpu编号)
或者直接在~/.bashrc
中加入(如果你和别人使用不同的登陆账号的话)。
1 | # python设置系统变量的方法 |
1 | [[ 44. 56.] |
结果显示只有后面8个GPU显存被占用。
** 注意,在代码中指定设备时,重新从0开始计,而不是从8开始。**