译文 | 与TensorFlow的第一次接触 第六章:并发

第一版TensorFlow第一版发布于2015年11月,它可以运行在多台服务器的GPU上,同时并在其上面进行训练。2016年2月,更新版中增加了分布式与并发处理。

在本章简短的小节中,我会介绍如何使用GPU。对想深入理解这些设备是如何工作的读者,最后章节中列出了一些参考引用,本书不会讨论分布式版本中的细节,对分布式细节感兴趣的读者,最后章节中同样列出了一些参考引用。

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”)来指定:

多个GPU 并发

假如我们有不止一个CPU,通常我们想在解决一个问题时并发使用民有GPU。例如,我们可建立模型来将工作分布式分发到多个GPU上,示例如下:

代码与之前的代码功能类似,但是现在有2个GPU来执行乘法计算(为简化示例,两个GPU执行的逻辑一样),稍后CPU执行加法计算。因为log_device_placement设置为true,我们可看到操作是如何在多个设备间分布式分发的:

编码实现多GPU

我们通过一个代码例子为总结这一简短的小节,代码例子与DamienAymeric在Github上分享的类似,n=10时,计算An+Bn,比较1个GPU与2个GPU的执行时间。

首先,导入需要库:

通过numpy库用随机值创建两个矩阵:

然后创建两个结构体来存储结果:

接下来,定义matpow()函数如下:

如果在一个GPU上执行这段代码,过程如下:

如果在2个GPU上运行,代码如下:

最后,打印计算时间:

分布式版本TensorFlow

如之前所说,Google在2016年2月开源了分布式版本的TensorFlow,其基于gRPC,一个用来进程间通信的,高性能开源RPC框架(TensorFlow Serving使用同样的协议)。

如果想使用分布式版本,需要自己编译二进制程序,因为目前该库只以源码的形式提供。本书不会讨论分布式版本的细节,如果读者想了解关于分布式的信息,建议访问TensorFlow分布式版本的官网。

跟之前章节类似,本章中的代码同样能在Github上获得。我希望本章节已经描述清楚了如何通过多GPU来加速训练模型。

原文发布于微信公众号 - 人工智能LeadAI(atleadai)

原文发表时间:2017-12-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ATYUN订阅号

使用新的谷歌TensorBoard API,让你的机器学习可视化

谷歌在2015年开源TensorFlow时,包含了一套用于检查理解并运行你的TensorFlow模型的可视化工具TensorBoard。Tensorboard包...

3145
来自专栏机器学习算法与Python学习

支持向量机Python实现(附源码与数据)

之前的文章已经将支持向量机的原理讲解的比较清楚了,今天这篇文章主要是基于Python实现支持向量机,具体的数据集和源代码如下所示(文末附有本文使用的数据集和源代...

3305
来自专栏用户画像

1.2.1计算机网络分层结构

两个系统中实体间的通信是一个很复杂的过程,为了降低协议设计和调试过程的复杂性,也为了便于对网络进行研究、实现和维护,促进标准化工作,通常对计算机网络的体系结构以...

722
来自专栏互联网研发闲思录

个性化推荐系统(八)--- 机器学习深度学习召回集扩量

个性化推荐系统评价有两个重要指标,一个是召回率一个是准确率。召回率就是:召回率=提取正确信息条数/样本中信息条数。准确率就是:准确率=提取出正确信息条数/提取信...

2285
来自专栏SnailTyan

Improving Deep Neural Networks学习笔记(一)

1. Setting up your Machine Learning Application 1.1 Train/Dev/Test sets Make sur...

1900
来自专栏小鹏的专栏

刚开始玩openMP,总结一下遇到的一点小问题。

        首先,VS中设置步骤:         工程属性 —> C/C++ —> language 中的Open MP Suport中选择Yes 就OK...

2069
来自专栏蓝天

向量时钟解决数据一致性

向量时钟,最早是用于分布式系统中进程间的时间同步。由于在分布式系统中没有一个直接的全局逻辑时钟。在一个由n个并发进程构成的系统中,每个事件的逻辑时钟均由一个n...

781
来自专栏小狼的世界

使用Numpy验证Google GRE的随机选择算法

最近在读《SRE Google运维解密》第20章提到数据中心内部服务器的负载均衡方法,文章对比了几种负载均衡的算法,其中随机选择算法,非常适合用 Numpy 模...

982
来自专栏DeveWork

解决WordPress文章密码保护在首页(摘要)不起作用

如果你碰到这个问题,就说明你的主题还不够完善。是的,之前Devework主题也是这样,但现在已经修复了。这类问题都是,首页的文章上如果是摘要显示的或者截断输出的...

1928
来自专栏有趣的Python和你

Python爬虫之阳光电影爬虫爬虫分析代码

1345

扫码关注云+社区