在python的IDE中运行:
import os
from tensorflow.python.client import device_lib
# os.environ["TF_CPP_MIN_LOG_LEVEL"] = "0" 输出所有信息
# os.environ["TF_CPP_MIN_LOG_LEVEL"] = "1" 屏幕通知信息
# os.environ["TF_CPP_MIN_LOG_LEVEL"] = "2" 屏蔽通知信息和警告信息
# os.environ["TF_CPP_MIN_LOG_LEVEL"] = "3" 屏蔽通知信息、警告信息、错误信息
if __name__ == "__main__":
print(device_lib.list_local_devices())
在本机电脑上输出如下信息:
[name: "/device:CPU:0"
device_type: "CPU"
memory_limit: 268435456
locality {
}
incarnation: 4223523817781623947
, name: "/device:GPU:0"
device_type: "GPU"
memory_limit: 3220691353
locality {
bus_id: 1
links {
}
}
incarnation: 14318725029708764519
physical_device_desc: "device: 0, name: GeForce GTX 745, pci bus id: 0000:01:00.0, compute capability: 5.0"
]
输出以上信息可以说明,Windows下可以用来进行深度学习的设备有/gpu:0和c/pu:0
运行:
import tensorflow as tf
with tf.device('/gpu:0'):
a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
c = tf.matmul(a, b)
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
print(sess.run(c))
用with tf.device创建一个设备环境,这个环境下的operation都统一运行在环境指定的设备上
输出:
Device mapping:
/job:localhost/replica:0/task:0/device:GPU:0 -> device: 0, name: GeForce GTX 745, pci bus id: 0000:01:00.0, compute capability: 5.0
MatMul: (MatMul): /job:localhost/replica:0/task:0/device:GPU:0
a: (Const): /job:localhost/replica:0/task:0/device:GPU:0
b: (Const): /job:localhost/replica:0/task:0/device:GPU:0
[[22. 28.]
[49. 64.]]
无特殊指定程序将在GPU上运行
import os
os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID" #保证程序中的GPU序号是和硬件中的序号是相同的
os.environ["CUDA_VISIBLE_DEVICES"] = "-1" #CPU
# os.environ["CUDA_VISIBLE_DEVICES"] = "0" GPU0
# os.environ["CUDA_VISIBLE_DEVICES"] = "n" GPUn
# os.environ["CUDA_VISIBLE_DEVICES"] = "0,1" GPU0,1
config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.9 # 占用GPU90%的显存
session = tf.Session(config=config)
在cmd环境下,运行
"C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi.exe"
设置为每 10s 显示一次显存的情况
在命令行中运行:
watch -n 10 nvidia-smi
七、设置GPU根据需求增长
config = tf.ConfigProto()
config.gpu_options.allow_growth=True
sess = tf.Session(config=config)
八、总结
以上都为使用Google深度学习框架Tensorflow时,GPU和CPU的设备信息配置,同时可以由上可知tensorflow-gpu是否安装后可使用。(注意:如果直接安装tensorflow-gpu而不安装tensorflow模块会导致部分函数找不到;如果先安装tensorflow-gpu,后安装tensorflow模块会导致gpu版本的模块被覆盖。)因此正确的操作是:通过对应版本的CUDA、CuDnn的环境配置后,先安装tensorflow,再安装tensorflow-gpu。