-
Notifications
You must be signed in to change notification settings - Fork 5.6k
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
[Dy2St] PyTorch 和 Paddle 仓库模型导出成功率对比任务 #58985
Comments
一个小教程~AI Studio 开发环境申请由于本任务需要编写测试脚本,建议使用统一环境来进行开发,推荐使用 AI Studio 框架开发功能开发~ 可以参考飞桨线上开发环境——AI Studio 申请 AI Studio 开发环境~ AI Studio 环境创建注意,这里选择环境 创建完毕之后,启动即可。 仓库Clone:进入环境之后clone仓库:
这里的仓库是主要的脚本仓库,大家可以参看里面的样例进行编写,这里针对这个样例详细的讲解一下开发过程: 样例讲解:TiSASRec.pytorch/start_export.sh首先这个样例里面只有一个文件: 我们的主要目的是编写一个
最终的执行成功与否只需要在 上述的 PyTorch 仓库创建:首先对于 用户获取了初始地址之后,阅读项目的README,首先尝试复现仓库的训练流程,比如这里我们发现README中提到了复现流程是: 所以我们查看 main.py ,查看 model 的创建位置: 我们发现在这里进行了model的forward调用,同时传入了需要的数据。因为我们的目的是测试 torch.export.export 接口是否可以导出成功,所以我们使用成本最小的方式来实现,直接拷贝一份main.py,命名为export.py(名字随意,只要 start_export.sh 可以启动即可),然后进行如下的修改: 可以看到,就是在forward后面插入 torch.export.export 的调用。所以我们的export.py 就会测试export,如果导出成功,那么就输出标志性的日志,表示成功。【注意这里的日志一定要一致,不要有任何的diff,后续数据统计会通过这个来统计】。 这样我们将新的 export.py 连同原来的仓库文件,一起提交到 JitLab 组织下。就完成了Torch仓库的构建。 Paddle仓库创建:为了确保 Paddle 和 Torch 对比的权威性和公平性,我们希望 Torch 和 Paddle 的模型有同样的代码结构。为了获取到同样结构的两个模型。我们使用 PaConvert 工具将 Torch 仓库转化为 Paddle 仓库。 PaConvert 仓库地址如下:可以参考README来使用 https://github.com/PaddlePaddle/PaConvert 。这里使用下面的命令
然后我们可以看到输出: 发现有一些代码无法转写,大概率是Paddle中没有对应的Torch API,这类问题需要开发者手动解决,全局搜索 >>> 就可以知道哪些问题需要手动解决了: 比如 utils.py 中,这个 start() 不是 Torch的组网API,所以我们直接保留即可,后面的 zero_grad 通过查看Paddle的Adam的文档,可以知道对应的是 clear_grad ,所以我们换了即可。 最后我们就得到了 Paddle 的仓库:TiSASRec.pytorch.paddle。然后将加上 save 的调用即可: paddle 仓库的 export.py 如下所示: 其他的和 torch 的 export.py 类似,然后我们运行命令,可以查看是否可以正确测试 save,一切没有问题之后,就可以给PaddleJitLab提交上述的仓库了。 总结:到此,两个仓库的都构建完毕,而且 start_export.py 也写完了,这里总结一下完整的工作:
参考资料:
|
第一步的fork,怎么fork到组织仓库呀? |
以上面描述为准,先 fork 到个人账户,任务完成后统一迁移到组织账户,目前任务描述还有些地方没有修改~ |
怎么解决不同仓库环境不一致的问题呀,有的年久失修pytorch版本会跑不起来 |
跑不起来的模型可以反馈下即可~ |
认领 |
认领 |
|
无法导出的也要如实的记录,这些模型我们也没测过,所以并不能保证 Paddle 能成功导出,没有其他问题的话可以直接提交的 |
认领1 3 |
认领 2 FastSAM |
认领 65 |
认领13,33 |
认领 51 |
认领33 |
认领16 |
认领 23,19,27,69 |
认领15,23 |
认领26 |
59 dlrm 需要用到 |
好的,麻烦再列表后面标记一下吧。也算是一个摸底了。 |
认领52 |
6 |
8 pytorch-segmentation 依赖 timm 依赖比较复杂,模型不好导出。 |
认领63 |
认领50AdaptSegNet |
背景
PyTorch 最近在 2.1.0 版本发布了
torch.export
功能,提供了以 PyTorch 2.x 的 dynamo 为核心的模型导出方法。其功能上与我们 Paddle 动转静模型导出paddle.jit.save
相类似,因此我们想要建设一个 repo 能够自动对比torch.export
和paddle.jit.save
的导出成功与否,PaddleJitLab/jit-exportable-models 就诞生了~为了确保对比的公平性,需要两个模型使用相同/等价的组网 API,因此我们选取了一些 PaConvert 能够以较高成功率转换经典的 PyTorch 模型作为测试集合,通过 PaConvert 即可将 PyTorch 模型转换为等价的 Paddle 模型。
之后我们分别对转换前后的模型分别调用
torch.export.export
和paddle.jit.save
就可以了解两者模型导出是否成功啦~任务详情
我们在下面的 #58985 (comment) 提供了详细的操作流程,你可以跟随下面的步骤来完成任务。
最终任务需要提交如下几部分内容:
torch.export.export
代码的 PyTorch 模型 repo 1paddle.jit.save
代码的 Paddle 模型 repo 2任务完成且通过后会邀请进入 PaddleJitLab 组织,并迁移 repo 1 和 repo 2 进组织~
参考资料
任务列表 (整体进展:12/80)
已完成部分
EmbeddingBag
暂不支持
其他模型
The text was updated successfully, but these errors were encountered: