tensorflow-gpu

由于在使用tensorflow训练模型时,会自定义默认将所有gpu占满,所以在训练时可以指定使用tensorflow使用的gpu

import os

#指定第二块GPU
os.environ['CUDA_VISIBLE_DEVICES'] = '1'

#自定义显存
gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.7)
sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options,log_device_placement=True))
#其中log_device_placement=True会打印运行各个op的设备名称是cpu/0还是gpu/3

但是,默认情况下,即使有多块gpu,如果不对其进行指定,那么tensorflow会将所有的运算放到gpu/0上进行,所有如果要将不同的运算,放到不同的设备cpu还是gpu上,需要使用**tf.device()**手工指定。
示例:

import tensorflow as tf
#将这种赋值运算放到cpu上
with tf.device('/cpu:0'):
	a = tf.constant([1.0,2.0,3.0],shape=[3],name='a')
	b = tf.constant([4.0,5.6,6.0],shape=[3],name='b')
#将计算放到gpu:1上
with tf.device('/gpu:0'):
	c = a + b
#allow_soft_placement=True,如果运算无法放到gpu上运行,则自动放到cpu上,比如一些tf.Variable()中gpu上不支持tf.int32类型
with tf.Session(allow_soft_placement=True) as sess:
	res = sess.run(c)
	print(res)
‘’‘’‘’输出为:
2019-11-11 11:15:39.596183: I C:.cc:886] add: (Add)/job:localhost/replica:0/task:0/device:GPU:0
2019-11-11 11:15:39.596410: I C:cc:886] a: (Const)/job:localhost/replica:0/task:0/device:CPU:0
2019-11-11 11:15:39.596632: I :886] b: (Const)/job:localhost/replica:0/task:0/device:CPU:0
[5. 7. 9.]

深度学习训练并行模式:
如果利用多gpu或者机器,进行并行化深度学习模型训练时,有两种方式,同步模式,异步模式。
在这里插入图片描述
上述为深度学习训练流程图,每一次迭代,根据参数,读取一部分(min_batch)进行前向传播,然后根据label,计算误差,然后进行反向传播更新参数。不同并行模式的区别在于参数的更新方式。

异步模式的训练流程图如下图所示:
在这里插入图片描述
其实就是多个单一模式的并列,之所以可以加速训练,是利用了每个单一模式计算的时间差,这种模式下,每一个单一模式都是完全独立计算的。他获取参数时,获取的是当前最新的参数,这样做,计算资源是充分的利用起来都哪来计算,但是会性价比很低,由于每次都获取最新的参数,也就是说很多单一模式的计算结果并没有被用到,每次只会用到一个,因此loss的下降会不稳定,且抖动会很大。且很有可能无法达到较优的训练结果。

那么如何能够将所有单一模式的结构都被充分的使用呢,就有了如下的同步模式
同步模式:
在这里插入图片描述
可以看到,同步模式与异步模式的不同在于,参数获取的方式,为每个设备每次计算结果说有参数的平均值。因此如果各个设备计算能力不一样的话会导致训练速度变慢。
但是实际应用中,这种模式的计算效率低于异步模式。
在使用这种并行模式训练时,这设计代码过程中,训练时,需要把梯度摘出来,进行reduce_mean,然后进行更新迭代。这就涉及到了网络设计的方式问题。在接下来会进行解释。

本文参考链接:https://blog.csdn.net/VioletHan7/article/details/82769531

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值