Overview

tf.distribute.Strategy,是一个用于多GPU、多服务器或多TPU进行分布式模型训练的API接口。用户通过改动较少的代码就可以使用该接口进行分布式训练。该API除了可进行分布式训练外也可实现在不同的平台进行分布式评估和预测。但本文档主要是讨论分布式的训练。
官方文档中给出如下代码。

# Import TensorFlow
# __future__包在python3中为future,其中包含属性包括['__author__', '__builtins__', '__cached__', '__copyright__', '__doc__', '__file__', '__license__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '__title__', '__ver_major__', '__ver_minor__', '__ver_patch__', '__ver_sub__', '__version__']
from __future__ import absolute_import, division, print_function
import tensorflow as tf #gpu

同步训练(Syncronous Training),
不同数据片上的训练集进行共同训练,最后等到所有数据片上的训练集训练完成后再一起进行梯度聚合。典型的同步训练一般依靠all_reduce。

这里有必要简单说一下啥是all_reduce.
reduce,从多个sender那里接收数据,最终combine到一个节点上。
all_reduce,从多个sender那里接收数据,最终combine到每一个节点上。

异步训练(Asynchronous Training),不同数据片上的训练集在各自的数据片上进行异步训练,并独立进行梯度计算。典型的异步训练一般依靠参数服务器架构(parameter server architecture)。
从硬件层面上讲,用户可能需要一台机器上的多个GPU中运行程序或者在多台机器(0或多个GPU)上运行程序,甚至在云TPU上运行程序。针对用户的不同使用情况,下面列出了四种策略。

MirroredStrategy

tf.distribute.MirroredStrategy,支持一台机器上的多GPU同步分布式训练。该策略为每个GPU装置创建模型变量副本。创建的这些副本称为MirroredVariable。这些副本采用相同的更新策略进行同步更新。
高效的all-reduce算法用于跨设备通信变量更新。all-reduce是一种非常有效的融合算法,可以显著降低同步开销。默认情况下,使用NVIDIA NCCL进行算法实现,当然用户也可以选择其他的或者进行自定义。使用方法如下。

# tensorflow程序识别所有GPU
mirrored_strategy = tf.distribute.MirroredStrategy()
# 指定GPU
mirrored_strategy = tf.distribute.MirroredStrategy(devices=["/gpu:0", "/gpu:1"])
# 指定all-reduce的实现接口,默认为NVIDIA NCCL。可通过cross_device_ops选项进行指定。
#指定范围包括:tf.distribute.CrossDeviceOps(当前提供的)、tf.distribute.HierarchicalCopyAllReduce、tf.distribute.ReductionToOneDevice、tf.distribute.NcclAllReduce(默认的)
mirrored_strategy = tf.distribute.MirroredStrategy(cross_device_ops=tf.distribute.HierarchicalCopyAllReduce())

MultiWorkerMirroredStrategy

tf.distribute.experimental.MultiWorkerMirroredStrategy,与
MirroredStrategy非常相似。它支持多worker的同步分布式训练。其中,每个worker可以含有多个GPU。它使用CollectiveOps作为worker的all-reduce通信方法,用于保持变量的同步。使用方法如下。

# 参数选项包括:
# CollectiveCommunication.RING implements ring-based collectives using gRPC as the communication layer.
# CollectiveCommunication.NCCL uses Nvidia's NCCL to implement collectives.
# CollectiveCommunication.AUTO defers the choice to the runtime
multiworker_strategy = tf.distribute.experimental.MultiWorkerMirroredStrategy(tf.distribute.experimental.CollectiveCommunication.NCCL)

该策略在使用上与MirroredStrategy最大的区别之一应该是worker的配置了。也就是对环境变量TF_CONFIG的配置,用例如下。

os.environ["TF_CONFIG"] = json.dumps({"cluster": {"worker": ["host1:port", "host2:port", "host3:port"],"ps": ["host4:port", "host5:port"]#用于异步分布式训练},"task": {"type": "worker", "index": 1}
})

TPUStrategy

该策略是针对TPU提出的,实现的也是同步分布式训练。实现方式与前面相似。鉴于手头暂时得不到TPU,在此不多做叙述。

ParameterServerStrategy

该策略支持参数服务器训练。它即能实现同步分布式训练,又能实现异步分布式训练。与前面不同的是,当模型在一台机器上训练时,变量不会被镜像,而是将他们放在CPU上,然后复制op到所有GPU上。当模型在多台机器上训练时,其中某些机器被设定为worker,另一些机器被设定为ps(parameter servers)。模型中的变量被复制到ps机子上,计算被复制到所有worker机子的GPU上。
在代码方面,跟之前的策略很像,无需太多改动。TF_CONFIG配置将上述内容。

ps_strategy = tf.distribute.experimental.ParameterServerStrategy()

参考网页

Distribute Strategy--翻译学习相关推荐

  1. 自学python推荐书籍 知乎-你一定不能错过的翻译学习资源!

    原标题:你一定不能错过的翻译学习资源! 1 翻译学习 同声传译的日常工作内容有哪些? http://www.zhihu.com/question/20109720 民国时期的学者是如何做到精通各国语言 ...

  2. Google文件系统(GFS)翻译学习

    为什么80%的码农都做不了架构师?>>>    Google文件系统(GFS)翻译学习 摘要 我们设计并实现了Google文件系统,它是一个可扩展的分布式分局系统,用于大型分布式数据 ...

  3. 昆明理工大学计算机技术英语翻译,昆明理工大学自动化专业英语翻译学习指导书.ppt...

    昆明理工大学自动化专业英语翻译学习指导书 机电或自动化专业英语 Specialized English for Electromechanization (Electro-Mechanism) Con ...

  4. [翻译][学习卡尔曼与贝叶斯滤波器][前言]

    [翻译][学习卡尔曼与贝叶斯滤波器--基于Python实践][前言] 开源飞控交流:562983648 项目链接:Github 注:这是一个互动式教程,博客只能显示静态页面.需要得到完整功能请下载项目 ...

  5. [翻译] 学习iOS开发的建议:如何从菜鸟到专家

    [文章原地址] http://mobile.tutsplus.com/tutorials/iphone/ios-quick-tip-from-novice-to-expert/ 翻译有误之处请勿见笑, ...

  6. Transformers from Scratch(从零开始的Transformers )翻译学习【更新中】

    文章目录 原文链接 作者前言 One-hot encoding(独热编码) 点积 矩阵乘法 查表法计算矩阵乘法 一阶序列模型 二阶序列模型 使用跳过的二阶序列模型 遮蔽 中场休息站 注意力之矩阵乘法 ...

  7. 基于投影学习的负采样改进型上位词关系提取 (翻译学习使用)

    原标题:Negative Sampling Improves Hypernymy ExtractionBased on Projection Learning 原作者们(感谢国际友人):Dmitry ...

  8. Automatic Portrait Segmentation for Image Stylization 翻译学习

    图像分割 论文资料 论文主页 论文翻译 Automatic Portrait Segmentation for Image Stylization 自动肖像分割的图像风格化 摘要 Abstract F ...

  9. 【论文阅读+】SCRDet 论文翻译学习

    SCRDet:Towards More Robust Detection for Small, Cluttered and Rotated Objects_babywang0的博客-CSDN博客_sc ...

最新文章

  1. jmeter对自身性能的优化
  2. 在VS上配置OpenCV
  3. 列表,集合,元组,字典
  4. Linux split命令:拆分大的tar压缩包然后解压
  5. 算法问题拓展——kadane算法及其二维数组的扩展
  6. Spork: Pig on Spark实现分析
  7. Gradle入门:我们的第一个Java项目
  8. 新手入门教程-------Spring Boot中集成RabbitMQ
  9. PyCharm 在Windows的有用快捷键
  10. 从GitHub存储库下载单个文件夹或目录
  11. 大学生html作业总结,总结 HTML标签作业
  12. bim webgl 模型 轻量化_BIM模型轻量化是什么?BIM模型轻量化原理
  13. Clickhouse 数据库连接工具——DBeaver
  14. 嗖嗖嗖Wordpress外贸企业主题制作教程--第二讲 整站下载器的使用和静态页面的准备
  15. 【室内/外设计】天正T20V4.0软件安装教程
  16. matlab中怎么看电压和电流值,matlab计算电压有效值
  17. 如何用艺术字制作水印?教你一招快速制作专属水印
  18. canvas圆形、半圆形进度条
  19. 下载 保存 sina 微博视频
  20. 实现webIM技术小结——websocket IM原理篇

热门文章

  1. 初级程序员应该怎么选电脑?来自从业5年维修工程师的建议
  2. 豆瓣top250-词云案例
  3. 【计算机网络学习笔记02】计算机网络概述(中)
  4. CodeForces - [ACM-ICPC Jiaozuo Onsite A]Xu Xiake in Henan Province(模拟)
  5. 深入理解图优化与g2o:g2o篇
  6. 【MATLAB】MATLAB 仿真模拟调制系统 — DSB 系统
  7. wps公式如何加序号_WPS表格技巧—筛选后也会自动连续的序号
  8. Excel中ROUND、ROUNDUP、ROUNDDOWN函数详解
  9. SQL 向上取整、向下取整、四舍五入取整的实例!round、rounddown、roundup
  10. Rviz显示不出数据了之一文搞懂Qos