---
title: 如何获取fp_point与bp_point-昇腾社区
description: 如何获取fp_point和bp_point。
keywords: fp_point;bp_point
url: https://www.hiascend.com/document/caselibrary/detail/topic_0000001337913621-SrWvFJLC
section: (其他)
---

# 如何获取fp_point与bp_point-昇腾社区

URL: https://www.hiascend.com/document/caselibrary/detail/topic_0000001337913621-SrWvFJLC
描述: 如何获取fp_point和bp_point。
关键词: fp_point;bp_point

昇腾文档 [了解详情](https://www.hiascend.com/document)

故障案例 [了解详情](https://www.hiascend.com/document/caselibrary)

如何获取fp_point与bp_point

如何获取fp_point与bp_point

2022/07/27

763

问题信息

| 问题来源 | 产品大类 | 产品子类 | 关键字 |
| --- | --- | --- | ---|
| 官方 | 模型训练 | TensorFlow | fp_point、bp_point |

#### 问题现象描述

如何获取fp_point和bp_point。

#### 原因分析

fp_point指的是forward propagation，bp_point指的是backward propagation，此处特指网络计算图的第一个前向传播算子和第一个反向传播算子。当用户需要采集训练迭代轨迹数据对训练任务进行性能分析时，需要输入前后向计算的打点算子，从而才能获取到前后向计算时间。

在训练过程中，通常我们保存的结果是checkpoint和meta文件，但在分析前向和反向算子的时候，需要网络结构文件（graph.pbtxt），一般用tf.io.write_graph来保存计算图，如果用Estimator启动训练的话，在RunConfig中配置model_dir参数也能打印计算图文件。

#### 解决措施

1. 打开graph.pbtxt文件，如下图所示。

每一个“node”指的是一个算子，我们要观察的是“op”这个属性。
2. 获取fp_point。

从第一个node开始搜索，找到第一个“计算类”算子。由于我们需要获取实际训练的性能数据，因此打点算子需要排除“数据类型”节点和“存储类”节点，诸如Const， VariableV2，IteratorV2，Identity，Reshape，Case等算子，或者说“name”这个属性中带有“step”、“Dataset”“seed”“kernel”的算子都可以排除。

如下图所示，到1732行才找到第一个计算类算子，op字段也很直观，“MatMul”，矩阵乘，一看就是计算类的了。我们想要的“fp_point”值取这个算子的“name”，也就是“dense/MatMul”。
3. 获取bp_point。

从图的最后一个node开始查找，找到第一个出现的“gradients”的计算图的计算节点，该算子即可作为反向打点算子。同样，排除“op”字段值是Assign、Const、NoOp等。

如下图所示，找到4457行才找到第一个反向传播算子，op是MatMul，name中带有gradients，bp_point取“gradients/dense/MatMul_grad/MatMul_1”。

找到的打点算子可能会被融合或改名，因此找到该算子之后，最好和GE生成的图ge_proto_xxxxx_Build.txt做下比较，如果能匹配上，则可以直接填入；如果名字无法匹配（例如GE生成的图多一个_1），则以GE中的算子名称为准。

本页内容

- 问题信息
- 问题现象描述
- 原因分析
- 解决措施
