tensorflow底层架构

tensorflow底层架构

架构图

在这里插入图片描述

  1. Training libraries 和 Inference libs(训练库和推理库)
  • Training libraries:用于模型的训练过程,包括定义模型、计算梯度、更新模型权重等。这些库提供了在训练过程中所需的所有功能。
  • Inference libs:用于模型的推理过程,主要用于在训练完成后将模型应用于实际数据的预测任务。
  1. Python client 和 C++ client
  • Python client:Python 是 TensorFlow 的主要接口,用户通常通过 Python 来定义计算图、构建模型和执行操作。Python API 易于使用,适合快速开发和原型设计。
  • C++ client:C++ API 提供更高的性能,适用于高效执行深度学习模型的推理任务,特别是在需要高性能的情况下,比如在嵌入式系统或生产环境中。
  1. C API
  • C API:这是一个底层的接口,提供对 TensorFlow 核心功能的访问。C API 允许不同的客户端(如 Python 和 C++)与 TensorFlow 系统进行交互,执行各种计算任务。
  1. Distributed master 和 Dataflow executor(分布式主节点和数据流执行器)
  • Distributed master:在分布式计算中,TensorFlow 的分布式主节点负责管理不同设备上的计算任务,协调它们之间的数据传输和工作负载分配。这允许模型训练和推理能够在多台机器或多种设备上进行。
  • Dataflow executor:数据流执行器负责执行计算图中的操作。在 TensorFlow 中,计算被表示为有向无环图(DAG),每个节点代表一个操作(算子)。数据流执行器遍历图,并按顺序执行每个操作。
  1. Kernel implementations(内核实现)
  • 这一层展示了 TensorFlow 内核中不同算子的实现,包括:
    • Const:常量操作,用于在计算图中定义不变的数据。
    • Var:变量操作,用于定义可以在训练过程中更新的权重或参数。
    • MatMul:矩阵乘法操作,广泛用于神经网络的前向和后向传播计算中。
    • Conv2D:二维卷积操作,是卷积神经网络(CNN)中的核心操作。
    • ReLU:激活函数操作(Rectified Linear Unit),用于引入非线性。
    • Queue:队列操作,通常用于管理输入数据的流动。
  • 这些内核实现表示了 TensorFlow 中执行的实际操作,是核心的计算组件。
  1. Networking layer(网络层)
  • RPCRDMA:这些是远程过程调用(Remote Procedure Call)和远程直接内存访问(Remote Direct Memory Access)技术,主要用于在分布式系统中进行高效的网络通信。它们使得不同的设备或机器之间可以快速传递数据和操作指令。
  1. Device layer(设备层)
  • CPUGPU:这是计算设备层。TensorFlow 的架构支持在多种硬件上执行计算,最常见的设备是 CPU 和 GPU。GPU 因为其高度并行计算的能力,通常被用于加速深度学习模型的训练和推理。
  • TensorFlow 可以根据操作的类型和数据的大小自动选择适当的设备进行计算,以提高效率。

总结

TensorFlow 的架构分为多个层次,从上层的 Python 和 C++ 客户端到底层的设备管理和分布式计算。上层提供了用户友好的 API,用于定义和执行计算图;中层处理数据流的执行和分布式计算;底层则负责与硬件设备的交互,确保计算任务能够高效地在不同设备上执行。这种分层结构使得 TensorFlow 既能方便用户使用,也能够高效处理大规模的深度学习任务。


计算流程

Tensorflow 实际运行的时候会先将 python 代码定义的网络结构解析为一个有向无环的计算图,通过这个计算图再调度计算资源运行模型。

计算图是包含一组 tf.Operation 对象(表示计算单元)和 tf.Tensor 对象(表示在运算之间流动的数据单元)的数据结构。**计算图在 tf.Graph 上下文中定义。由于这些计算图是数据结构,无需原始 Python 代码即可保存、运行和恢复它们。

算子(Operation 或 Op) 是计算图中的基本单位,负责执行特定的操作。每个算子会在计算图的节点上执行特定的数学计算或数据操作,诸如加法、矩阵乘法、卷积等。张量(Tensor)在算子之间传递,最终构成完整的计算流程 。

TF白皮书对内置op的分类总结如下:

在这里插入图片描述

张量(Tensor) 是一种多维数组,是机器学习和深度学习中表示数据的基本单位。张量可以有不同的维度,用于存储标量、向量、矩阵或更高维度的数据。在 TensorFlow 和其他深度学习框架中,所有的数据和操作都是基于张量进行的。

计算图示例

在这里插入图片描述

这个计算图中的每一个节点,除了输入和输出节点外,每个中间的节点都代表对张量 (Tensor) 的一个操作。从 checkpoint 目录下的 graph.pbtxt 文件中,我们可以找到每一个节点的结构,例如一个矩阵乘法的节点:

node {name: "dnn/dense/MatMul"op: "MatMul"input: "dnn/input_layer/Reshape_143"input: "dense/kernel/read"attr {key: "T"value {type: DT_FLOAT}}...}

我们可以看到每个节点有几个域:name、op、input、attr,其中 name、input、attr 都很容易理解,分别是节点的名字、输入 tensor 以及节点的额外属性,op ——算子(Operator),是张量操作的具体实现。

内核调用的实际流程:(以 MatMul 为例,假设在 GPU 上执行)

1.Python 代码调用 tf.matmul: 当调用 tf.matmul(A, B) 时,TensorFlow 会在计算图中创建一个 MatMul 节点。

2.构建计算图: TensorFlow 将 MatMul 节点添加到计算图中,并记录该节点的 op 为 MatMul,输入为张量 A 和 B。

3.编译计算图: TensorFlow 会编译计算图,在编译过程中,识别到 MatMul 节点需要调用矩阵乘法的内核。

4.内核选择: TensorFlow 查询内核注册表,找到与 MatMul 操作相关联的 CUDA 内核(如果是在 GPU 上运行)。

5.调用内核: TensorFlow 将 A 和 B 的数据传递给 CUDA 矩阵乘法内核(如 cublasSgemm 或 cublasDgemm,根据数据类型选择),并在 GPU 上执行实际的矩阵乘法计算。

6.结果返回: 内核执行完成后,结果张量被返回,并传递给计算图中的下一个节点。

计算图中其他节点详情

主图中展示了模型的主要层和计算操作,它们构成了模型的核心。

  • flattenflatten_1
    • 这两个节点表示神经网络中的 “flatten” 操作,它将输入数据展平(例如,将多维张量变为一维)。这些操作通常是连接全连接层(Dense 层)前的必要步骤。
  • densedense_1dense_2dense_3
    • 这些节点表示全连接层(Dense layer),是神经网络中的关键层之一。它们执行线性变换并加上偏置项,通常后接激活函数。这些层中的参数会在训练过程中更新。
  • dropoutdropout_1
    • Dropout 层用于正则化神经网络,以防止过拟合。它随机丢弃一部分神经元,确保模型不会过度依赖某些特定的特征。
  • metrics 和 metrics_1
    • 这些节点表示模型的评估指标,例如准确率(accuracy)或损失值(loss)。这些指标通常用于在训练或评估模型时进行模型性能的评估。
  • loss 和 loss_1
    • 这些是损失函数节点,计算预测输出与真实标签之间的误差。这些误差被用于更新模型的参数。
  • 数据流箭头
    • 箭头表示数据的流动。每个节点的输出成为下一个节点的输入。节点之间的连接说明了神经网络层之间的顺序和依赖关系。
  • Const(常量)
    • 这个节点表示一个常量值,它通常不会在训练过程中改变,而是作为输入或参数传递给网络的其他节点。

Auxiliary Nodes(辅助节点)

辅助节点表示一些与训练和计算相关的操作,但它们不直接参与模型的前向传播或预测中。

  • training 和 training_1

    • 这些节点表示训练过程中的一些辅助操作。通常在训练时,模型会涉及到如优化器、参数更新、学习率调整等操作,这些操作被封装在这些训练节点中。
  • loss_1_dense_3

    • 这个节点表示与模型中的损失计算相关的操作,通常会在反向传播中使用,用于计算梯度并调整模型参数。
      计算图中的细节展示

在这里插入图片描述
在这里插入图片描述


Reference:

  1. https://kirivir.github.io/articles/2021/10/10/1633876194557.html
  2. https://www.tensorflow.org/tensorboard/graphs
  3. https://www.tensorflow.org/guide/intro_to_graphs?hl=zh-cn
  4. https://www.tensorflow.org/guide/intro_to_graphs
  5. https://www.tensorflow.org/api_docs/python/tf/add
  6. https://www.tensorflow.org/api_docs/python/tf/linalg/matmul
  7. https://www.tensorflow.org/api_docs/python/tf/nn/conv2d
  8. https://www.tensorflow.org/guide/tensor
  9. https://www.tensorflow.org/api_docs/python/tf/Tensor
  10. https://www.deeplearning.ai/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/432322.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何使用ArcGIS Pro制作地理区位图

你是否经常在网上看到别人制作的地理区位图,自己也跃跃欲试,这里为你分享一下制作方法,希望能对你有所帮助。 乡镇数据处理 将乡镇边界数据加载进来,打开符号系统,将所有的乡镇边界数据设置成一个颜色,如…

流浪软件uniaccess agent 删除

cmd的C盘找不到就用git rm -rf 之后,只剩下 俩文件夹删不掉 然后360软件就看到了,可惜卸载失败 然后360文件就找到了,彻底删除 再回git 查看 方法 https://blog.51cto.com/u_16099347/11352333 https://blog.csdn.net/xioayu96/article/…

9.25盒马鲜生一面

1.自我介绍 2.css两种盒子模型 ​3.rem和em 4.px概念 5.transition和animation的区别 6.移动端适配方案 7.vh、vw、% 8.js基本数据类型 9.call、apply、bind的区别 10.js实现继承的方法 11.get和post的区别 12.web安全(XSS,CSRF) …

Hadoop安装与配置

一、Hadoop安装与配置 1、解压Hadoop安装包 找到hadoop-2.6.0.tar.gz,将其复到master0节点的”/home/csu”目录内,解压hadoop [csumaster0 ~]$ tar -zxvf ~/hadoop-2.6.0.tar.gz 解压成成功后自动在csu目录下创建hadoop-2.6.0子目录,可以用cd hadoo…

Matlab simulink建模与仿真 第十九章(生成C代码)

一、Configuration Parameters模型参数配置 1、仿真时间 (1)在Solver选项卡中可以设置仿真的起始时间和结束时间,一般起始时间设为0,而结束时间按需设置。 (2)如果希望仿真不会自动暂停(也就…

代码随想录算法训练营第55天 | 寻找存在的路径

寻找存在的路径 题目描述 给定一个包含 n 个节点的无向图中,节点编号从 1 到 n (含 1 和 n )。 你的任务是判断是否有一条从节点 source 出发到节点 destination 的路径存在。 输入描述 第一行包含两个正整数 N 和 M,N 代表节点…

音视频入门基础:AAC专题(9)——FFmpeg源码中计算AAC裸流每个packet的duration和duration_time的实现

音视频入门基础:AAC专题系列文章: 音视频入门基础:AAC专题(1)——AAC官方文档下载 音视频入门基础:AAC专题(2)——使用FFmpeg命令生成AAC裸流文件 音视频入门基础:AAC…

极度精简 Winows11 系统镜像!Tiny11 2311下载 - 支持苹果 M 芯片 Mac 安装 (ARM 精简版)!

最新推出的 Tiny11 是一款极端精简版 Windows 11 系统镜像,针对苹果 M 芯片 Mac 用户(ARM 架构)提供良好支持。Tiny11 内置了众多优化特性,如更小的安装体积和更快的启动速度,特别适合有特殊需求或老机型的用户。用户可…

打卡软件——人脸识别综合实现Pro

目录 概要 代码说明 1. 导入库 2. 加载预训练的车辆检测模型 3. 读取视频 4. 初始化变量 5. 逐帧处理视频 6. 处理帧 7. 处理检测结果 8. 计算框的坐标 9. 检查车辆中心是否已计数 10. 绘制检测框 11. 显示车流量 12. 退出条件 13. 释放资源 整体代码 效果展示…

过敏星人能否好好呼吸?约克VRF中央空调从呼吸开始全方位守护

对于包括向先生在内的过敏人群来说,秋天可能是比春天更难熬的坎儿,防不胜防的过敏原,例如空气中飘散的花粉、螨虫、霉菌、宠物毛发和皮屑、屋尘等,因为空气质量问题频频引发的过敏症状,令他们苦不堪言,止不住地打喷嚏、眼睛越揉越痒、起床后就开始擦鼻涕…… 如何才能远离这些…

免费的高质量、美观的甘特图模板

呈现您的项目规划新高度,精选几款高品质、视觉出众的甘特图模板。 甘特图Excel模板-Ganttable系统风格甘特图Excel模板-专业甘特图Excel模板-浅蓝色甘特图Excel模板-深灰色 这些 Excel 甘特图模板均源自 Ganttable 甘特图AI工具的智能生成与导出。利用 Ganttable&a…

Win32动态库介绍及全局函数导出

Windows操作系统中,库分为动态链接库(dll)和静态链接库(lib) 动态库是Windows中实现代码共享的一种方式。它是一个二进制式文件,不可单独运行,需要调用方调用才能运行。在Windows中,动态库可以被多种编程语言所支持。 静态链接库不…

线下线上陪玩系统要多少钱?该怎么搭建?

关于线下线上陪玩系统的价格,由于开发成本、功能复杂度、系统规模以及定制需求等因素的不同,价格差异较大,一般在几千元至几万元不等。具体价格需要根据实际需求和预算进行商议和定制。 搭建线下线上陪玩系统大致可以分为以下几个步骤&#…

论文阅读- On the Feasibility of Fully AI-automated Vishing Attacks

https://arxiv.org/pdf/2409.13793 目录 摘要 INTRODUCTION II. GOALS AND THREAT MODEL III. VIKING A. Architecture B. Interaction with the LLM C. Audio processing D. Call processing E. Implementation IV. EVALUATION METHODOLOGY A. Experiment design …

外卖霸王餐在对接api过程中需要注意哪些方面的问题?

在对接外卖霸王餐 API 过程中,需要注意以下几个方面: 一、合法性与合规性 1.遵守法律法规: 确保你的业务和对 API 的使用符合当地的法律法规,包括消费者权益保护法、电子商务法等。了解并遵守与食品相关的法律法规,…

后台数据管理系统 - 项目架构设计-Vue3+axios+Element-plus(0926)

十四、文章分类添加编辑 [element-plus 弹层] Git仓库&#xff1a;https://gitee.com/msyycn/vue3-hei-ma.git 点击显示弹层 准备弹层 const dialogVisible ref(false)<el-dialog v-model"dialogVisible" title"添加弹层" width"30%">…

【React】组件通信

1. 组件通信 组件间的数据传递 1.1 父传子 步骤&#xff1a; 父组件传递数据——在子组件标签上绑定属性子组件接收数据——子组件通过props参数接收数据 function Son(props) {return <div>{props.value}</div> }function App() {const value 父组件传给子…

从零开学C++:二叉搜索树

引言&#xff1a;在本篇博客当中&#xff0c;我们会将关于二叉树的进阶结构——二叉搜索树&#xff0c;强大的搜索效率让它在数据结构当中变得十分重要&#xff0c;让我们一起来进行学习吧&#xff01; 更多有关C的知识详解可前往个人主页&#xff1a;计信猫 一&#xff0c;二叉…

无人机避障——4D 毫米波雷达 SLAM篇(一)

做无人机避障相关工作&#xff0c;3D毫米波避障测试顺利后&#xff0c;开始做4D毫米波雷达无人机避障遇到4D雷达点云需要进行处理的问题&#xff0c;查阅文献&#xff0c;发现以下这篇文章中的建图方法应该为后续思考的方向&#xff0c;特此将这个开源项目进行复现和学习&#…

《论分布式存储系统架构设计》写作框架,软考高级系统架构设计师

论文真题 分布式存储系统&#xff08;Distributed Storage System&#xff09;通常将数据分散存储在多台独立的设备上。传统的网络存储系统采用集中的存储服务器存放所有数据&#xff0c;存储服务器成为系统性能的瓶颈&#xff0c;也是可靠性和安全性的焦点&#xff0c;不能满…