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

点击上方“计算机视觉工坊”,选择“星标”

干货第一时间送达

9e8edfabb77b4eaf1af068e18ef2d606.png

作者丨BBuf233

来源丨GiantPandaCV

编辑丨极市平台

导读

 

本文作者通过以第一视角展示了自己在2021年为Pytorch发现了的BUG,以及提了相关PR以及ISSUE,给想为开源社区做贡献的小伙伴们提供一些思路~

作为深度学习框架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社区开源贡献?_第1张图片 为PyTorch指出它们的反卷积在CPU上实现有误

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

如何参与PyTorch社区开源贡献?_第2张图片 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社区开源贡献?_第3张图片 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。

本文仅做学术分享,如有侵权,请联系删文。

重磅!计算机视觉工坊-学习交流群已成立

扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。

同时也可申请加入我们的细分方向交流群,目前主要有ORB-SLAM系列源码学习、3D视觉CV&深度学习SLAM三维重建点云后处理自动驾驶、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、深度估计、学术交流、求职交流等微信群,请扫描下面微信号加群,备注:”研究方向+学校/公司+昵称“,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进去相关微信群。原创投稿也请联系。

如何参与PyTorch社区开源贡献?_第4张图片

▲长按加微信群或投稿

如何参与PyTorch社区开源贡献?_第5张图片

▲长按关注公众号

3D视觉从入门到精通知识星球:针对3D视觉领域的视频课程(三维重建系列三维点云系列结构光系列手眼标定相机标定、激光/视觉SLAM、自动驾驶等)、知识点汇总、入门进阶学习路线、最新paper分享、疑问解答五个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近4000星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看介绍,3天内无条件退款

如何参与PyTorch社区开源贡献?_第6张图片

 圈里有高质量教程资料、可答疑解惑、助你高效解决问题

觉得有用,麻烦给个赞和在看

你可能感兴趣的:(算法,人工智能,java,编程语言,python)