如何参与PyTorch社区开源贡献?

2021 年 11 月 30 日 极市平台
↑ 点击 蓝字  关注极市平台

作者丨BBuf233
来源丨GiantPandaCV
编辑丨极市平台

极市导读

 

本文作者通过以第一视角展示了自己在2021年为Pytorch发现了的BUG,以及提了相关PR以及ISSUE,给想为开源社区做贡献的小伙伴们提供一些思路~ >>加入极市CV技术交流群,走在计算机视觉的最前沿

作为深度学习框架OneFlow的一个全职开发者(声明我是菜鸡),基本上每天都会和PyTorch打交道,所以自问自答一下这个问题,希望对想为开源项目做贡献的小伙伴们提供一些思路也希望这个问题能获得更多回复。

OneFlow最近一年切到动态图模式之后就非常注重和PyTorch在API上进行对齐,以提升动态图模式的易用性,也即我们的:import oneflow as torch 特性。为了实现这个目标,我们在写Op的时候除了肉眼对Python API进行对齐之外还要写PyTorch的测试样例。

动态图Op开发前期非常痛苦,因为测试样例的代码比较多这对开发者和Reviewer来说都很痛苦。后来@daquexian 写了一个自动测试框架可以非常方便的测试OneFlow Op的API接口以及计算结果是否和PyTorch的接口完全对齐。

这个自动测试框架只有两个Python脚本,对原始的PyTorch进行了一个封装(我把它叫做High Level PyTorch),我们做测试的时候用这个High Level的PyTorch进行测试。测试框架可以像写dsl一样随意指定输入Tensor以及Paramter的形状和取值范围等,然后运行时会自动获取程序中的输入Tensor,中间Tensor,以及输出Tensor和它们对应的梯度Tensor,甚至是nn.Module的Parameter,只有OneFlow和PyTorch的所有参数和中间Tensor全部一样时才可以通过测试。这里有个issue一看便知 :https://github.com/Oneflow-Inc/oneflow/issues/5549  。

后面我基于这个框架下进行了一些改进,比如自动codegen出错的代码,可以打印出错的程序方便OneFlow的开发者进行Debug以及跑CI的过程中直接暴漏出错程序。后面我会考虑写一篇文章介绍我们的自动测试框架,欢迎大家关注,它的可移植性非常强,非常方便的可以改到任何深度学习框架。

其实不读上面那段话也完全没有关系,我想表达的是我为PyTorch做的贡献主要是我在开发OneFlow的算子过程中基于OneFlow的自动测试框架发现和完成的。

说回给PyTorch做贡献,我个人的观点是,无论是提PR还是提issue实际上都是对开源社区做了贡献。如果只是想做一些微小的贡献(比如我,因为自己还有工作),那么BUG修复和一些Feature的Small Fix比较适合提PR,而一些侵入软件系统比较深的问题如果我们解决需要花很长时间或者目前能力还不够,这个时候就可以提交issue给PyTorch团队。下面我将以我的第一视角,来展示一下2021年我为Pytorch发现了哪些BUG,以及我提了什么PR以及ISSUE。

1. PyTorch CPU反卷积实现有BUG

在实现OneFlow的cpu group conv的时候,通过我们的自动测试框架测试发现一直有一些特殊的样例OneFlow和Pytorch无法对齐,最后Debug良久发现就是nn.ConvTranspose1D里面的weight的梯度无法对齐。然后在错误样例的一步步指引下,最终定位到一组PyTorch在CPU和GPU上输出结果不一致的问题。

赶紧整理出了复现代码给PyTorch提了issue:https://github.com/pytorch/pytorch/issues/68868 。

为PyTorch指出它们的反卷积在CPU上实现有误

并且很快获得了PyTorch团队的回复,他们确认是MKLDNN那部分实现出了问题,并表达了感谢以及他们正在修复这个问题。

PyTorch官方做问题确认

2. 我给PyTorch的第一个PR

我在OneFlow开发Upsample这个nn.Module的时候发现PyTorch的上采样系数在在非整数的情况下会出错,源于PyTorch的代码实现错误,和OpenCV并没有对齐。我将这个bug报告在了https://github.com/pytorch/pytorch/issues/65200 中。

然后我开始修复这个问题,并快速的提交了一个PR给PyTorch官方Review:https://github.com/pytorch/pytorch/pull/61166 。在 jbschlosser 给出代码方面的review意见之后,我修了他提的意见并且给PyTorch添加了触发这种BUG的测试样例就开始了跑PyTorch的CI的流程。但跑完之后PR还是迟迟没有合并,后来我就每周在PR下面催促他们approve以及合并,直到一个多月后这个PR终于合并进去了QAQ,PyTorch的第一次合并的流程感觉还是很慢的。(至少对我来说。

PyTorch的第一个PR

3. 发现了几个文档错误相关的PR以及FX模块的一些错误

后面浏览PyTorch相关文档时发现了一些文档错误以及FX的一些错误,又顺手提了2个PR并合并进去了。https://github.com/pytorch/pytorch/pull/64802 & https://github.com/pytorch/pytorch/pull/68043 。当然文档级的失误很少,如果你恰好发现了就尝试体提交一下吧,就可以成为contributor了。不过,文档也是深度学习框架的一个重要组成部分。

4. 又发现了一些BUG&疑惑

同样还是在开发OneFlow算子的时候,通过OneFlow自动测试框架,发现PyTorch SoftPlus的梯度有一些问题。然后整理复现代码提交issue之后发现这个问题已经在PyTorch最近一次版本更新后解决掉了。

https://github.com/pytorch/pytorch/issues/61568

然后还有一件疑惑的事情,我在给OneFlow实现CPU反卷积Kernel的时候通过自动测试框架发现在一些非法的数据(反卷积的核的大小比输入长度还大的时候)上PyTorch仍然正常输出了答案,而在OneFlow和PaddlePaddle上均有对应的错误检查并抛出异常。我将其反馈给了PyTorch,但一直没有得到回复。https://github.com/pytorch/pytorch/issues/66542

好了,以上就是今年我加入OneFlow做开发的过程中顺带发现的PyTorch问题以及做的贡献了。当我们觉得某些情况PyTorch有BUG的时候,要大胆质疑并用其它的框架去验证。 再次回到题目,如何参与PyTorch社区开源贡献呢?我们要勇于用issue提出bug,用pr解决bug。至于如何提pr的教程,Google会很详细的告诉你。

成为很火的开源框架的Contributor是一件不错的事情,特别是对于学生或者初入职场的工程师来说,简历上可能是一个加分项。

欢迎大家为PyTorch(https://github.com/pytorch/pytorch)

以及国内的深度学习框架比如:

OneFlow(https://github.com/Oneflow-Inc/oneflow

Paddle(https://github.com/PaddlePaddle/Paddle

Mindspore(https://github.com/mindspore-ai/mindspore

MegEngine(https://github.com/MegEngine/MegEngine

等做出贡献,成为Contributor。

如果觉得有用,就请分享到朋友圈吧!

△点击卡片关注极市平台,获取 最新CV干货

公众号后台回复“transformer”获取最新Transformer综述论文下载~


极市干货
课程/比赛: 珠港澳人工智能算法大赛 保姆级零基础人工智能教程
算法trick 目标检测比赛中的tricks集锦 从39个kaggle竞赛中总结出来的图像分割的Tips和Tricks
技术综述: 一文弄懂各种loss function 工业图像异常检测最新研究总结(2019-2020)


CV技术社群邀请函 #

△长按添加极市小助手
添加极市小助手微信(ID : cvmart4)

备注:姓名-学校/公司-研究方向-城市(如:小极-北大-目标检测-深圳)


即可申请加入极市目标检测/图像分割/工业检测/人脸/医学影像/3D/SLAM/自动驾驶/超分辨率/姿态估计/ReID/GAN/图像增强/OCR/视频理解等技术交流群


每月大咖直播分享、真实项目需求对接、求职内推、算法竞赛、干货资讯汇总、与 10000+来自港科大、北大、清华、中科院、CMU、腾讯、百度等名校名企视觉开发者互动交流~



觉得有用麻烦给个在看啦~   
登录查看更多
0

相关内容

如何用latext画神经网络?这个PlotNeuralNet能帮到你
专知会员服务
25+阅读 · 2022年1月15日
专知会员服务
91+阅读 · 2020年12月26日
专知会员服务
145+阅读 · 2020年6月15日
【资源】100+本免费数据科学书
专知会员服务
107+阅读 · 2020年3月17日
【书籍推荐】简洁的Python编程(Clean Python),附274页pdf
专知会员服务
179+阅读 · 2020年1月1日
《动手学深度学习》(Dive into Deep Learning)PyTorch实现
专知会员服务
119+阅读 · 2019年12月31日
【书籍】深度学习框架:PyTorch入门与实践(附代码)
专知会员服务
163+阅读 · 2019年10月28日
一文读懂 PyTorch 显存管理机制
极市平台
2+阅读 · 2022年4月3日
实践教程 | 轻松入门模型转换和可视化
极市平台
0+阅读 · 2022年3月5日
实践教程 | 浅谈 PyTorch 中的 tensor 及使用
极市平台
1+阅读 · 2021年12月14日
详解PyTorch编译并调用自定义CUDA算子的三种方式
极市平台
0+阅读 · 2021年11月6日
AI 框架部署方案之模型转换
极市平台
2+阅读 · 2021年11月2日
社区分享 | 在 Windows 下编译和使用 TensorFlow Lite
手把手教 | 深度学习库PyTorch(附代码)
数据派THU
27+阅读 · 2018年3月15日
tensorflow项目学习路径
北京思腾合力科技有限公司
10+阅读 · 2017年11月23日
教程 | 如何从TensorFlow转入PyTorch
深度学习世界
38+阅读 · 2017年9月30日
国家自然科学基金
0+阅读 · 2015年12月31日
国家自然科学基金
26+阅读 · 2014年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
3+阅读 · 2012年12月31日
国家自然科学基金
1+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
1+阅读 · 2011年12月31日
国家自然科学基金
0+阅读 · 2011年12月31日
国家自然科学基金
0+阅读 · 2009年12月31日
Arxiv
23+阅读 · 2021年3月4日
Arxiv
24+阅读 · 2021年1月25日
Arxiv
16+阅读 · 2018年2月7日
VIP会员
相关VIP内容
如何用latext画神经网络?这个PlotNeuralNet能帮到你
专知会员服务
25+阅读 · 2022年1月15日
专知会员服务
91+阅读 · 2020年12月26日
专知会员服务
145+阅读 · 2020年6月15日
【资源】100+本免费数据科学书
专知会员服务
107+阅读 · 2020年3月17日
【书籍推荐】简洁的Python编程(Clean Python),附274页pdf
专知会员服务
179+阅读 · 2020年1月1日
《动手学深度学习》(Dive into Deep Learning)PyTorch实现
专知会员服务
119+阅读 · 2019年12月31日
【书籍】深度学习框架:PyTorch入门与实践(附代码)
专知会员服务
163+阅读 · 2019年10月28日
相关资讯
一文读懂 PyTorch 显存管理机制
极市平台
2+阅读 · 2022年4月3日
实践教程 | 轻松入门模型转换和可视化
极市平台
0+阅读 · 2022年3月5日
实践教程 | 浅谈 PyTorch 中的 tensor 及使用
极市平台
1+阅读 · 2021年12月14日
详解PyTorch编译并调用自定义CUDA算子的三种方式
极市平台
0+阅读 · 2021年11月6日
AI 框架部署方案之模型转换
极市平台
2+阅读 · 2021年11月2日
社区分享 | 在 Windows 下编译和使用 TensorFlow Lite
手把手教 | 深度学习库PyTorch(附代码)
数据派THU
27+阅读 · 2018年3月15日
tensorflow项目学习路径
北京思腾合力科技有限公司
10+阅读 · 2017年11月23日
教程 | 如何从TensorFlow转入PyTorch
深度学习世界
38+阅读 · 2017年9月30日
相关基金
国家自然科学基金
0+阅读 · 2015年12月31日
国家自然科学基金
26+阅读 · 2014年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
3+阅读 · 2012年12月31日
国家自然科学基金
1+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
1+阅读 · 2011年12月31日
国家自然科学基金
0+阅读 · 2011年12月31日
国家自然科学基金
0+阅读 · 2009年12月31日
Top
微信扫码咨询专知VIP会员