对TensorFlow不了解的,猛的一看还以为TensorFlow是个设备什么的,其实本文要说的是Python的TensorFlow模块下一个叫device()的方法,即:

import tensorflow as tfwith tf.device('/gpu:0'):.........

设备是指一块可以用来运算并且拥有自己的地址空间的硬件,如CPU和GPU

TensorFlow为了在执行操作的时候充分利用计算资源,可以通过tf.device()方法明确指定操作在哪个设备上执行.

一般情况下不需要显示指定使用CPU还是GPU,TensorFlow会自动检测.

如果检测到GPU,TensorFlow会尽可能地利用第一个GPU('/gpu:0')来执行操作.

注意:如果机器上有超过一个可用的GPU,那么除了第一个外其它GPU默认是不参与计算的.

所以,在实际TensorFlow编程中,经常需要明确给定使用的CPU和GPU.
你可以通过如下方式指定使用哪个设备:

  • "/cpu:0": 表示使用机器CPU运算
  • "/gpu:0": 表示使用第一个GPU运算,如果有的话
  • "/gpu:1": 表示使用第二个GPU运算,以此类推

TensorFlow集群(Cluster)是一系列能够对TensorFlow中的图(Graph)进行分布式计算的任务(Task)。每个任务是同服务(Server,你可以把它认识是服务器集群中的一台服务器)相关联的。
TensorFlow中的服务会包含一个用于创建Session的主节点和至少一个用于图运算的工作节点。
另外在TensorFlow中,一个集群可以被拆分为一个或者多个作业(Job),每个作业可以包含至少一个任务(Task)
就这样TensorFlow把整个运算过程层层分包,最终确定哪个设备执行哪个操作
如下图所示:

下面来一个简单的例子:

# 测试TensorFlow的分布式集群设备调用
# 2019年4月18日
import tensorflow as tfif __name__ == '__main__':mat1 = tf.constant([3, 3], dtype=tf.float32, shape=[1,2])mat2 = tf.constant([[3.], [3.]])product = tf.matmul(mat1, mat2)# log_device_placement=True表示打印TensorFlow设备信息sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))sess.run(product)


我们可以发现Matmul(乘法)操作先创建了一个job,这个job又创建了一个Task,这个Task又把这个操作分配给了CPU:0去执行。

其实TensorFlow的CPU版本也能调用GPU,但是它少了个GPU加速,只有TensorFlow-gpu版本有GPU加速,因为GPU加速的原因,同一个程序,使用GPU版的TensorFlow可能会比CPU版的快100倍。

问题又来了,既然它能调用GPU,他是怎么去调用的呢?
这就和TensorFlow设备有关系了,设备(device)其实就是指你想调用哪个命名空间?然后就可以通过如下代码进行调用:

with tf.device('/gpu:0'):a = tf.constant([1, 2, 3], name='a')b = tf.constant(2, name='b')c = a * b# 新建Session
# log_device_placement=True表示打印TensorFlow设备信息
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
print(sess.run(c))

但是这也仅仅只能调用英伟达的显卡,英特尔的和AMD的显卡调用不了。
就拿自己的电脑举例吧,我的电脑有两个显卡:

  1. CPU的的集显(Intel),这个调用不了
  2. 英伟达(NVIDIA)的独显,这个可以调用

那么AMD和Intel或者其他显卡不能用来训练深度学习的模型呢?
因为其他的显卡内部是写死的,英伟达的显卡不是写死的,我们可以通过Python/C++调用CUDNN,从而进行矩阵运算。

另外你显卡的显存最好不要小于4G,原因嘛,算了又是一堆扯淡。

或者准确来说在TensorFlow的GPU版本中我们也很少调用GPU因为没有那个意义,在这种情况下,你这样那个GPU和CPU原理是一样的,因为他这里GPU是没有加速的,你等同于调了一个CPU,只有在TensorFlow的GPU版本中,我们才会分别调GPU和CPU。

有些操作只能在CPU下运算,所以我们才会在CPU下放入我们需要计算的东西,在这种场景下,我们才会用到这种设备(CPU)

既然这个东西在实际工作中作用不是太大,那么我们为什么会提到这个点呢?

因为我们更多的不是用它来调用本地资源,而是用它来调用分布式服务器资源,这就是另一回事了。

TensorFlow之设备(device)详解相关推荐

  1. Android 驱动(12)---Linux DTS(Device Tree Source)设备树详解

    Linux DTS(Device Tree Source)设备树详解 Linux DTS(Device Tree Source)设备树详解之一(背景基础知识篇) Linux DTS(Device Tr ...

  2. 高通平台msm8953 Linux DTS(Device Tree Source)设备树详解之二(DTS设备树匹配过程)

    本系列导航: 高通平台8953  Linux DTS(Device Tree Source)设备树详解之一(背景基础知识篇) 高通平台8953 Linux DTS(Device Tree Source ...

  3. 高通平台8953 Linux DTS(Device Tree Source)设备树详解之一(背景基础知识篇)

    本系列导航: 高通平台8953  Linux DTS(Device Tree Source)设备树详解之一(背景基础知识篇) 高通平台8953 Linux DTS(Device Tree Source ...

  4. 目标检测Tensorflow:Yolo v3代码详解 (2)

    目标检测Tensorflow:Yolo v3代码详解 (2) 三.解析Dataset()数据预处理部分 四. 模型训练 yolo_train.py 五. 模型冻结 model_freeze.py 六. ...

  5. imx6平台设备树详解

    设备树详解 在Linux3.x版本后,arch/arm/plat-xxx和arch/arm/mach-xxx中,描述板级细节的代码(比如platform_device.i2c_board_info等) ...

  6. Linux字符设备驱动详解七(“插件“设备树实现RGB灯驱动)

    文章目录 系列文章目录 前言 正文 Device Tree Overlays:"插件"设备树 传统设备树 "插件"设备树 使用前提 案例说明 设备树:foo.d ...

  7. Linux字符设备驱动详解四(使用自属的xbus驱动总线)

    文章目录 系列文章目录 前言 驱动目录 正文 驱动总线 总线管理 总线注册 设备注册 驱动注册 代码示例 总结 系列文章目录 Linux字符设备驱动详解 Linux字符设备驱动详解二(使用设备驱动模型 ...

  8. Linux驱动开发_设备文件系统详解

    目录 何为设备管理器? Linux下dev的作用 Devfs sysfs kobject udev proc 何为设备管理器? 设备管理器就是负责管理这台电脑上的外设,当我们通过电脑提供的USB口插入 ...

  9. Linux设备树详解

    Linux设备树详解 设备树小故事 设备树文件 使用设备树 修改设备树文件 编译设备树 异常处理 编写驱动文件 参考资料 设备树小故事 设备树(Device Tree),将这个词分开就是"设 ...

最新文章

  1. rhel系统启动过程_Linux 的启动流程
  2. 时间序列预测实例(prophet的血泪史)
  3. GNU C之__attribute__
  4. 解决EclipseSDK3.3.0无法启动问题
  5. openStreetMap学习网站
  6. Redis(1) 简介以及linux环境下的安装
  7. Libre OJ 「BalticOI 2013」非回文数 数位dp
  8. mysql往前一天同一时间_Mysql时间轴数据 获取同一天数据的前三条
  9. python入门应该学什么专业好_真的能半个月学会Python吗?(文末附python入门进阶教程)...
  10. 微软:这两个活动目录漏洞可使攻击者轻易接管 Windows 域名
  11. 10. 我的第一个Java应用程序
  12. Echarts数据可视化action图表行为的相关操作,开发全解+完美注释
  13. Ubuntu18.04实用快捷键
  14. 钢结构节点输出软件_BIM技术助力桥梁钢结构设计施工一体化建设
  15. 项目实训- 基于unity的2D多人乱斗闯关游戏设计与开发(综述)
  16. 一键生成数据库文档(持续更新)
  17. mysql 分页 pageindex_根据当前页号(pageIndex)和页大小(pageSize)获取分页数据
  18. 程序员被裁员失业有哪些软件众包外包平台可以接单?
  19. 风声日期时间选择器的一些小小的使用心得
  20. 信息学奥赛一本通1003:对齐输出

热门文章

  1. 台式电脑F1F2变成音量键怎么办
  2. 设置淘宝sku方法技巧 淘宝SKU如何设置
  3. Linux 命令小记
  4. 图层样式之:内发光、外发光
  5. Oracle用户被锁定问题
  6. 分享一个网易新闻的api接口
  7. 西安市2012年教师资格证考试报名时间:3月10-15日
  8. html给数字加货币单位,WPS如何批量给数字添加货币符号?
  9. IAR打开软件,很多文件找不到
  10. 浅尝辄止_数学建模(笔记_时间序列分析及其SPSS实现)