TensorFlow分布式详解
每次 TensorFlow 运算都被描述成计算图的形式,允许结构和运算操作配置所具备的自由度能够被分配到各个分布式节点上。计算图可以分成多个子图,分配给服务器集群中的不同节点。
强烈推荐读者阅读论文“Large Scale Distributed Deep Networks”,本文的一个重要成果是证明了分布式随机梯度下降算法(SDG)可以运行,在该算法中,有多个节点在数据分片上并行工作,通过向参数服务器发送更新来异步独立更新梯度。论文摘要引用如下:实验揭示了一些关于大规模非凸优化的令人惊喜的结果。首先,很少应用于非凸问题的异步 SGD 在训练深度网络方面效果很好,特别是在结合 Adagrad 自适应学习率时。
本文本身的一个照片可以很好地解释这一点:
另一个值得阅读的文档是 TensorFlow 白皮书:《Large-Scale Machine Learning on Heterogeneous Distributed Systems》(Martín Abadi等人,2015年11月)。
考虑其中包含的一些示例,可以在下面的图片中看见,左侧显示的是TensorFlow代码片段,右侧显示的是对应的图表:
通过进行本地计算以及在必要时轻松添加计算图远程通信节点,计算图可以被切分覆盖多个节点,前面提到的论文中的图可以很好地解释这个问题:
梯度下降和所有主要的优化器算法可以以集中方式(下图左侧)或分布式方式(下图右侧)进行计算,后者包括一个 master 进程,它与多个提供 GPU 和 CPU 的 worker 相连:
分布式计算可以是同步的(所有 worker 同时更新数据块上的梯度)或异步的(更新不会同时发生),后者通常允许更高的可扩展性,更大的图计算在最优解的收敛方面表现得更好。以下照片同样来自 TensorFlow 白皮书,如果想了解更多,有兴趣的读者看看这篇论文:
最新文章
- MYSQL多实例配置方法 mysqld_multi方法
- SparkConf加载与SparkContext创建(源码阅读二)
- Redis快速入门详解
- iOS8以后 UISearchController的用法
- Java正常关闭资源的方式
- C中scanf/gets/fgets的区别
- SQL Server 2005中的分区表(四):删除(合并)一个分区(转)
- [topcoder]SmartWordToy
- System.Net网络编程--AuthenticationManager和IAuthenticationModule
- ThinkPHP模板
- lock(this)
- pygame编程之font模块
- java常见面试题及三大框架面试
- 使用Fiddler模拟客户端http响应
- codeblocks编译器
- nginx: [emerg] ";fastcgi_pass"; directive is duplicate in /etc/nginx/sites-enabled/default:57
- Golang开发环境搭建-Vim篇
- 乘风破浪:LeetCode真题_001_TwoSum
- Java - 打印质数(使用控制嵌套循环跳转)
- Java Executors小结
热门文章
- CVE-2012-0003:Microsoft Windows Media Player winmm.dll MIDI 文件堆溢出漏洞调试分析
- VMware 15 虚拟机黑屏问题
- word打印华文字体出现乱码
- 19.Quick QML-GroupBox自定义
- Canal详细入门实战(使用总结)
- 编译课设·CLion到VS踩坑·解决·备忘录
- 【BUAA软工】提问回顾与个人总结
- CRM帮助初创企业降本增效的四个方法
- JVM内存溢出后服务还能运行吗
- Vue | 指令实现自动翻译填充英文名功能