译文 | 与TensorFlow的第一次接触 第六章:并发
来源:互联网 发布:淘宝注册公司靠谱吗 编辑:程序博客网 时间:2024/05/21 06:49
正文共1434个字,21张图,预计阅读时间:4分钟。
第一版TensorFlow第一版发布于2015年11月,它可以运行在多台服务器的GPU上,同时并在其上面进行训练。2016年2月,更新版中增加了分布式与并发处理。
在本章简短的小节中,我会介绍如何使用GPU。对想深入理解这些设备是如何工作的读者,最后章节中列出了一些参考引用,本书不会讨论分布式版本中的细节,对分布式细节感兴趣的读者,最后章节中同样列出了一些参考引用。
如果需要TensorFlow支持GPU,需要安装CudaToolkit 7.0 and CUDNN 6.5 V2。为安装这些环境,建议读者访问cuda的官网来了解安装细节。
TensorFlow中引用这些设备的方式如下:
“/cpu:0”: To reference the server’s CPU.
“/gpu:0”: The server’s GPU, if only one is available.
“/gpu:1”: The second server’s GPU, and so on.
为了追踪操作与tensor被分配到哪个设备上了,我们需要以log_device_placement设置为true作为参数来创建session,示例代码如下:
当读者在自己电脑上测试本代码时,会看如下类似的相关输出:
同时,根据这个输出结果,我们同样可看到每一部分是在哪调度执行的。
如果我们希望一个具体的操作调度到一个具体的设备上执行,而不是由系统自动选择设备,我们可通过tf.device来创建设备上下文,所有在该上下文中的操作都会调度到该设备中。
如果系统中不止一个GPU,默认选择较小编号的GPU。假如我们想在不同的GPU上执行操作,需要显式指明。例如,如果我们想让之前的代码在GPU2上执行,可通过tf.device(“/gpu:2”)来指定:
假如我们有不止一个CPU,通常我们想在解决一个问题时并发使用民有GPU。例如,我们可建立模型来将工作分布式分发到多个GPU上,示例如下:
代码与之前的代码功能类似,但是现在有2个GPU来执行乘法计算(为简化示例,两个GPU执行的逻辑一样),稍后CPU执行加法计算。因为log_device_placement设置为true,我们可看到操作是如何在多个设备间分布式分发的:
我们通过一个代码例子为总结这一简短的小节,代码例子与DamienAymeric在Github上分享的类似,n=10时,计算An+Bn,比较1个GPU与2个GPU的执行时间。
首先,导入需要库:
通过numpy库用随机值创建两个矩阵:
然后创建两个结构体来存储结果:
接下来,定义matpow()函数如下:
如果在一个GPU上执行这段代码,过程如下:
如果在2个GPU上运行,代码如下:
最后,打印计算时间:
如之前所说,Google在2016年2月开源了分布式版本的TensorFlow,其基于gRPC,一个用来进程间通信的,高性能开源RPC框架(TensorFlow Serving使用同样的协议)。
如果想使用分布式版本,需要自己编译二进制程序,因为目前该库只以源码的形式提供。本书不会讨论分布式版本的细节,如果读者想了解关于分布式的信息,建议访问TensorFlow分布式版本的官网。
跟之前章节类似,本章中的代码同样能在Github上获得。我希望本章节已经描述清楚了如何通过多GPU来加速训练模型。
原文链接:http://www.jianshu.com/p/e8a267e9f47b
查阅更为简洁方便的分类文章以及最新的课程、产品信息,请移步至全新呈现的“LeadAI学院官网”:
www.leadai.org
请关注人工智能LeadAI公众号,查看更多专业文章
大家都在看
LSTM模型在问答系统中的应用
基于TensorFlow的神经网络解决用户流失概览问题
最全常见算法工程师面试题目整理(一)
最全常见算法工程师面试题目整理(二)
TensorFlow从1到2 | 第三章 深度学习革命的开端:卷积神经网络
装饰器 | Python高级编程
今天不如来复习下Python基础
点击“阅读原文”直接打开报名链接
- 译文 | 与TensorFlow的第一次接触 第六章:并发
- 译文 | 与TensorFlow的第一次接触 第三章:聚类
- 译文 | 与TensorFlow的第一次接触 第四章:单层神经网络
- 译文 | 与TensorFlow的第一次接触 第五章:多层神经网络
- 译文 | 与TensorFlow的第一次接触 第三章:聚类
- 译文 | 与TensorFlow的第一次接触(一)
- 译文 | 与TensorFlow的第一次接触第二篇:线性回归
- 第一次接触tensorflow
- 与Java的第一次接触
- 与OGRE的第一次接触
- 与Hadoop的第一次接触
- 与AndroidStudio的第一次接触
- 与markdown的第一次接触
- 与RxJava的第一次接触
- 与C++/CLI的第一次接触
- 我与“她”的第一次亲密接触
- 与RSS的第一次亲密接触
- 偶与.NET的第一次接触
- (三)java数据库篇笔记库(32)
- python实现删除文件与目录的方法
- 使用AnyProxy自动抓取微信公众号数据-包括阅读数和点赞数
- 快速教程:使用Cython来扩展Python/NumPy库
- SVN中Branch/tag的比较
- 译文 | 与TensorFlow的第一次接触 第六章:并发
- 使用scikit-learn解释随机森林算法
- SAP BDC 数据导入
- Integer的equal和==
- 程序员面试技巧
- C#使用GZIP解压缩完整读取网页内容
- mysql远程连接
- SpringBoot入门-8(使用properties进行配置)
- Jenkins入门系列之——01第一章 Jenkins是什么?