Github下载完整代码:https://github.com/rockingdingo/tensorflow-tutorial/tree/master/mnist
目录
三、分割计算图模型Graph:将Tensorflow的图运算分配到不同计算单元
简介
利用tensorflow训练深度神经网络模型需要消耗很长时间,因为并行化计算就为提升运行速度提供了重要思路。Tensorflow提供了多种方法来使程序的并行运行,在使用这些方法时需要考虑的问题有:选取的计算设备是CPU还是GPU,每个CPU多少核的资源并行计算,构建计算图Graph时消耗资源如何分配等等问题。下面我们以Linux多核CPU的环境为例介绍几种常见方法来提升你的tensorflow程序的运行速度。
一、多核并行:CPU多核的运算和资源调用
在Tensorflow程序中,我们会经常看到”with tf.device("/cpu:0"): “ 这个语句。单独使用这个语句,而不做其他限制,实际上默认tensorflow程序占用所有可以使用的内存资源和CPU核,比如如果你的linux服务器是8核CPU,那么该程序会迅速占用可以使用的任意CPU,使用接近100%,最终结果就是影响整台服务器的其他程序。因此我们会想到需要限制使用的CPU核的个数和资源。(本次测试是在windows10服务器上,一共有两块CPU,每一块CPU分别都是16核)
运行convolutional.py代码,可以看到CPU1中16核全开,但是有些核的使用率很低!!!
在构建tf.Session() 变量时,可以通过传入tf.ConfigProto() 参数来改变一个tensorflow的session会话所使用的CPU核的个数以及线程数等等。
代码1
config = tf.ConfigProto(device_count={"CPU": 4}, # limit to num_cpu_core CPU usage 限制CPU使用的核的个数
inter_op_parallelism_threads = 1,
intra_op_parallelism_threads = 1,
&