66
77PaDiff 是基于 PaddlePaddle 与 PyTorch 的模型精度对齐工具。传入 Paddle 和 Torch 模型,对齐训练中间结果以及训练后的模型权重,并提示精度 diff 第一次出现的位置。
88
9+ 本工具支持通过以下方法进行对比(任选其一):
10+
11+ - 通过单行命令,自动完成 PaDiff 代码注入 --> 生成临时运行脚本 --> 自动运行 --> 监控运行过程并 dump 数据 --> 自动对比并返回结果。
12+ 这种方式不需要手动修改代码,只需要妥善设置配置文件。但使用此方法时需要将 ` paddlepaddle ` 和 ` torch ` 包安装在** 同一环境** 中,可能会出现版本冲突
13+
14+ - 手动修改 Paddle 和 PyTorch 脚本,并在** 分别** 运行(不需要同时)这两个脚本,根据脚本 PaDiff 会分别监控运行过程并 dump 数据,最后手动调用 API 接口对比数据,得到对齐结果。两次运行可以在** 两个环境** 中,但每个环境中都需要同时存在 ` paddlepaddle ` 和 ` torch ` 包
15+
16+ - 参考[ 旧版本特性(v0.2版本)] ( #旧版本特性(v0.2版本) ) 使用 auto_diff 接口进行对齐,这种方法需要将 Paddle 和 PyTorch 放在同一个文件中,同时将 ` paddlepaddle ` 和 ` torch ` 包安装在同一环境中,不仅两个模型的运行过程耦合,代码修改量也比较大,因此** 不推荐** 此用法
17+
918
1019## 安装
1120
12- 当前推荐通过源码安装,本工具需要安装 ` paddlepaddle ` 和 ` torch ` ,但这两个包的版本可能存在冲突。建议通过如下命令安装后 ,根据 [ paddlepaddle官网] ( https://www.paddlepaddle.org.cn/install/quick?docurl=/documentation/docs/zh/develop/install/pip/linux-pip.html ) 和 [ pytorch官网] ( https://pytorch.org/get-started/locally/ ) 自行安装 ` paddlepaddle ` 和 ` torch `
21+ 当前推荐通过源码安装,本工具依赖 ` paddlepaddle ` 和 ` torch ` ,但在同一个环境中安装这两个包时,可能存在依赖冲突。请通过如下命令安装本工具后 ,根据 [ paddlepaddle官网] ( https://www.paddlepaddle.org.cn/install/quick?docurl=/documentation/docs/zh/develop/install/pip/linux-pip.html ) 和 [ pytorch官网] ( https://pytorch.org/get-started/locally/ ) 自行安装 ` paddlepaddle ` 和 ` torch `
1322
1423``` sh
1524python -m pip install -e . -i https://pypi.tuna.tsinghua.edu.cn/simple
1625```
1726
1827## 快速开始
1928
20- ### 使用单行命令对齐(支持前反向对齐)
29+ ### 使用单行命令对齐
2130
2231将命令写入配置文件后,通过如下命令运行
2332
@@ -27,7 +36,40 @@ python -m padiff.cli --config padiff_config.yaml
2736
2837完整文件示例请参考 [ 配置文件说明文档] ( docs/CLIConfig.md ) ,同时,运行命令前,请运行 ` python -m padiff.cli -h ` 获取更详细的参数说明。
2938
30- ### log 设置
39+ ### 在不同环境中手动运行
40+
41+ ![ PaDiff 运行原理示意图] ( docs/imgs/flow.png )
42+
43+ 如上图所示,PaDiff 支持分别监控 Paddle 和 PyTorch 模型的运行流程,并自动捕获输出、参数梯度、权重等信息。手动修改脚本,仅需找到原代码中模型被调用的代码,使用 ` with PaDiffGuard(...) ` 包裹,然后分别运行两个项目中的模型训练/推理脚本即可。
44+
45+ ` PaDiffGuard ` 参数说明请参考 [ PaDiffGuard API] ( docs/api/PaDiffGuard.md )
46+
47+ 在两个项目运行结束后,会在两个项目生成 "your_project/padiff_dump/model_name" 的目录,该目录下会保存一些用于对比的数据文件。
48+
49+ 之后按照如下脚本,手动调用 ` compare_dumps(...) ` 进行比较。
50+
51+ ``` python
52+ # compare_dumps.py
53+ from padiff.utils import logger
54+ from padiff import compare_dumps
55+
56+ if __name__ == " __main__" :
57+ logger.reset_dir( " ./padiff_log" )
58+
59+ cfg = {
60+ " atol" : 1e-6 ,
61+ " rtol" : 1e-4 ,
62+ " compare_mode" : " abs_mean" ,
63+ " action_name" : " loose_equal" ,
64+ }
65+
66+ pt_dump_path = " torch_proj/padiff_dump/model_torch"
67+ pd_dump_path = " paddle_proj/padiff_dump/model_paddle"
68+ compare_dumps(pt_dump_path, pd_dump_path, cfg)
69+ ```
70+
71+
72+ ## log 设置
3173
3274#### 开启 debug 模式
3375
0 commit comments