TensorFlow单机与分布式总结
单机多GPU训练
先简单介绍下单机的多GPU训练,然后再介绍分布式的多机多GPU训练。
单机的多GPU训练, tensorflow的官方已经给了一个cifar的例子,已经有比较详细的代码和文档介绍,这里大致说下多GPU的过程,以便方便引入到多机多GPU的介绍。
单机多GPU的训练过程:
通俗解释:
老师给小明和小华布置了10000张纸的乘法题并且把所有的乘法的结果加起来,每张纸上有128道乘法题。这里一张纸就是一个batch, batch_size就是128. 小明算加法比较快,小华算乘法比较快,于是小华就负责计算乘法, 小明负责把小华的乘法结果加起来 。这样小明就是CPU,小华就是GPU.
这样计算的话, 预计小明和小华两个人得要花费一个星期的时间才能完成老师布置的题目。于是小明就招来2个算乘法也很快的小红和小亮。于是每次小明就给小华,小红,小亮各分发一张纸,让他们算乘法, 他们三个人算完了之后, 把结果告诉小明,小明把他们的结果加起来,然后再给他们每人分发一张算乘法的纸,依次循环,知道所有的算完。
这里小明采用的是同步模式,就是每次要等他们三个都算完了之后,再统一算加法,算完了加法之后,再给他们三个分发纸张。这样速度就取决于他们三个中算乘法算的最慢的那个人,和分发纸张的速度。
TF分布式模式
In-graph 模式
将模型的计算图的不同部分放在不同的机器上执行
In-graph模式和单机多GPU模型有点类似。还是一个小明算加法, 但是算乘法的就可以不止是他们一个教室的小华,小红,小亮了。可以是其他教师的小张,小李。。。。
In-graph模式,把计算已经从单机多GPU,已经扩展到了多机多GPU了, 不过数据分发还是在一个节点。这样的好处是配置简单, 其他多机多GPU的计算节点,只要起个join操作, 暴露一个网络接口,等在那里接受任务就好了。这些计算节点暴露出来的网络接口,使用起来就跟本机的一个GPU的使用一样, 只要在操作的时候指定
就可以向指定GPU一样,把操作指定到一个计算节点上计算,使用起来和多GPU的类似。但是这样的坏处是训练数据的分发依然在一个节点上, 要把训练数据分发到不同的机器上,严重影响并发训练速度。在大数据训练的情况下, 不推荐使用这种模式。
Between-graph 模式
数据并行,每台机器使用完全相同的计算图
Between-graph模式下,训练的参数保存在参数服务器,数据不用分发, 数据分片的保存在各个计算节点,各个计算节点自己算自己的, 算完了之后,把要更新的参数告诉参数服务器,参数服务器更新参数。这种模式的优点是不用训练数据的分发了,尤其是在数据量在TB级的时候, 节省了大量的时间,所以大数据深度学习还是推荐使用Between-graph模式。
关注小鲸融创,一起深度学习金融科技!