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.xdnf.cn/news/147095.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

推荐几本值得阅读的书籍!

大家好,这里是大话硬件。 初次关注我公众号的朋友第一反应基本都是认为内容太专业! 其实不然,大话硬件公众号除了有硬件设计方面的内容,还包含书籍推荐,个人反思总结模块等内容。 今天这篇文章继上篇荐书《相见恨晚的…

学习IEC 62055付费系统标准

1.IEC 62055 国际标准 IEC 62055 是目前关于付费系统的唯一国际标准,涵盖了付费系统、CIS 用户信息系统、售电系统、传输介质、数据传输标准、预付费电能表以及接口标准等内容。 IEC 62055-21 标准化架构IEC 62055-31 1 级和 2 级有功预付费电能表IEC 62055-41 STS…

如何快速恢复误删除的文件?教你一招,不花一分钱,三步就可以搞定!

电脑文件越存越多,我们都会不定时的进行清理,但有时候,我们难免会误删除一些重要文件。当遇到类似情况的时候,不要着急,很多时候,删除的文件是有办法恢复的。 市面上有很多文件恢复软件,就可以帮…

常用工具推荐!分享7款AI论文修改软件工具网站

在当今学术研究和写作领域,AI论文修改软件工具已经成为了不可或缺的助手。这些工具不仅能够帮助研究人员提高写作效率,还能确保论文的质量和原创性。以下是七款值得推荐的AI论文修改软件工具网站,其中特别推荐千笔-AIPassPaper。 1. 千笔-AI…

YOLOv8改进 | 特征融合篇,YOLOv8添加iAFF(多尺度通道注意力模块),并与C2f结构融合,提升小目标检测能力

摘要 特征融合,即来自不同层或分支的特征的组合,是现代网络架构中无处不在的一部分。虽然它通常通过简单的操作(如求和或拼接)来实现,但这种方式可能并不是最佳选择。在这项工作中,提出了一种统一且通用的方案,即注意力特征融合(Attentional Feature Fusion),适用于…

心理辅导系统:Spring Boot技术驱动

3 系统分析 3.1可行性分析 在进行可行性分析时,我们通常根据软件工程里方法,通过四个方面来进行分析,分别是技术、经济、操作和法律可行性。因此,在基于对目标系统的基本调查和研究后,对提出的基本方案进行可行性分析。…

攻防世界---->Windows_Reverse1(补)

做题笔记。 做题回顾。 假设,我们不知道地址随机怎么办?不能动调,只能静态分析。 下载 查壳 upx脱壳。 32ida打开。 动调报错。 重新打开,静态分析。 跟进关键函数。 不明白可以反汇编和汇编一起看。 溯源。 *decode 取值等于 by…

robomimic应用教程(一)——模型训练

Robomimic使用集中式配置系统来指定所有级别的(超)参数 本文介绍了配置(推荐)和启动训练运行的两种方法 目录 一、使用config json(推荐) 二、在代码中构造一个配置对象 三、查看运行结果 1. 实验结果会存在一个固定文件夹中…

嵌入式入门小工程

此代码基于s3c2440 1.点灯 //led.c void init_led(void) {unsigned int t;t GPBCON;t & ~((3 << 10) | (3 << 12) | (3 << 14) | (3 << 16));t | (1 << 10) | (1 << 12) | (1 << 14) | (1 << 16);GPBCON t; }void le…

如何精准高效做好网站安全防护?一文解读

企业数字化转型过程中&#xff0c;难免会受到多种网络安全威胁带来的负面影响。比如攻击者通过利用Web服务程序以及网站系统的安全漏洞&#xff0c;对企业进行数据窃取等破坏活动&#xff0c;严重损害企业利益。如何精准高效做好网站安全防护&#xff1f;相信本文会为你带来启发…

心觉:保持感恩的心,为什么可以吸引更多好机会和财富

​Hi&#xff0c;我是心觉&#xff0c;与你一起玩转潜意识、脑波音乐和吸引力法则&#xff0c;轻松掌控自己的人生&#xff01; 挑战每日一省写作176/1000天 保持一颗感恩的心&#xff0c;就可以吸引更多的机会和财富 很多人可能不理解&#xff0c;但是这是事实 千正万确的…

armbian debian 系统安装overlayroot后无法启用

千盼万盼 终于debian12可以用了 它终于也跟ubuntu 系统一样可以安装overlayroot了 但是 满怀欣喜的装完了发现 压根没法启动 这。。。。。 原因吗 也简单。。。 默认的映像里没有busybox......... 而它有这个要求。。。 overlayroot 包中有一个小错误&#xff1a;它要求 gr…

Java基础(上)

Java基础&#xff08;上&#xff09; 基础概念与常识 Java语言有哪些特点&#xff1f; 简单易学&#xff08;语法简单&#xff0c;上手容易&#xff09;面向对象&#xff08;封装&#xff0c;继承&#xff0c;多态&#xff09;平台无关性&#xff08;Java虚拟机实现平台无关…

黑群晖安装教程

黑群晖&#xff08;一种非官方的群晖NAS系统安装方式&#xff09;的安装教程相对复杂&#xff0c;但按照以下步骤操作&#xff0c;可以顺利完成安装。请注意&#xff0c;由于黑群晖涉及非官方操作&#xff0c;安装过程中可能遇到各种不确定因素&#xff0c;建议具备一定的计算机…

AI智能跟踪技术核心!

1. 目标检测技术 在视频序列的第一帧中&#xff0c;通过目标检测算法确定要追踪的目标对象的位置和大小。 技术实现&#xff1a;目标检测算法可以基于传统的图像处理技术&#xff0c;如颜色、纹理、形状等特征&#xff0c;也可以基于深度学习方法&#xff0c;如卷积神经网络&…

Wireshark学习使用记录

wireshark 是一个非常好用的抓包工具&#xff0c;使用 wireshark 工具抓包分析&#xff0c;是学习网络编程必不可少的一项技能。 原理 Wireshark使用的环境大致分为两种:一种是电脑直连互联网的单机环境&#xff0c;另外一种就是应用比较多的互联网环境&#xff0c;也就是连接…

Android SystemUI组件(07)锁屏KeyguardViewMediator分析

该系列文章总纲链接&#xff1a;专题分纲目录 Android SystemUI组件 本章关键点总结 & 说明&#xff1a; 说明&#xff1a;本章节持续迭代之前章节的思维导图&#xff0c;主要关注左侧上方锁屏分析部分即可。 为了更好理解本文的内容&#xff0c;优先说明下SystemUI中与Ke…

虚拟机VMware安装+centos8

1、安装虚拟机 这里以VMware-workstation-full-14.1.1-7528167.exe为例进行安装虚拟机。 注意win11&#xff0c;不能安装14的版本&#xff0c;新建虚拟机打开会崩的。建议换成16版本的。 此处安装的为centos7版本&#xff0c;双击就可以开始安装了。 选择下一步 勾选我接受&a…

【电路笔记】-运算放大器积分器

运算放大器积分器 文章目录 运算放大器积分器1、概述2、运算放大器积分器的表示2.1 理想积分器2.2 交流响应2.3 输出公式3、限制4、总结1、概述 在我们之前与运算放大器相关的大多数文章中,配置都是基于带有电阻器作为反馈环路、分压器或互连许多运算放大器的一部分的放大器。…

C++入门(03)萌新问题多(二)

文章目录 1. VS2022 控制台输出中文时&#xff0c;变成了一堆“&#xff1f;”1.1 字体、语言设置1.2 在程序中指定控制台编码1.3 修改注册表&#xff08;只能说试试吧&#xff09; 1. VS2022 控制台输出中文时&#xff0c;变成了一堆“&#xff1f;” 问题如下&#xff0c;Vi…