From 31e26dbd20d6977bdd0b53a41ef618d1166ed5ae Mon Sep 17 00:00:00 2001 From: pengxiaopeng Date: Tue, 6 Feb 2024 20:49:01 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A2=AF=E5=BA=A6=E7=8A=B6=E6=80=81=E6=A3=80?= =?UTF-8?q?=E6=B5=8B=E5=B7=A5=E5=85=B7=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- debug/accuracy_tools/grad_tool/README.md | 142 ++++++++++++++++++ .../accuracy_tools/grad_tool/img/image-1.png | Bin 0 -> 42344 bytes debug/accuracy_tools/grad_tool/img/image.png | Bin 0 -> 11977 bytes 3 files changed, 142 insertions(+) create mode 100644 debug/accuracy_tools/grad_tool/README.md create mode 100644 debug/accuracy_tools/grad_tool/img/image-1.png create mode 100644 debug/accuracy_tools/grad_tool/img/image.png diff --git a/debug/accuracy_tools/grad_tool/README.md b/debug/accuracy_tools/grad_tool/README.md new file mode 100644 index 0000000000..80de6a5148 --- /dev/null +++ b/debug/accuracy_tools/grad_tool/README.md @@ -0,0 +1,142 @@ +# Ascend模型梯度状态监测工具 + +Ascend模型梯度状态检测工具能监控一个模型的梯度数据,并且将梯度数据导出。 + +工具支持PyTorch版本:1.11.0/2.0/2.1。 + +## 工具特性 + +1. 使用便捷,不需要去训练流程里插入代码 +2. 可配置多种过滤项 + +## 工具安装 + +1. 将att仓代码下载到本地,并配置环境变量。假设下载后att仓路径为 $ATT_HOME,环境变量应配置为: + + ```bash + export PYTHONPATH=$PYTHONPATH:$ATT_HOME/debug/accuracy_tools/ + ``` + +2. 安装依赖pandas、pyyaml + + ```bash + pip3 install pandas pyyaml + ``` + +## 使用方式 + +1. 自己写一个配置文件 config.yaml,样例如下: + + ```python + level: L2 + param_list: ["module.model.7.bias", "module.model.0.weight"] + rank: [0, 1, 2, 3] + step: [0, 1, 2, 3] + bounds: [-10, -1, -0.1, -0.01, -0.001, 0, 0.001, 0.01, 0.1, 1, 10] + output_path: /home/pxp1/code/train_test_msft_multi/test/npu_grad_output4 + ``` + + **参数解释** + + | 参数名称 | 说明 | 是否必选 | + |--------------------------------|----------------------------------------------------|----------| + | level | 有三个 level 可选: L0, L1, L2。决定导出数据的程度,level 越大导出数据越详细。 | 是 | + | param_list | 一个列表。填写需要导出的梯度数据的变量名称。不指定或列表为空就表示导出所有参数的梯度数据。 | 否 | + | rank | 一个列表。在多卡场景下,填写需要导出梯度数据的卡的rank id,不指定或列表为空就表示导出所有rank的数据。单卡场景不关注这个参数,怎么填都行。 | 否 | + | step | 一个列表,指定需要导出数据的 step。不指定或列表为空就表示导出所有step的数据。| 否 | + | bounds | 一个列表,需要保证由数据小到大排列。用来划分区间以统计值分布。| 否 | + | output_path | 输出目录。如果不存在就会创建一个新目录。 | 是 | + + **bounds 和值分布解释** + + + 值分布:梯度数据落在各个区间的元素个数占总元素个数的比例。 + + bounds:一个列表,用来划分出区间以统计值分布。例如传入bounds = [-10, 0, 10],此时有一个 grad_value: Tensor = [9.3 , 5.4, -1.0, -12.3],依据 bounds 划分出 (-inf, -10]、(-10, 0]、(0, 10]、(10, inf) 四个区间,然后统计 grad_value 里的数据落在每个区间内的个数,得到 1、1、2、0。如下图所示: + + + ![Alt text](img/image-1.png) + + **不同级别的 level 的导出数据:** + + | 级别 | 特征数据表头 | 是否有方向数据 | + |-----| -- | -- | + | L0 | ("param_name", "MD5", "max", "min", "norm", "shape") | 无 | + | L1 | ("param_name", "MD5", *intervals, "=0", "max", "min", "norm", "shape") | 无 | + | L2 | ("param_name", "MD5", *intervals, "=0", "max", "min", "norm", "shape") | 有 | + + intervals 就是根据值分布划分出的区间 + + **方向数据解释:** + + 因为模型的参数往往非常大,所以存储真实数据是不可接受的,这里折衷一下,只存储梯度数据的正负号(一个布尔值),也就是方向。 + + + +2. 在训练流程执行之前传入 config.yaml 的路径实例化一个 GradientDumper 对象,并用该对象的 monitor 方法对需要监控的模型挂上钩子。示例代码如下: + + ```python + from grad_tool.grad_monitor import GradientMonitor + gm = GradientMonitor("config_path") + gm.monitor(model) + ``` + + + +## 输出结果 +**输出目录结构**(level 为 L2) +```bash +{output_path} + └── {timestamp} + ├── rank_{rank_id} + │ ├── grad_summary_{step}.csv + │ ├── step_{step} + │ │ ├── {param_name}.pt +``` ++ {timestamp}:梯度工具导出数据的时候会在 output_path 下生成一个时间戳目录,然后在这个时间戳目录下输出结果 ++ rank_{rank_id}:在分布式场景下,会记录卡的 rank_id。非分布式场景下,如果是 cpu 则记录进程号,如果是 cpu/gpu 则记录卡号 ++ grad_summary_{step}.csv:会分 step 记录每一步的梯度数据统计值 ++ step_{step}:这个目录下会存放该 step 的梯度的方向数据 ++ {param_name}.pt:模型参数的梯度方向数据 + +**grad_summary_{step}.csv** + +样例 + +![Alt text](img/image.png) + +字段解释 + +| 字段 | 含义 | +| --------------------- | ------------------------------------------------------------| +| Param_name | 模型参数名称。 | +| MD5 | 梯度数据的 MD5 值 | +| (-inf, -0.01]...[0.01, inf) | 梯度值落在区间内的元素个数占总元素的比例。 | +| =0 | 梯度为0的元素个数占总元素的比例。 | +| Max | 最大值 | +| Min | 最小值 | +| Norm | L2norm值 | +| Shape | 形状 | + +## 公开接口 + +```python +GradientMonitor.monitor(model) +``` + +**参数说明** + +| 参数名称 | 说明 | 是否必选 | +| ----------- | ------------------------------------------------------------ | -------- | +| model | 设置需要监测的模型 | 是 | + +```python +GradientMonitor.__init__(config_path) +``` + +**参数说明** + +| 参数名称 | 说明 | 是否必选 | +| ----------- | ------------------------------------------------------------ | -------- | +| config_path | 配置文件路径,需要以.yaml结尾 | 是 | + +# FAQ + diff --git a/debug/accuracy_tools/grad_tool/img/image-1.png b/debug/accuracy_tools/grad_tool/img/image-1.png new file mode 100644 index 0000000000000000000000000000000000000000..bee75b8b42e4d63137c554cb703ddd7f70d8c1ce GIT binary patch literal 42344 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 dKla<>2g literal 0 HcmV?d00001 diff --git a/debug/accuracy_tools/grad_tool/img/image.png b/debug/accuracy_tools/grad_tool/img/image.png new file mode 100644 index 0000000000000000000000000000000000000000..5a498f5d2a77d8808d36d5c12e52c87809137bd0 GIT binary patch literal 11977 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 Iq)EX403JAP(EtDd literal 0 HcmV?d00001 -- Gitee