Mobvista,big data, engineer
2020-10-23

将跨界玩到飞起的程序员:改个bug也能惊动Facebook

最近,咱们M星程序员小哥熊怀东,在使用Facebook推出的开源项目PyTorch 1.7的过程中,“顺手”修复了一个bug,还被PyTorch官方收录。

Avatar

最近,咱们M星程序员小哥熊怀东,在使用Facebook推出的开源项目 PyTorch 1.7 的过程中,“顺手”修复了一个 bug,还被 PyTorch 官方收录

讲述这段经历的同时,熊怀东也分享了自己的成长故事。他一直相信“一个人认知的边界,就是他世界的边界”,所以,成长之路上他总会跨出“边界线”,探索和拥抱人生中更多的可能性。

Mobvista,Logo

给 PyTorch 1.7 修复 bug

享受钻研的过程

 熊怀东在 Mobvista 担任资深算法工程师,被M星人亲切地称为“小熊”。

说起这一次经历,小熊谦虚地表示,这只是一件很平常的事,比起结果,自己更享受的是钻研问题、解决问题的过程。

事情源于小熊所在的机器学习团队,最近在开发 MindAlpha 2.0 机器学习平台时,使用了尚未正式发布的 PyTorch 1.7 进行测试。就在测试过程中,bug 出现了——团队发现,在修复了一些不兼容的代码后,离线训练和预测均可正常进行,但将模型部署到在线预测服务后,在一个 minibatch 的 forward 执行完成后,libtorch 总是报 Expected Tensor but got None 的断言失败。

code, mobvista, PyTorch 1.7

当时,距离10月下旬 PyTorch 1.7 正式发布还有不到一个月。如果在正式发布前这个 bug 没有被解决,影响到的将不仅仅是团队的开发进程,还会影响到使用该项目的更多开发者。于是,团队 leader 朱亚东委派小熊,紧急修复这个 bug。

小熊先是展开了在线调试,以排除人为误操作因素。尝试修改了 .py 文件,行不通;用 unzip 解开 .ptm 文件,修改 TorchScript 源代码,然后重新打包进行预测,问题依旧;退回至 PyTorch 1.6,改用不使用 torch.no_grad 的算法测试,还是没有解决问题……

尝试了多种方法均告失败之后,小熊意识到必须提高调试的效率。为了使调试更容易,小熊采用了编写 nps_offline_check.cpp 用 OnlineSparseModel 加载 .ptm 直接调用 TorchScript 里面的 forward 方法,可以重现 Expected Tensor but got None 的断言失败,这使得用 GDB 调试成为可能。不过,这依然没能解决问题。

放弃是不可能放弃的。接下来,小熊和同事们一起埋头钻研,继续提出多种猜测。朱亚东鼓励大家:“只要肯往下扎,没有解决不了的 bug。”尽管后来这些猜测一一被否定和排除,但排除掉错误答案的过程,也是一步步接近正确答案的过程。

终于,在第三天,小熊成功定位到了 bug 根源,并通过删除一行代码,成功修复了 bug。

code, bug, Mobvista

9月30日,团队给 PyTorch 官方提交了一个 issue
https://github.com/pytorch/pytorch/issues/45558,并提交了相应的 pull request
https://github.com/pytorch/pytorch/pull/45559,该 pull request 于10月12日合并到了 release/1.7分支。

这也意味着,Mobvista 机器学习团队以及全球其它开发者,今后再也不会被这个 bug 困扰了Mobvista,Logo

不爱跨界的文艺青年不是好程序员

 你一定想不到,杀起 bug 来毫不手软的小熊,其实是“半路出家”。

小熊本科毕业于北航,研究生毕业于北大,都是数学系。这位顶级学霸之所以在毕业后上工程师之路,完全是源于一本书。

从小,小熊就爱看书、看电影。文学名著、小说、科幻电影,都是他的心头好。

“我初二的时候,去书店买文学名著时,碰巧看到了一本 Visual Basic 的书,就买回家自学编程。”小熊回忆说,“从那开始就入了编程的坑,再也爬不出来了。”后来他又陆续学习了 VBScript、HTML 和 JScript 等,从此便一发不可收拾。

进入北航数学专业后,除了课堂上教授的C语言和《数据结构与算法》,小熊又在课外自学了 C++、Python 等业界更流行的编程语言。这让他之后从数学专业跨界到IT行业,成为水到渠成的事情。

如今,31岁的小熊已经是一名资深的算法工程师,同时也依然是一枚泡在书和电影里的文艺青年。今年疫情期间宅家时间变多,小熊还利用一款智能钢琴 App 自学了电子钢琴。

在小熊看来,阅读、自学编程和学习一门乐器,本质上是同一件事情,就是“走出界外、探索未知”。

“呆在舒适区,在熟悉的领域做擅长的事情,你会很舒服、很有安全感。但时间久了,你就困在了这一亩三分地里。当有一天你发现自己的世界太狭隘的时候,已经很难再走出去了。”

Mobvista,Logo

别做“地主”

做广阔天地中的“游牧民族”

知名媒体人王烁说过一段话:“过去的学者是知识的农耕民族,自己有一亩三分地精耕细作就可以了。但是这个时代变了,逼得我们必须成为知识的游牧民族,哪里水草丰美,就向哪里迁移。”

小熊很喜欢“游牧民族”这个比喻。在他看来,无论任何职业任何岗位,一个优秀的当代职场人永远不会允许自己呆在一亩三分地里,而是不断学习新的知识,尝试新的办法,让自己一直保持在“走出去”的状态。当今社会所强调的创造力,就是跨越边界的能力。

小熊说,这种“跨越边界、拥抱广阔世界”的游牧民族精神,其实也正是咱们  Mobvista 倡导的探索精神

explorer, Mobvista

Mobvista 的成长,就是一个技术驱动、不断探索、拓宽边界的过程。我们通过在技术、产品和服务上的持续探索,为移动开发者提供越来越完善的“工具生态”,支持他们打破边界,探索全球化增长和变现的更多可能性。

每一位M星人都是探索者,我们结伴而行,互相照亮就像 John Lennon 说的,“A dream you dream alone is only a dream. A dream you dream together is reality.” 是因为我们一起,才让梦想变成现实。

dream, John Lennon, Mobvista

————————————

写在最后:

马上就到程序员节,这里还是要专门对程序员小伙伴说几句:

每个程序员都是极具探索精神和创造力的大艺术家,用一行行代码,搭建一个更加智能和美好的世界,拉近人们与未来的距离。

在此,祝所有程序员节日快乐!希望在未来的工作和生活中,每一位程序员都能继续乘风破浪,用代码改变世界!

最后,小熊同学为大家准备了一份手记,详细记录了团队是如何解决 bug 的,点击超链接,获得《记一个 PyTorch JIT bug 的解决过程》

Share