You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

README.md 5.7 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. # MegEngine Tools
  2. MegEngine 相关的工具汇总。使用方法如下(可将 `xxx` 替换成任一脚本文件,如 `network_visualize`):
  3. ```bash
  4. python -m megengine.tools.xxx
  5. ```
  6. 工具列表:
  7. ### accuracy_shake_var_tree
  8. 将精度抖动分析结果构造成树结构,方便锁定引起抖动的根节点,以及查找依赖关系。
  9. 输入: compare_binary_iodump 的输出存入到的一个文件
  10. 输出: 第一个出现结果不一致的输出结点
  11. 执行命令: accuracy_shake_var_tree 中定义了一些函数组件,可按需集成到实际代码中。下面有一个测试代码:
  12. ```python
  13. import megengine.tools.accuracy_shake_var_tree as st
  14. r = st.parse('diff.txt')
  15. for key, value in r.items():
  16. n = st.varNode.get_varNode(key)
  17. n.show_src_info()
  18. print("reference nodes:")
  19. for i in n.get_reference_list():
  20. print(i.id)
  21. ```
  22. ### benchmark_op
  23. 逐个运行 functional op(并不是所有的 functional op),对比 MegEngine 与 PyTorch 的性能,通过量化结果来指导如何进行下一步的优化。
  24. 输入: 无
  25. 输出: 打印一个列表,对比在小输入和大输入的情况下 MegEngine 和 Pytorch 执行一些 functional op 的速度对比
  26. 执行命令: `python3 -m megengine.tools.benchmark_op`
  27. ### compare_binary_iodump
  28. 分析同一模型在不同平台下给定相同输入之后的输出是否完全一致。
  29. 输入: 两个目录(假设分别为 expect/ 和 actual/),分别存有不同平台下运行的 tensor 结果
  30. 输出: 打印所有的输出 tensor 信息,如果某个 tensor 在两个平台上的值不一致,那么会打印出第一个不一致的值
  31. 执行命令: `python3 -m megengine.tools.compare_binary_iodump expect/ actual/`
  32. ### cpu_evaluation_tools
  33. 分析多个模型在目标芯片上的运行性能
  34. 输入:MegEngine 模型文件
  35. 输出:根据不同模型的加权,输出芯片性能分数
  36. 执行命令:python3 ./cpu_evaluation_tools.py --load_and_run_file ./load_and_run --models_dir ./cpu_models/
  37. ### draw_graph
  38. 用来查看静态图的 op 序列,有助于理解 MegEngine 的静态图在动态图的基础上做了哪些优化。
  39. 输入: `megengine.core.tensor.megbrain_graph.Graph._to_json` 得出的静态图描述文件,为 json 格式
  40. 输出: 一个 dot 文件,可通过 dot 命令绘制出图片
  41. 执行命令:
  42. ```bash
  43. python3 -m megengine.tools.draw_graph -i dump.json -o dump.dot
  44. dot -Tpng dump.dot -o dump.png
  45. ```
  46. ### dump_with_testcase_mge
  47. 将待测数据提前注入模型文件,并在本地运行得到期望结果,可与实际运行的结果进行比对以检查是否出错。
  48. 输入: 一个 MegEngine 模型文件,可选一些 npy 文件作为模型输入(也可以随机生成输入,如下面的命令示例)
  49. 输出: 一个带输入的 MegEngine 模型文件
  50. 执行命令: `python3 -m megengine.tools.dump_with_testcase_mge model.mge -d "#rand(0,255,14,2)"`
  51. ### graph_info_analyze
  52. 将图和内存信息的 json 文件的文件夹 logs 转换为 TensorBoard 的输入文件夹 logs_p。以便 TensorBoard 对图结构以及内存信息进行可视化。
  53. 输入: 图和内存信息的 json 文件的文件夹
  54. 输出: TensorBoard 的输入文件夹
  55. 执行命令: `python3 -m megengine.tools.graph_info_analyze -i logs -o logs_p`
  56. ### load_network_and_run
  57. python 版本的 load_and_run。
  58. 输入: MegEngine 的模型文件,可选一些 npy 文件作为模型输入
  59. 输出: 模型执行并打印一些测速信息
  60. 执行命令: `python3 -m megengine.tools.load_network_and_run model.mge --iter 10`
  61. ### network_visualize
  62. 1. 分析给定的 MegEngine 模型中参数量信息,包括 shape、dtype、mean、std 以及 size 占比等。
  63. 2. 分析给定的 MegEngine 模型中算子 FLOPs 计算量以及占比,还有算子的 inputs/outputs shape、感受野、stride 等。
  64. 输入: MegEngine 的模型文件
  65. 输出: 模型中的参数量信息或计算量信息
  66. 执行命令:
  67. ```bash
  68. # 分析参数量
  69. python3 -m megengine.tools.network_visualize model.mge --cal_params --logging_to_stdout
  70. # 分析计算量
  71. python3 -m megengine.tools.network_visualize model.mge --cal_flops --logging_to_stdout
  72. ```
  73. ### profile_analyze
  74. 对于 load_and_run --profile 运行模型生成的 profile.json 文件或者 trace 模式下开启 profiling 功能并通过 trace.get_profile() 得到的 json 文件进行分析,得到静态图中算子的时间和显存占比等信息,以表格形式呈现。
  75. 输入: load_and_run 生成的 profile 文件
  76. 输出: 一个按照参数在输入文件中筛选得出的数据表格
  77. 执行命令:
  78. ```bash
  79. # 生成供分析的 json 文件
  80. python3 -m megengine.tools.load_network_and_run model.mge --warm-up --iter 10 --profile profile.json
  81. #分析耗时前 3 的单个算子
  82. python3 -m megengine.tools.profile_analyze profile.json -t 3
  83. #筛选用时超过 10us 的 conv 按 flops 排序
  84. python3 -m megengine.tools.profile_analyze profile.json -t 3 --order-by +flops --min-time 1e-5 --type ConvolutionForward
  85. ```
  86. ### profiler
  87. 对给定的训练程序,记录训练过程并以通用格式存储,可在浏览器上可视化。
  88. 输入: 需要一个 MegEngine 的训练程序(称之为 train.py,其中包含一个典型的 MegEngine 训练过程)
  89. 输出: 一些记录 profile 过程的 json 文件,默认在 profile 子目录下,可用 https://ui.perfetto.dev/ 进行加载并且可视化
  90. 执行命令: `python3 -m megengine.tools.profiler train.py`
  91. ### svg_viewer
  92. 查看 MegEngine 生成的显存占用图,可以帮助用户了解显存使用情况.
  93. 输入: 显存占用的 svg 图片
  94. 输出: 网页展示的可视化
  95. 执行命令: `python3 -m megengine.tools.svg_viewer`