-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
【Hackathon 7th】Netron 原生支持 Paddle PIR 可视化 #1
Comments
@luotao1 帮忙拉一下各位大佬吧 ~ 🙏🙏🙏 |
关于现有case的截图,我的一些观点:
|
关于子图的显示方案:
实现原理请 @changeyoung98 志扬介绍一下? |
我觉得可以把咱们Tensor的所有meta信息集中放在t_dtensor中展示。我回答的与你提问的是一个事情吧? |
|
6.可以再贴一些需要验证的 json 模型 ~ 这个PR下的单测,辛苦顺师傅自己来操作一下,保存成模型文件,验证一下。同时,单测是可以在VisualDL中展示的。可以将两面的截图发出来,咱们看看。 同时,原来提供的5个模型文件,也可以用VisualDL展示。这样可以两面对比,取优点。 |
https://github.com/PaddlePaddle/community/blob/538bdc4ae021f4536c4abb6a485b3bdd77279c9c/pfcc/paddle-code-reading/IR_Dialect/pir_save_load.md#L4 这里是PIR save/load的说明文档,一些缩略符对照以及json解析在文档中有说明。 |
这里实现的核心在于绘制子图时保留下子图与父block的关系。可以参考visualdl适配同学的PR和设计文档:PaddlePaddle/VisualDL#1279 |
原因是:while中的regions里面没有使用while的input、output,所以没有体现。可以搜一下在netron附上的那个for_net.json文件 ~ 如果手动给子图里面加上主图中的输入,netron会把他写在sidebar的信息中,如: 这里的输入
因为json中就是 -1 。请核对json文件 ~
同上 ~
同上 ~
同上 ~
👍️
json中没有的信息,这里没办法处理 ... ..... |
同样的,json中没有的信息,没办法处理 ... ... 请确认json中是否有这些信息?哪些字段表示这些信息? 另外,图中 |
嗯嗯,一直参考的这个文档 ~ 其实呢,有些猜一下也是能猜出来,不过,最好能给出一个 目前能想到需要映射的:
|
今天翻了一下 netron 和 visualdl 的代码,基本定位到了
可以参考 lutzroeder#1118 其中提到的 dagre cluster 可以参考 https://dagrejs.github.io/project/dagre-d3/latest/demo/clusters.html netron 在 4c28783 这个 commit 已经把 visualdl 中的 netron 好像是 另外,子图这个东西,不只是 if 等逻辑中有,有些框架的 function 也可以嵌套,visualdl 主要关注 paddle 就可以,而 netron 兼容的框架就多了 ... ... 目前,其他框架的子图在 netron 中都是以单独窗口的方式展示,比如 有的框架中,function 也可以进入子图,如 而 visualdl 进入子图的入口,即右上角这个地方,有可能,就是复用 netron 之前在这里设置的入口 ~ 综上, 这里叠个甲:最终的解释权,归 netron 作者所有 ~~~ 🤣🤣🤣 (毕竟我接触 netron 代码也就不到一周的时间,不可能把他的整个历史扒出来 🫣🫣🫣 |
VisualDL 今天安装了一天,装不了 lerna ERR! yarn run build exited 1 in '@visualdl/netron2'
lerna WARN complete Waiting for 3 child processes to exit. CTRL-C to exit immediately.
Traceback (most recent call last):
File "setup.py", line 66, in <module>
setup(
File "/home/shun/venv38dev/lib/python3.8/site-packages/setuptools/__init__.py", line 117, in setup
return distutils.core.setup(**attrs)
File "/home/shun/venv38dev/lib/python3.8/site-packages/setuptools/_distutils/core.py", line 183, in setup
return run_commands(dist)
File "/home/shun/venv38dev/lib/python3.8/site-packages/setuptools/_distutils/core.py", line 199, in run_commands
dist.run_commands()
File "/home/shun/venv38dev/lib/python3.8/site-packages/setuptools/_distutils/dist.py", line 954, in run_commands
self.run_command(cmd)
File "/home/shun/venv38dev/lib/python3.8/site-packages/setuptools/dist.py", line 999, in run_command
super().run_command(command)
File "/home/shun/venv38dev/lib/python3.8/site-packages/setuptools/_distutils/dist.py", line 973, in run_command
cmd_obj.run()
File "/home/shun/venv38dev/lib/python3.8/site-packages/setuptools/command/bdist_wheel.py", line 410, in run
self.run_command("build")
File "/home/shun/venv38dev/lib/python3.8/site-packages/setuptools/_distutils/cmd.py", line 316, in run_command
self.distribution.run_command(command)
File "/home/shun/venv38dev/lib/python3.8/site-packages/setuptools/dist.py", line 999, in run_command
super().run_command(command)
File "/home/shun/venv38dev/lib/python3.8/site-packages/setuptools/_distutils/dist.py", line 973, in run_command
cmd_obj.run()
File "/home/shun/venv38dev/lib/python3.8/site-packages/setuptools/_distutils/command/build.py", line 135, in run
self.run_command(cmd_name)
File "/home/shun/venv38dev/lib/python3.8/site-packages/setuptools/_distutils/cmd.py", line 316, in run_command
self.distribution.run_command(command)
File "/home/shun/venv38dev/lib/python3.8/site-packages/setuptools/dist.py", line 999, in run_command
super().run_command(command)
File "/home/shun/venv38dev/lib/python3.8/site-packages/setuptools/_distutils/dist.py", line 973, in run_command
cmd_obj.run()
File "setup.py", line 58, in run
subprocess.check_call(cmd, env=env)
File "/usr/lib/python3.8/subprocess.py", line 364, in check_call
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['bash', 'scripts/build.sh']' returned non-zero exit status 1.
AIStudio 中也装不了 ~ 因此,无法验证比对~ |
Update 20241114总结一下今天的问题:
感谢各位 ~~~ 🫡🫡🫡 |
op name除parameterOp做了特殊压缩外,其余均只压缩了dialect_name,即:
其余一些压缩符号的定义都在schema.h中,另外参数名称在parameterOp(id为"p"的op)的Attribute("A")中有体现,attribute列表中第四个位置为参数名。 p.s. 序列化和反序列化的代码在 |
源码编译安装可以试一下python3.9以上的版本,或者直接用 |
ParameterOp和DataOp创建的value都是有name的,在属性中都有存储,这类“输入信息”建议标识name+shape,其余在网络中的value没有name,只需标识shape即可。目前json中每个op存储的输入输出value是用数值进行标识的,其中输入”I“只有数值标识,只是为了对应value的来源,而输出”O“ 有tensor的属性信息。 |
举个例子哈: {
"#": "p",
"A": [0, 1, 1, "linear_0.b_0"],
"DA": [],
"O": {
"%": 1,
"TT": {
"#": "0.t_dtensor",
"D": [{
"#": "0.t_f32"
},
[20], "NCHW", [], 0
]
}
},
"OA": [1, 0, 1],
"QA": []
} 这里的:
其他的 如何? 另外, |
|
|
闹乌龙了 ~ 原来 netron 在界面上可以选择显示 name 还是 shape ~~~ 我把实现方式改回去吧,改成 netron 原来的这种方式 |
本 ISSUE 用于跟踪 Netron 原生支持 Paddle PIR 可视化的相关问题 ~
关联:https://github.com/PaddlePaddle/community/blob/master/hackathon/hackathon_7th/%E3%80%90Hackathon%207th%E3%80%91FundableProject%E4%BB%BB%E5%8A%A1%E5%90%88%E9%9B%86.md#%E5%85%ABnetron-%E5%8E%9F%E7%94%9F%E6%94%AF%E6%8C%81-paddle-pir-%E5%8F%AF%E8%A7%86%E5%8C%96
Update 20241113
已测试如下模型:
for_net.json
图中的
while
子图block_1
if_net.json
图中的
if
子图block_1
if
子图block_2
model.json
model_pylayer.json
图中的
pylayer
子图while_net.json
图中的
while
子图另外,tensor 边的映射如下
目前需要确认的问题:
netron 显示子图的方案如上图所示,是单独开一个窗口。VisualDL 如何显示的,可以在评论区贴一下 ~
至少需要覆盖以下几种情况:
不过,具体采用哪种方案,得说服 netron 作者 ... ...
目前,save 时会压缩,有一些 op 会用简写,如
p
,相应的属性也没有名字,这里暂时以idx
作为 name。可以提供一下需要映射的字段做适配 ~
OA
DA
,这里没有做适配。t_dtensor
这一种情况,与 netron 中其他框架保持一致。blocks
的形式,所以,目前的解决方法是只显示region 中第一个block
。请各位大佬看看还有啥遗漏或者建议?
p.s. netron 的 repo 好像只有一个 PR 被合入,这个做为潜在风险吧 ... ...
@luotao1
The text was updated successfully, but these errors were encountered: