TensorFlow性能分析调研

news2025/4/8 8:00:18

文章目录

  • 背景:
  • 一、tensorflow的训练模式
      • 2.2.1 with tf.profiler.experimental.Profile('logdir',options=options):

背景:

进行性能分析的过程中,不可避免地在训练的过程中加入相关语句,以输出相应的日志文档,方便后续的性能分析。tensorflow不同于pytorch ,在pytorch中,使用profiling性能分析相对比较简单(详见pytorch的性能分析)。 tensorflow相对比较复杂,各种api不同,使用的方法也不同,通过调研和实验,得到如下的调研结果。

备注:
本次调研使用了UNet和mask_rcnn来做实验,两个网络使用了不同的训练方式,适合做调研。

一、tensorflow的训练模式

目前比较常见的网络训练方式有 model.fit() 和 estimator.train()的方式。

model.fit() ( UNet网络 )
在这里插入图片描述
estimator.train() ( mask_rcnn 网络)
在这里插入图片描述
二、添加性能分析语句
2.1针对于model.fit()
tf.keras.callbacks.TensorBoard

tboard_callback=tf.keras.callbacks.TensorBoard(
                log_dir='logs', histogram_freq=0, write_graph=True,
                write_images=False, update_freq='epoch', profile_batch=2,
                embeddings_freq=0, embeddings_metadata=None, **kwargs
                ) ## 加入该语句
model.fit(myGene,steps_per_epoch=300,epochs=1,callbacks=[model_checkpoint,tboard_callback]) ##  callbacks列表加入刚才的 tboard_callback

log_dir:保存TensorBoard要解析的日志文件的目录路径。
histogram_freq:默认为0。计算模型各层的激活值和权重直方图的频率(以epoch计)。如果设置为0,将不会计算直方图。若想直方图可视化,必须指定验证数据(或分割验证集)。
write_graph:默认为True。是否在TensorBoard中可视化图像。当设置为True时,日志文件会变得非常大。
write_images:默认为False。是否在 TensorBoard 中将模型权重以图片可视化。
update_freq:‘batch’或’epoch’或整数。使用’batch’时,在每个batch后将损失和评估值写入TensorBoard。这同样适用’epoch’。如果使用整数,比方说1000,回调将会在每1000个样本后将评估值和损失写入TensorBoard。请注意,过于频繁地写入TensorBoard会降低您的训练速度。
profile_batch:默认为2。每过多少个batch分析一次Profile。profile_batch必须是非负整数或整数的元组。一对正整数表示要进入Profile的batch的范围。设置profile_batch=0会禁用Profile分析
embeddings_freq:被选中的嵌入层会被保存的频率(在训练轮中)。如果设置为0,则不会可视化嵌入。
embeddings_metadata:一个字典,对应层的名字到保存有这个嵌入层元数据文件的名字。 查看 详情 关于元数据的数据格式。 以防同样的元数据被用于所用的嵌入层,字符串可以被传入。

2.2 针对于estimator.train()
tf.estimator.ProfilerHook()

tf.estimator.ProfilerHook(
    save_steps=None,
    save_secs=None,
    output_dir='',
    show_dataflow=True,
    show_memory=False
)

save_steps int ,每N步保存一次配置文件跟踪。应该设置 save_secs 和 save_steps 之一。
save_secs int 或 float ,每N秒保存一次配置文件跟踪。
output_dir string ,将概要文件跟踪保存到的目录。默认为当前目录。
show_dataflow bool (如果为True),将流量事件添加到连接张量的生产者和消费者的迹线中。
show_memory bool ,如果为True,则将对象快照事件添加到跟踪中,以显示张量的大小和生存期。

mask_rcnn 改动如下

train_estimator.train(
      input_fn=train_input_fn,
      max_steps=self._runtime_config.total_steps,
      hooks= get_training_hooks(      #加入性能分析钩子
        mode="train",
        model_dir=self._runtime_config.model_dir,
        checkpoint_path=self._runtime_config.checkpoint,
        skip_checkpoint_variables=self._runtime_config.skip_checkpoint_variables
      )
    )
 
def get_training_hooks(mode, model_dir, checkpoint_path=None, skip_checkpoint_variables=None):
 
    assert mode in ('train', 'eval')
 
    training_hooks = [
        AutoLoggingHook(
            # log_every_n_steps=RUNNING_CONFIG.display_step,
            log_every_n_steps=5 if "NGC_JOB_ID" not in os.environ else 100,
            # warmup_steps=RUNNING_CONFIG.warmup_steps,
            warmup_steps=100,
            is_training=True
        )
    ]
 
    if not MPI_is_distributed() or MPI_rank() == 0:
        training_hooks.append(PretrainedWeightsLoadingHook(
            prefix="resnet50/",
            checkpoint_path=checkpoint_path,
            skip_variables_regex=skip_checkpoint_variables
        ))
 
    if MPI_is_distributed() and mode == "train":
        training_hooks.append(hvd.BroadcastGlobalVariablesHook(root_rank=0))
 
    if not MPI_is_distributed() or MPI_rank() == 0:
        training_hooks.append(CheckpointSaverHook(
            checkpoint_dir=model_dir,
            checkpoint_basename="model.ckpt"
        ))
    time_hook = tf.estimator.ProfilerHook(save_steps=10, output_dir='./save/models/') ###  加入钩子
    training_hooks.append(time_hook)###  加入钩子  
 
    return training_hooks

但是,最后发现,tf.estimator.ProfilerHook方法只能生成timeline,利用chrome://tracing/ 看到调用关系, 无法看到 op耗时多少。

2.2.1 with tf.profiler.experimental.Profile(‘logdir’,options=options):

options = tf.profiler.experimental.ProfilerOptions(host_tracer_level = 2,python_tracer_level = 0,device_tracer_level = 1)
with tf.profiler.experimental.Profile('logdir',options=options):
    executer.train(
          train_input_fn=train_input_fn,
          run_eval_after_train=FLAGS.eval_after_training,
          eval_input_fn=eval_input_fn
            )
  1. tf.profiler.experimental.ProfilerOptions( host_tracer_level=2, python_tracer_level=0, device_tracer_level=1, delay_ms=None )

host_tracer_level :调整 CPU 跟踪级别。值为:1 - 仅关键信息,2 - 信息,3 - 详细。[默认值为 2]
python_tracer_level :切换 Python 函数调用的跟踪。值为:1
启用,0-禁用[默认值为0]
device_tracer_level :调整设备(TPU/GPU)跟踪级别。值为:1 - 启用,0 - 禁用 [默认值为 1]
delay_ms :请求所有主机在与当前时间相距 delay_ms 的时间戳处开始分析。 delay_ms 以毫秒为单位。如果为零,则每个主机将在收到请求后立即开始分析。默认值为 None,允许分析器猜测最佳值
2、剖析将在进入作用域时开始,退出作用域时停止并将结果保存到logdir。打开TensorBoard profile标签查看结果。
在这里插入图片描述然后,将输出的日志保存到本地,用虚拟环境 tensorboard --logdir=logs

三、tensorboard 分析输出日志
可以去下边的官网了解tensorboard的分析方法。

使用 Profiler 优化 TensorFlow 性能 | TensorFlow Core (google.cn)

在这里插入图片描述
主要看这个界面:profile。使用 Profiler 优化 TensorFlow 性能 | TensorFlow Core (google.cn)

Tools里边的工具:

第一个:(1)Overview page
概览页面提供了您的模型在性能剖析运行期间表现的顶级视图。该页面会向您显示主机和所有设备的汇总概览信息,以及一些提升模型训练性能的建议。您还可以在 Host 下拉列表中选择各个主机。

第一点: Performance Summay
在这里插入图片描述
(2) TensorFlow stats
TensorFlow operations 该表会报告 TensorFlow 运算的数据,其中每个运算占据一行,每种数据类型为一列(点击列标题可对列进行排序)。

点击上部窗格右侧的 Export as CSV 按钮可将此表中的数据导出为 CSV 文件.。在这里插入图片描述
The total “accumulated” time of an op includes the time spent inside the child ops. (包含子算子)
The total “self” time of an op does not include the time spent inside the child ops. (不包含子算子)
如果op有child op,则accumulated time包含child op的耗时;而self不包含child op的耗时。
如果op运行在host上,则该op在device上的相关耗时统计都为0
如果op运行在device上,则该 op在host上的相关耗时统计都为0
您可以在上述饼图和表格中选择是否考虑或不考虑idle time。
(3) GPU kernel stats

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

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

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

相关文章

作为码农的我,要怎么提高自己的收入?

打工人是不是都会想同一个问题:我怎么赚大钱? 作为码农的我,实在不知道该如何提高自己的收入,首付凑不齐房子买不了,生活怎么样才能过的更好一些? 今天,就来说说,作为程序员&#…

【数据结构进阶】红黑树【TreeMap TreeSet底层就是红黑树】

红黑树【TreeMap TreeSet底层就是红黑树】 概念 红黑树是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可能是Red或者Black。通过对任何一条从根到叶子结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出两倍&…

【数据库内核分析系列】:数据库索引的创建过程

文章目录普通表索引DefineIndeIndex_create函数index_build分区表索引数据库索引可以提高数据的访问速度,openGauss支持唯一索引、多字段索引、部分索引和表达式索引。行存表(ASTORE存储引擎)支持的索引类型:btree(行存…

绿盟SecXOps安全智能分析技术白皮书 模型更新

模型更新 定义内涵 本节的模型更新是指在模型训练完成并正式上线后,由运维人员采集并提供新的数据对 原有模型进行再训练、更新参数的过程。 技术背景 随着时间的推移,由于周期性事件、突变等状况的发生,当下的数据集和之前用于训练 模型…

通用预约小程序,可广泛应用于医疗、政务、教育、培训、体育、金融、生活服务等行业领域,基于腾讯小程序云开发,无须服务器和域名

项目介绍 采用小程序腾讯云技术构建的高效自有业务预约平台解决方案,无需域名和服务器即可搭建。 机构/商户/企业/个体可以利用本软件快速搭建出自有业务预约平台, 小程序在微信里打开,无需下载安装APP以及复杂的注册,即可轻松通…

真香啊,这招可以轻松抓取某音短视频数据(附 Python 代码)

众所周知,某音短视频是没有提供下载链接的,视频号也没下载链接,但我就想下载下来,还有视频下面的评论我也想拿到,那要肿么办呢?其实播放链接和评论是可以拿到的,我来细细道来 文章目录抓包技术提…

C++——STL之list详解

C——STL之list详解🏐什么是list🏐list的使用🏀splice🏀unique🏀remove🏀sort🏐list的实现🏀迭代器类(体会c的优势)⚽迭代器的构造⚽迭代器的模板参数&#x…

Java项目:springboot+vue电影院会员管理系统

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目代码架构设计简单,注释齐全,结构清晰,适合同为java初学者参考。 cinema项目是一套电影院会员管理系统…

第十五章 规则学习

15.1 基本概念 机器学习中的规则通常是指语义明确、能描述数据分布所隐含的客观规律或邻域概念、可写成“若…,则…”形式的逻辑规则。规则学习是从训练数据中学习出一组能用于对未见示例进行判别的规则。 与神经网络、支持向量机这样的黑箱模型相比,规则学习具有…

NewStarCTF公开赛week3密码学前两道题的wp

目录一、keyExchange1.原题2.考察知识点与解题思路Diffie-Hellman密钥交换3.解题脚本二、Prof. Shamirs Secret1.原题2.考察知识点与解题思路Shamir 门限方案3.解题脚本一、keyExchange 1.原题 题目给出的是题目给出的是加密过程和输出: from secret import flag…

【LeetCode每日一题:2011. 执行操作后的变量值~~~模拟】

题目描述 存在一种仅支持 4 种操作和 1 个变量 X 的编程语言: X 和 X 使变量 X 的值 加 1 –X 和 X-- 使变量 X 的值 减 1 最初,X 的值是 0 给你一个字符串数组 operations ,这是由操作组成的一个列表,返回执行所有操作后&…

Merge-On-Write 的处理流程

简单来讲,Merge-On-Write 的处理流程是: 对于每一条 Key,查找它在 Base 数据中的位置(rowsetid segmentid 行号) 如果 Key 存在,则将该行数据标记删除。标记删除的信息记录在 Delete Bitmap 中&#xff…

【C++】多态(万字详解) —— 条件 | 虚函数重写 | 抽象类 | 多态的原理

🌈欢迎来到C专栏~~多态 (꒪ꇴ꒪(꒪ꇴ꒪ )🐣,我是Scort目前状态:大三非科班啃C中🌍博客主页:张小姐的猫~江湖背景快上车🚘,握好方向盘跟我有一起打天下嘞!送给自己的一句鸡汤&#x1…

Logoist - 适用于设计师以及初次使用者,快速制作精美 logo

Logoist - 适用于设计师以及初次使用者的快速制作精美 logo 工具 从简单的标识到设计开发。它只需要一点时间来创建令人印象深刻的图像和矢量图形与Logoist。 我们的一体化应用程序为您提供了您需要的一切,将您的创意付诸实践或寻找新的灵感!它适合专业设计师和插画…

阿里云将加速与伙伴合作 促进Web3.0生态发展

12 月 15 日,在Web3.0 Cloud Day Singapore 2022 活动上,阿里云新加坡、南亚和泰国总经理 Dr Derek Wang 表示,阿里云将加速和伙伴的合作以促进创新。“我们正在与我们的合作伙伴合作以实现创新。我们仍然处于 Web 3.0 的早期阶段。我们仍然需…

【蓝桥杯选拔赛真题53】Scratch破解保险柜 少儿编程scratch图形化编程 蓝桥杯选拔赛真题讲解

目录 scratch破解保险柜 一、题目要求 编程实现 二、案例分析 1、角色分析

大数据处理之ClickHouse概述及架构参考(未完)

一、概述 中移某业务拨测系统基于业务数据拨测指标及日志的分析需要,随着Clickhouse在OLAP领域的快速崛起,以及一些特性考虑,比如: 数据量会很大,最好需要分布式; 支持实时写入,支持快速计算&a…

数据库管理-第四十九期 Exadata的存储节点管理(20221223)

数据库管理 2022-12-23第四十九期 Exadata的存储节点管理1 咋个查看数据是否被缓存到闪存卡了没2 EM13.5的Exadata监控3 存储降级总结第四十九期 Exadata的存储节点管理 本周二,抗原终于阴性了,星期三开始就回到现场开始办公。上周既然说了Exadata关于存…

[C++: 引用】

To shine,not be illuminated. 目录 1 引用概念 2 引用特性 3 常引用 4 使用场景 4.1 引用做参数 4.2 做返回值 5 传值、传引用效率比较 6 引用和指针的区别 7 总结 1 引用概念 引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为…

Java+Swing+mysql会员卡管理系统

JavaSwingmysql会员卡管理系统一、系统介绍二、功能展示1.主页页面2.会员信息查询3.会员信息删除三、系统实现1.members.java四、其它1.其他系统实现一、系统介绍 使用 Java 技术开发一个会员卡管理系统,具体实现功能如下: 1. 程序启动显示主界面&#…