1.TFlite 源码分析(一) 转换与量化
2.TensorFlow 源码大坑(2) Session
3.极简入门TensorFlow C++源码
4.序列化推荐中的源码GRU与Transformer源码解析之一
5.VSTS软件开发指南目录
6.从源码build Tensorflow2.6.5的记录
TFlite 源码分析(一) 转换与量化
TensorFlow Lite 是 Google 推出的用于设备端推断的开源深度学习框架,其主要目的源码是将 TensorFlow 模型部署到手机、嵌入式设备或物联网设备上。源码它由两部分构成:模型转换工具和模型推理引擎。源码
TFLite 的源码核心组成部分是转换(Converter)和解析(interpreter)。转换主要负责将模型转换成 TFLite 模型,源码小说自动采集源码并完成优化和量化的源码过程。解析则专注于高效执行推理,源码在端侧设备上进行计算。源码
转换部分,源码主要功能是源码通过 TFLiteConverter 接口实现。转换过程涉及确定输入数据类型,源码如是源码否为 float、int8 或 uint8。源码优化和转换过程主要通过 Toco 完成,源码包括导入模型、模型优化、转换以及输出模型。
在导入模型时,`ImportTensorFlowGraphDef` 函数负责确定输入输出节点,并检查所有算子是否支持,同时内联图的节点进行转换。量化过程则涉及计算网络中单层计算的量化公式,通常针对 UINT8(范围为 0-)或 INT8(范围为 -~)。量化功能主要通过 `CheckIsReadyForQuantization`、`Quantize` 等函数实现,确保输入输出节点的最大最小值存在。
输出模型时,根据指定的输出格式(如 TensorFlow 或 TFLite)进行。TFLite 输出主要分为数据保存和创建 TFLite 模型文件两部分。
量化过程分为选择量化参数和计算量化参数两部分。选择量化参数包括为输入和权重选择合适的量化参数,这些参数在 `MakeInitialDequantizeOperator` 中计算。计算参数则使用 `ChooseQuantizationParamsForArrayAndQuantizedDataType` 函数,该函数基于模板类模板实现。
TFLite 支持的量化操作包括 Post-training quantization 方法,实现相关功能的代码位于 `tools\optimize\quantize_model.cc`。
TensorFlow 源码大坑(2) Session
深入探讨TensorFlow源码中的Session机制,揭示其运行机制和复杂性。奶牛管理系统源码从Python和C++两端的Session API入手,解析其调用栈,解析内部工作流程。Python端的tf.Session().run()方法,通过初始化调用栈,实现计算图的执行。C++端的ClientSession.run()同样展示了Session运行机制,揭示了底层实现细节。对比之下,DirectSession作为Session的基类,展示了如何构建Executor并具体运行计算图,为理解TensorFlow的高效计算逻辑提供了深入视角。
深入解析Python端tf.Session().run()方法的调用栈,揭示了其如何通过初始化调用栈来执行计算图的全过程。从创建Session到调用run方法,每一次调用都紧锣密鼓地执行一系列操作,确保计算图能够正确运行,这使得理解TensorFlow的执行流程变得清晰。
同时,C++端的ClientSession.run()方法提供了另一种视角,展示了Session运行机制在底层语言中的实现。通过对比Python和C++端的实现,可以更深入地理解TensorFlow在不同环境下的兼容性和性能优化。
DirectSession作为Session的基类,展示了如何构建Executor并具体运行计算图。通过分析DirectSession的run方法和构建过程,可以理解TensorFlow在执行计算图时的灵活性和高效性,以及如何通过Executor优化计算流程。
总之,深入研究TensorFlow源码中的Session机制,不仅能够揭示其复杂性,还能为开发者提供优化计算图执行流程、提升模型训练效率的策略,是理解TensorFlow内核机制的关键。
极简入门TensorFlow C++源码
前一段时间,我专注在框架开发上,并偶尔协助业务同学优化使用TensorFlow的代码。在观看dmlc/relay、整套源码网站打包nnvm的代码时,我发现了它们的有趣之处。我也对TensorFlow的Graph IR、PaddlePaddle的Graph IR产生了兴趣,上周五在阅读代码时,无意间听到了一个数据竞赛群讨论框架的底层实现。几位算法大佬提到了看底层源码可能较为繁琐,因为这类代码通常相对容易理解。在与群内伙伴的交流后,我萌生了撰写一篇关于如何阅读TensorFlow或其他框架底层源码的文章。
选择合适版本的bazel,对于阅读TensorFlow源码至关重要。应使用版本为0..0的bazel来拉取TF2.0代码,因为太高的版本或太低的版本可能影响阅读体验。在安装了合适的bazel版本后,使用clion上的bazel插件进行导入,然后配置编译,导入项目,等待clion编译整个项目。完成编译后,就能愉快地阅读代码,甚至于protobuf生成的文件也能轻松跳转。
使用c++编译模型是TensorFlow的另一面。尝试使用c++编写模型代码,可以深入理解TensorFlow的底层机制。主要函数包括CreateGraphDef、ConcurrentSteps、ConcurrentSessions等。通过这些函数,可以构建计算图,定义节点、常量变量、操作符等。这为理解TensorFlow的逻辑提供了直观的视角。
深入分析代码后,可以了解到TensorFlow的GraphDef机制、Square类的实现、注册到特定op的弹幕网视频源码过程、functor的使用以及最终的实现逻辑。这有助于理解TensorFlow的核心原理,并在阅读源码时进行更深入的思考。
除了阅读源码,还可以通过编写测试用例来增强理解。TensorFlow提供了丰富的测试用例,如在client_session_test.cc中运行测试程序,可以验证代码的正确性。这不仅有助于理解代码,还能提高对TensorFlow框架的掌握程度。
阅读源码只是理解TensorFlow原理的开始,深入行业论文和请教行业专家是进一步深入学习的关键。网络上关于机器学习系统的资料丰富多样,但缺少系统性的课程。希望官方能够分享更多框架的干货,并期待在学习过程中总结和分享更多资源。阅读源码虽然复杂,但其背后蕴含的原理和逻辑十分有趣。
序列化推荐中的GRU与Transformer源码解析之一
GRU4Rec源码(TF版本):github.com/Songweiping/...
Transformer源码:github.com/kang/SASR...
序列化推荐领域中,GRU4Rec成功地将循环神经网络(NLP和时序预测常用)应用至推荐领域,此模型取得了良好效果。紧随其后的是"SASR",基于注意力机制的自适应序列推荐模型,实验表明其性能超越了GRU4Rec。
两篇论文的作者均在源码公开阶段,为研究者提供参考。我们深入剖析源码,后续系列文章将比较GRU4Rec与SASR的差异、联系与优缺点。
GRU4Rec模型结构简洁,采用门限循环神经网络,Embedding层处理item_id的one_hot编码,降低维度,便于优化。
并行化训练数据集优化了模型训练速度,构建了training_batch,便于使用GPU加速矩阵运算。
负采样技术提高了训练频率,台达解密源码利用同一时刻不同session中的item作为负样本。
模型设计了贝叶斯排序和TOP1等pairwise方法计算排序损失,认为pairwise结果优于pointwise。
实验数据集包括RSC和私有VIDEO集,结果表明GRU4Rec模型性能优秀,测试集评价指标包括召回率(recall)和倒序排名得分(mrr)。
深入分析模型的Tensorflow版本代码,主要从main.py和model.py文件开始,重点解析模型定义、损失函数、GRU4Rec核心代码、数据集初始化、模型训练与预测以及评估函数。
GRU4Rec的代码分析暂告一段落,后续将详细梳理SASR代码,目标是通过三篇文章全面探讨两个模型的细节。感谢关注。
VSTS软件开发指南目录
引子第一篇 VSTS介绍 第1章 VSTS概述 1.1 VSTS简介 1.2 VSTS快速演示 1.3 实战演习 1.4 河曲数码的项目经理 1.5 本章讨论 第2章 白话MSF方法论 2.1 果冻的预习 2.2 MSF基本原则 2.3 MSF团队模型 2.4 MSF过程模型 2.5 MSF敏捷开发模式 2.6 MSFCMMI开发模式 2.7 本章讨论 第3章 MSF敏捷模式的工作流程 3.1 开门件事 3.2 项目管理流程 3.3 回顾 3.4 本章讨论 第4章 工作项 4.1 什么是工作项 4.2 工作项的字段 4.3 MSF敏捷方法论中的工作项 4.4 本章讨论 第5章 源代码控制 5.1 TF源码控制系统基本场景 5.2 分支,合并 5.3 标签 5.4 上架,下架 5.5 实战指南 5.6 TFS和VSS 5.7 本章讨论 第6章 构建工具 6.1 TF构建的基本概念 6.2 TBF架构 6.3 拓扑结构和安全性 6.4 构建基本流程 6.5 每日构建 6.6 本章讨论 第7章 软件测试和VSTS测试工具 7.1 基本名词解释及分类 7.2 单元测试 7.3 代码覆盖率测试 7.4 构建验证测试 7.5 验收测试 7.6 “探索式”的测试 7.7 回归测试 7.8 场景/集成/系统测试 7.9 伙伴测试 7. 效能测试 7. 压力测试 7. 内部/外部公开测试 7. 易用性测试 7. “小强”大扫荡 7. 讨论 第8章 Office集成功能、报表、门户网站,以及其他 8.1 与Excel的集成 8.2 与Project的集成 8.3 报表分析 8.4 项目门户网站 8.5 从网页访问VSTS 8.6 使用TFSOM 8.7 本章讨论 第二篇 基本技术 第9章 提高个人技术 9.1 从HelloWorld开始 9.2 移山开发方法——比敏捷更精简 9.3 建立最简单的项目,WC 9.4 VSTS效能分析工具 9.5 本章讨论 第章 代码规范与代码复审 .1 代码风格规范 .2 代码设计规范 .3 代码复审 .4 本章讨论 第章 两人合作 .1 团队合作从两个人开始 .2 对工作的估计 .3 WBS和时间的分配 .4 单元测试 .5 好的单元测试的标准 .6 结对编程 .7 两人合作的不同阶段(舞蹈版) .8 两人的合作——如何影响对方 .9 黄金点——两人合作的项目 . 思考 . 进一步的作业 . 本章讨论 第三篇 实例分析 第章 构想阶段 .1 项目的起因 .2 收集意见 .3 团队构成 .4 领导小组——阿超的软件开发观点和管理理念 .5 团队讨论 .6 不对称的主楼 .7 用户需求分析 .8 决定项目的远景 .9 团队合作要经历的阶段 . 本章讨论 第章 计划阶段 .1 委群材,会群工 .2 项目计划 .3 创建TFS项目及设置 .4 软件项目的估计 .5 项目计划 .6 项目管理到底管啥 .7 移山故事:功能本天成,妙手偶得之 .8 测试计划 .9 本章讨论 第章 开发阶段 .1 典型用户 .2 从典型用户到场景 .3 场景到任务 .4 从任务到代码 .5 别人在干啥 .6 开发阶段的日常管理 .7 代码完成 .8 讨论 第章 稳定阶段 .1 似是而非的测试观念 .2 测试的文档 .3 测试设计说明书(TDS) .4 测试用例 .5 错误报告 .6 测试修复,关闭缺陷报告 .7 测试报告 .8 运用测试工具 .9 萝卜白菜,各有所爱 . 会诊 . 向ZBB进军 . 本章讨论 第章 发布阶段和之后 .1 Alpha和Beta发布 .2 执行发布计划 .3 设计变更(DCR) .4 重写或者是重构 .5 砍掉功能 .6 螺旋式的上升 第章 结束语 .1 事后诸葛亮会议(Postmortem) .2 大家的个人总结 附录A 参考资源 附录B 代码规范 附录C 测试计划 附录D 软件工程相关站点 附录E 事后诸葛亮会议模板 附录F VSTS新功能介绍 英文索引 中文索引扩展资料
这是一本介绍软件开发方法(MSF)和工具(VSTS)的书。《移山之道:VSTS软件开发指南》的内容包括:程序设计的基本原则;如何在工具的帮助下进行软件开发:如何与人合作:如何管理软件工程及微软的解决方案和方法论。从源码build Tensorflow2.6.5的记录
.从源码编译Tensorflow2.6.5踩坑记录,笔者经过一天的努力,失败四次后终于成功。Tensorflow2.6.5是截至.时,能够从源码编译的最新版本。
0 - 前期准备
为了对Tensorflow进行大规模修改并完成科研工作,笔者有从源码编译Tensorflow的需求。平时更常用的做法是在conda环境中pip install tensorflow,有时为了环境隔离方便打包,会用docker先套住,再上conda + pip安装。
1 - 资料汇总
教程参考:
另注:bazel的编译可以使用换源清华镜像(不是必要)。整体配置流程的根本依据还是官方的教程,但它的教程有些点和坑没有涉及到,所以多方材料了解。
2 - 整体流程
2.1 确定配置目标
官网上给到了配置目标,和对应的版本匹配关系(这张表里缺少了对numpy的版本要求)。笔者最后(在docker中)配置成功的版本为tensorflow2.6.5 numpy1..5 Python3.7. GCC7.5.0 CUDA.3 Bazel3.7.2。
2.2 开始配置
为了打包方便和编译环境隔离,在docker中进行了以下配置:
2. 安装TensorFlow pip软件包依赖项,其编译过程依赖于这些包。
3. Git Tensorflow源代码包。
4. 安装编译工具Bazel。
官网的介绍:(1)您需要安装Bazel,才能构建TensorFlow。您可以使用Bazelisk轻松安装Bazel,并且Bazelisk可以自动为TensorFlow下载合适的Bazel版本。为便于使用,请在PATH中将Bazelisk添加为bazel可执行文件。(2)如果没有Bazelisk,您可以手动安装Bazel。请务必安装受支持的Bazel版本,可以是tensorflow/configure.py中指定的介于_TF_MIN_BAZEL_VERSION和_TF_MAX_BAZEL_VERSION之间的任意版本。
但笔者尝试最快的安装方式是,到Github - bazelbuild/build/releases上下载对应的版本,然后使用sh脚本手动安装。比如依据刚才的配置目标,笔者需要的是Bazel3.7.2,所以下载的文件为bazel-3.7.2-installer-linux-x_.sh。
5. 配置编译build选项
官网介绍:通过运行TensorFlow源代码树根目录下的./configure配置系统build。此脚本会提示您指定TensorFlow依赖项的位置,并要求指定其他构建配置选项(例如,编译器标记)。
这一步就是选择y/N基本没啥问题,其他参考里都有贴实例。笔者需要GPU的支持,故在CUDA那一栏选择了y,其他部分如Rocm部分就是N(直接按enter也可以)。
6.开始编译
编译完成应输出
7.检查TF是否能用
3 - 踩坑记录
3.1 cuda.0在编译时不支持sm_
笔者最初选择的docker是cuda.0的,在bazel build --config=cuda //tensorflow/tools/pip_package:build_pip_package过程中出现了错误。所以之后选择了上面提到的cuda.3的docker。
3.2 问题2: numpy、TF、python版本匹配
在配置过程中,发现numpy、TF、python版本需要匹配,否则会出现错误。
4 - 启示
从源码编译Tensorflow2.6.5的过程,虽然经历了多次失败,但最终还是成功。这个过程也让我对Tensorflow的编译流程有了更深入的了解,同时也提醒我在后续的工作中要注意版本匹配问题。
探索TensorFlow核心组件系列之Session的运行源码分析
TensorFlow作为一个前后端分离的计算框架,旨在实现前端在任何设备、任何位置上使用API构建模型,而不受硬件资源限制。那么,TensorFlow是如何建立前后端的连接呢?在这一过程中,Session起着关键桥梁作用,它连接前后端通道,并通过session.run()触发计算,将前端的计算图转化为graphdef pb格式发送至后端。后端接收此格式,将计算图重建、剪枝、分裂,并分配到设备上,最终在多个Executor上执行计算。
Session管理着计算图、变量、队列、锁、设备和内存等多种资源,确保资源安全、高效地使用。在Session生命周期中,包含创建、运行、关闭和销毁四个阶段,确保模型运行的正确性和效率。
在Session创建时,使用BaseSession初始化,通过调用TF_NewSessionRef创建实例。此过程涉及确定图实例、判断混合精度设置以及创建Session。在分布式框架中,Python通过swig自动生成的函数符号映射关系调用C++层实现。
Session运行主要通过session.run()触发,该方法在BaseSession的run()中实现,涉及创建fetch处理器、获取最终fetches和targets,调用_do_run方法启动计算,并输出结果。在本地模式下,Session初始化会生成DirectSession对象。
综上所述,Session在TensorFlow架构中扮演着核心角色,连接前后端,管理资源,并确保模型高效、安全地运行。
移山之道:VSTS软件开发指南(第2版)目录
移山之道:VSTS软件开发指南(第2版)目录
1. 引子 本部分简要介绍了VSTS软件开发的全貌,从VSTS的基本概念到其在实际项目中的应用。 2. VSTS介绍 2.1 vsts概述: 介绍了VSTS的基础知识,包括其功能和主要特点。 2.2 快速演示: 通过实际操作演示VSTS的使用流程,让读者快速上手。 2.3 实战演习: 提供了实际项目案例,让读者在实战中理解和掌握VSTS。 2.4 项目经理视角: 从河曲数码项目经理的视角,解读VSTS在项目管理中的应用。 2.5 本章讨论: 对本章内容进行了总结和反思,引导读者深入思考。 3. msf方法论 3.1 开门件事: 明确了MSF方法论的初始步骤。 3.2 项目管理流程: 详细阐述了MSF在项目管理中的关键流程。 3.3 回顾: 对前一阶段的总结与反思,为后续步骤提供借鉴。 4. 工作项管理 4.1 工作项定义: 解释了工作项在项目管理中的重要性。 5. 源代码控制 5.1 TF源码控制: 着重讲解了基本操作和实际应用场景。 6. 构建工具 6.1 TF构建流程: 描述了构建工具在VSTS中的角色和使用方法。 7. 软件测试与工具 7.1 测试术语和分类: 帮助读者理解测试在项目中的角色。 8. 附加功能 8.1 Office集成: 展示了VSTS与其他办公工具的集成应用。 …… 附录部分提供了深入学习和实践的资源,包括代码规范、测试计划等。[推理部署]👉Mac源码编译TensorFlow C++指北
在Mac环境下编译TensorFlow C++源码,需要完成以下步骤,以避免可能的编译问题,确保顺利构建。
首先,确认系统环境满足要求。需有Xcode和Command Line Tools,JDK 1.8.0版本以支持编译过程中所需的Java环境,以及Bazel工具,TensorFlow依赖此工具进行编译。特别注意Bazel版本需与TensorFlow对应,如TensorFlow 1.对应Bazel 0..1。
接下里,安装依赖,包括JDK和Bazel。JDK安装时需检查电脑中是否已安装,并确保正确安装。使用HomeBrew安装Bazel,通过命令行接受协议,并使用`--user`指令确保安装在个人目录的`bin`文件夹下,同时设置`.bazelrc`路径为`$HOME/.bazelrc`。
安装自动化工具`automake`和使用Python3.7.5在虚拟环境中构建TensorFlow C++源码。推荐使用清华镜像源加速`pip`的安装过程。通过`git clone`方式下载TensorFlow源码,确保checkout至r1.分支。调整域名映射以提升`git clone`速度。
进行编译选项配置,通常在TensorFlow文件夹内运行命令,根据提示选择默认选项。
开始编译TensorFlow,此过程可能需要较长时间,完成后,应在`bazel-bin/tensorflow`目录下找到编译好的`libtensorflow_cc.so`和`libtensorflow_framework.1.dylib`文件。
若遇到`Undefined symbols for architecture x_: “_CFRelease”`错误,这通常与创建软连接有关,无需特别处理。若需要手动安装额外依赖库,如Eigen3,可参考相关指南。
编译完成后,可对C++接口进行测试,验证编译过程的正确性。通常情况下,Mac下的TensorFlow 1. C++源码编译完成。
最后,编译TFLite,生成的动态链接库将保存在指定目录下。在`CMakelists.txt`文件中增加对应配置项,以完成TFLite的构建。
总结而言,Mac下TensorFlow 1. C++源码编译及TFLite的构建,需要遵循上述步骤,并确保环境与工具版本的兼容性,以顺利进行编译过程。Linux系统下的编译方式相似,但具体细节可能有所不同。