张建浩:一个开源爱好者的框架开发之路 | OneFlow U
张建浩,网名大缺弦(人称“大老师”),2018年毕业于中国科学技术大学,ONNX 成员,convertmodel.com、dabnn、DNNLibrary 开源项目作者,现为一流科技工程师。
大学时,他曾在 GitHub 发布了一个 Android 控件,意外收获了 300 多个 Star,从此他开始深度探索开源世界,成为数个开源项目作者。一次,他在听完OneFlow创始人袁进辉的讲座后,觉得 OneFlow 很硬核,但当时自己做的工作和深度学习框架开发没什么关系。2020 年 4 月,在一次“惊险的面试”后,他选择加入 OneFlow。
本文为张建浩自述。
1
大学接触开源后不能自拔
我是在中国科学技术大学读的本科,当时 Android 开发很火,我就是在那时开始接触开源项目,逐渐不能自拔。
2016年,在大三上学期的时候,我给超理论坛(理科生交流论坛)做 Android App,有显示表情、图片、公式、文本样式的富文本框的需求,当时也在上编译原理课,就基于递归下降法做了一个解析各种 tag 的 Android 控件。在发布到 GitHub 上之后,当时登上了 GitHub Trending(当日最火的 GitHub 项目之一),意外收获了 300 多个 Star。
后面还听了学长的一个分享,知道有 Google 组织的 Summer of Code 活动,由学生给开源项目贡献代码并获得报酬,其实就相当于远程实习。经过和 Mentor 套近乎、给目标项目提交 PR 刷存在感,我也顺利成为中国大陆五十个左右的入选候选人之一,并开始为 Android 系统上的老牌开源邮件客户端 K-9 Mail 增加新特性,当时一同入选的小伙伴们有一些现在还有联系。
到了大四,我去 MSRA 实习,做了一些和神经网络移动端部署相关的工作。后来,毕业设计做的“设计轻量级的人体关键点模型并在移动端部署”也是相关的工作,为此还给 PyTorch 和 Detectron 分别提交了几个 PR。这期间我在端侧部署圈混了个脸熟,有一次还被端侧部署框架 Tengine 团队邀请参加了他们的讨论。
大学和实习期间做开源项目的经历,一方面让我提升了编程能力,因为写完就能把程序跑起来看效果,很快可以带来正反馈,另一方面,做开源项目也会提升自己在业界的知名度。
对于计算机相关专业的学生,如果毕业后是想进入工业界,那就应该多培养自己的工程能力,这是一个很多学生缺少,但工作时却很看重的能力,参与开源项目显然是一个很好的提升方式。
当然,虽然不停地写代码感觉会很爽,但这很容易导致在舒适圈里无意义的重复,技术水平不会有大的提升。我建议工程经验积累到一定程度之后就去看一些经典的、专业的书(SICP 之类),把积累的工程经验升华到更高的境界。
2
两个有成就感的开源项目
2018 年毕业之后,我去了京东 AI 工作。得益于上级领导的支持,我用工作时间做了一些和部门主线无关的开源项目,有两个主要的项目都是深度学习推理框架。例如 dabnn,它是业界第一个高效的二值网络开源部署框架。这个工作发表在多媒体顶会 ACM MM 的 Open Source Software Competition 上 (https://arxiv.org/abs/1908.05858)。
在这个工作之前,二值网络研究者们只知道二值网络的理论加速比,但对二值网络在真实世界的性能无从知晓。有了这个工作之后,研究者们 (https://arxiv.org/abs/1909.10788)就可以报告他们设计的二值网络在 CPU 上的实际速度。在 dabnn 之后,还有一些工作(如 larq 和华为的 bolt)继续在二值网络部署这条路上前进。
此外,我的另一个开源项目 DNNLibrary,一个使用 Android 神经网络 API(NNAPI) 在移动端部署 ONNX 模型的库,当时吸引了微软 ONNX Runtime 团队的合作。ONNX Runtime 最初的 Android 适配,以及当时 Preview 版本的 NNAPI 支持都是由我完成。
借这次合作,我融入了 ONNX 社区,当时为了消除 ONNX 模型中的冗余 op 花了一天时间实现的 onnx-simplifier ,现在已经成了我最高的 Star 数项目(1.3k),被 YOLOv5、TNN 等项目官方集成,NCNN、MXNet 和 TensorRT 的开发者也推荐用户使用这个库优化掉它们不支持的 op。
我给 ONNX 贡献了 Resize、Softmax 等 op 的 spec( https://zhuanlan.zhihu.com/p/107761106),成为了 ONNX Operator SIG 的成员。现在我还在维护着 ONNX 官方的 ONNX Optimizer ( https://zhuanlan.zhihu.com/p/350702340)。
到 OneFlow 之后,我对 OneFlow 和 ONNX 之间的模型转换工作也做了许多贡献。
3
智力密度更大、更专注的 OneFlow 团队
以前在京东 AI 时,袁进辉老师来做过一次讲座,当时觉得 OneFlow 很硬核,但和自己没关系。
加入 OneFlow 的过程很“惊险”。当时我在找工作,并已经拿到了两个 Offer。在距离回复是否接受 Offer 的前一天,袁老师看到我在知乎上写的一篇技术分享文章,他私信问我,有没有空聊一聊。得知我在找工作之后,他说可以考虑 Oneflow,可我第二天就得决定是否接受其他公司的 Offer,所以来不及面试 OneFlow 了。
袁老师说,不用面试。跟他聊了一番之后,就给了 Offer。我比较了几个 Offer 的薪资、工作内容、工作时间(编者注:OneFlow 可以远程工作)等各种因素,就决定来 OneFlow,可能这就是缘分。
我在 OneFlow 的工作内容是做框架开发,除了做 OneFlow 和 ONNX 之间的模型转换外,我还做了模型加载保存机制的重构、量化训练、多设备支持等,现在在参与新接口的开发。
在大厂时,我的大部分时间都花在各种业务上,难以深入钻研技术,上面说的两个开源推理框架项目,也是忙里偷闲的维护。在 OneFlow 工作,做的就是自己爱好的事情,我觉得小伙伴们的智力密度要大一些,高阶的开发者也更多,对技术更加专注,做的事情也很有意思。
在 OneFlow 社区建设上,我希望我们可以用心对待用户提出的每一个问题,并对问题或者提交的 PR 及时做出反馈,这对留住用户非常重要。
基础软件国产化是大趋势,OneFlow 在分布式训练上掌握了核心技术,也有纯粹的、能力强的技术团队,所以未来会很有前景。
个人有什么职业规划?我没有什么宏大的规划,还有很多知识没有学完,希望在相关技术上继续做的更深入。对了,我正在 Telegram 上连载 TAPL 读书笔记,欢迎对 PL 感兴趣的朋友跟我交流:https://t.me/daquexiannotebook。
嗯...还有个最重要的事...差点给忘了:OneFlow 依然在大量招人,各类工程师和社区运营虚位以待,如果你想与我们一起共事,欢迎投递简历,点击“阅读原文”查看招聘详情。
注:封面图源自paula-schmidt,pexels