分享

tensorflow 多GPU操作

 雪柳花明 2017-05-17

tensorflow 多GPU操作有两种方法:
一种是常用的数据并行,另一种是模型并行。


一 模型并行
指的是将一个完整的网络切分成不同块放在不同gpu上执行,每个gpu可能只处理某一张图的四分之一。采用模型并行很大程度上是因为显存不够放不下整个网络的数据。



二  数据并行

数据并行的原理很简单,如下图,其中CPU主要负责梯度平均和参数更新,而GPU1和GPU2主要负责训练模型副本(model replica),这里称作“模型副本”是因为它们都是基于训练样例的子集训练得到的,模型之间具有一定的独立性。具体的训练步骤如下,

 (1)在GPU1、GPU2上分别定义模型参数变量,网络结构;

(2)对于单独的GPU,分别从数据管道读取不同的数据块,然后进行前向传播(forward propagation)计算出loss,再计算关于当前Variables的gradients;

(3)把所有GPU输出的梯度数据转移到CPU上,先进行梯度取平均操作,然后进行模型参数的更新;

(4)重复步骤(1)-(3),直到模型参数收敛为止;

值得说明的是,在第(1)步中定义模型参数时,要考虑到不同model replica之间要能够share Variables,因此要采用tf.get_variable()函数而不是直接tf.Variables()(关于tf.get_variable()和tf.Variable的区别,请读者参见其帮助手册)。另外,因为tensorflow和theano类似,都是先定义好tensor Graph,再基于已经定义好的Graph进行模型迭代式训练的。因此在每次迭代过程中,只会对当前的模型参数进行更新,而不会调用tf.get_variable()函数重新定义模型变量,因此变量共享只是存在于模型定义阶段的一个概念。


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多