左益豪,一流科技工程师(实习),2022年本科毕业于北京邮电大学电子商务及法律专业,目前已保研到本校人工智能学院。除了爱写代码,他自称,“琴棋书画,样样不通,唱跳Rap篮球,完全不会,但偶尔会帮亲朋好友维修电脑(谁说写代码的都不会修电脑 [狗头])。”
中学开始,他就把很多课余时间花在学习编程技能上,沉浸在代码世界,让他感受到摆脱现实物理定律的束缚和自由创造的满足感。当然,最重要的是通过参与项目实践获得提升,在OneFlow期间,作为人生的第一份工作,他在编程技能、文档撰写、工作方式等方面都收获颇多,在他看来,这段独一无二的经历将持续影响他在未来的学习和工作。
以下是他的讲述。
1
从衡水中学到保研北邮
衡水中学,想必很多朋友都知道,它被人们一度视作“教育工厂”,我的高中就是在这里度过的。尽管在初中时就在接受“衡中式教育”,但我一直不喜欢也不太适应这种典型的应试教育模式,初高中六年过得比较痛苦。
中学时,我就对计算机相关领域产生了很大的兴趣,并计划在大学里学习计算机专业。高一,我参加了一段时间的信息学奥赛,但后来发现和文化课程两边实在无法兼顾,还没参加比赛就退出了,但这段时间对 C++ 和数据结构及算法的学习更加深了我对计算机的兴趣。高三了解到北邮在计算机专业方面的优势,就把它当作高考目标。
填报高考志愿时,基本全部是计算机科学与技术、软件工程、网络安全之类的专业,根据分数我选了北邮的中英联合培养的几个专业,当时也想在研究生阶段出国留学。最后就被调剂到“电子商务及法律(E-commerce Engineering with Law)”,这实际上是理工科专业,需要学习数学、计算机、电子信息以及经管和法律类课程,不过光听名字可能很难跟理工科联系起来,的确也经常引起误解 [笑哭]。这是北邮和英国的 Queen Mary University of London 的联合培养项目,大概是英国比较追求通识教育的缘故,这些专业在课程类别上都比较宽泛,不同于国内其他名为电子商务的专业。
研究生选人工智能专业是自然而然的选择,北邮校内的学习氛围很浓厚,我在大一和同学做创新创业项目时接触到了深度学习,后来上的一些课程,参加的创新创业比赛等都和深度学习、计算机视觉有很大关系,就逐渐对此产生了很大的兴趣,另外从小就喜欢各种科幻类的电影、小说和游戏,也算是一部分兴趣来源。
于是,大三获得保研资格后就决定攻读人工智能类的专业。对我来说,人生如此短暂,倘若不能做些自己喜欢的事情,就太遗憾了。
2
编程热情和成就感
我的大部分编程技能都是自学习得的。接触编程最早是在初二,那时候特别喜欢玩电子游戏,也产生了按自己的想法创造游戏的想法,于是就自己慢慢用百度搜索,了解到开发游戏需要编程,之后就一点点搜索如何学,用零花钱买一些书自己看。
那时,网络还没有现在这么发达,初中是寄宿制学校,每两周大约会有一天半的假期,课程之外的书籍是严格禁止的。即使是寒暑假,也不能每天坐在电脑前,不然可能会被误解为只是在玩,耽误了学习,身边也没有能交流的人。虽然有着诸多的困难,但那时也慢慢地学习了一些 C 语言,那时英语水平也不高,还学了一些能用中文编程的易语言,一有机会就学着编写一些十分简单也基本没用处的代码。
高一时参加过一段时间的信息学奥赛,那时有老师讲解 C++ 以及数据结构和算法,虽然后来因为精力有限放弃了,但课程学习给这两方面打下了一些基础,最重要的是使自身的编程思维有了很明显进步。在高考结束的暑假里,为了开发 Android App 而自学了 Java,大学期间也有 Java 程序设计、网络程序开发等课程。Python 是在大一自学的,深度学习领域必会。因为课程和项目需要,也学习过 JavaScript 来开发网页和微信小程序。
高二时做过一个自娱自乐小软件,当年那份热情和成就感至今还记忆犹新。当时在用电脑时感觉在桌面上建文件夹、放快捷方式的管理方式比较低效,于是使用 C++ 和 Qt 写了一个简易的程序&文件启动器之类的软件。用动态的太阳系作为背景,太阳是所有项目的汇总,一级类别用恒星来表示,包括开发工具、系统工具、收藏的文件夹/文件等。二级类别用恒星的卫星表示,当鼠标指针悬停上去时,恒星和卫星会发生旋转来显示该类别的内容,另外用星星的排列显示一些诸如天数倒计时之类的信息。
当时,每 2 或 3 周只有一个 23 小时左右的假期可以回家。回到家有机会就边学边做,然后不断完善,算上寒假大概得做了大半年,基本完成后,成就感相当强烈,感觉像造物主一样自由地按自己的想法创造一个世界。那种在代码的世界里摆脱现实世界中物理定律的束缚,目前只有写代码时能够感受到。
由于有着强烈的兴趣,我愿意把时间花在学习编程技能上面。在接触得比较广泛之后,会发现很多东西都是相通的,掌握了一种语言之后,其他的学起来也就很快,最重要的是多实践,比如参与校企合作的项目,或是到 OneFlow 这样的公司进行实习。
3
第一次实习在OneFlow
最早是在知乎刷到了有关 OneFlow 的介绍,高性能的 OneFlow 深度学习框架让我印象十分深刻,也对此充满了好奇。
当时是想寻找视觉算法方面的实习岗位,浏览时恰好发现 OneFlow 在招聘这类岗位,与自己的意向非常契合,于是就毫不犹豫地投了简历。公司远程实习给我带来了很大便利,让我有机会在寒暑假多陪伴家人。
进入 OneFlow 之前,自己只是在单方面的开源使用者,并没有深入参加过其他的开源项目,对开源的了解也甚少,或者可以说从未体会到开源的精神以及工作方式。比如之前在使用 MMDetection 的过程中发现了 bug,由于感觉可能会很麻烦也并没有去提个 PR,只是在本地 fix 后继续用。
来到 OneFlow 之后,我了解到开源的精神和意义,也熟悉了开源项目的工作流程,能和全世界各地的开发者们共同为一个项目做贡献还是很快乐。
我一开始是在OneFlow新手村,主要负责在云平台上开发项目。首先实现了使用 Oscar 模型来进行 Image Captioning 任务,还写了一个可以在线推理的 Web Demo;其次是使用 Lightweight OpenPose 算法来实现人体姿态评估的训练和推理,有一个可以在浏览器中进行实时人体姿态评估的 Web Demo。后来,我还承担了一些文档方面的工作,包括更新现有教程中的一些内容,撰写实践指南中的 《OneFlow 与 ONNX 交互》、《自动混合精度训练》、《Activation Checkpointing》等教程。还有为 OneFlow 调整过 error message,更新 oneflow.to_global 和 oneflow.to_local 来支持任意类型的输入,以及支持大模型的分片保存和加载。另外,还为 LiBai 模型库撰写教程和视频课程脚本。
在框架方面,我最开始在课程中接触到的 TensorFlow 2,后来也随着趋势转到了 PyTorch。现在体验了 OneFlow,它和 PyTorch 基本对齐的特点使得学习和迁移成本很低,还有 OneFlow 的 Global Tensor 和 SBP 等分布式方面的优势,的确要比其他深度学习框架方便很多,在如今的大模型趋势下,OneFlow 在这方面的创新使得分布式训练的门槛大大降低,是分布式训练领域的“领头羊”。
在工作交际方面,我自己和陌生人相处起来比较慢热,不是很擅长和别人打交道,但在这里工作完全没有社交压力。虽然在整个实习期间都没有机会和同事们见面,但实际上大家都很热情,袁老师非常平易近人,姚迟和许啸宇两位导师给了我很多教导和包容,在此感谢。
在 OneFlow 实习实际上是我人生中第一份正式的工作,让我在编程技能、文档撰写、工作方式等方面的收获相当大,意义非凡。另外,在工作中也意识到自己还很菜,接下来的研究生阶段还要更加努力才行。
当你看到这篇推送时,我已经准备继续去完成学业了。在此诚挚祝愿 OneFlow 蒸蒸日上、大展宏图;祝福各位同事工作顺利、心想事成!再会!
其他人都在看
OneFlow v0.8.0正式发布
18张图,直观理解神经网络、流形和拓扑
OneFlow源码解析:Op、Kernel与解释器
Geoffrey Hinton:深度学习的下一个大事件
分布式深度学习编程新范式:Global Tensor
LLVM之父:为什么我们要重建AI基础设施软件
大模型训练难?效率超群、易用的“李白”模型库来了
欢迎体验OneFlow v0.8.0:GitHub - Oneflow-Inc/oneflow: OneFlow is a deep learning framework designed to be user-friendly, scalable and efficient.OneFlow is a deep learning framework designed to be user-friendly, scalable and efficient. - GitHub - Oneflow-Inc/oneflow: OneFlow is a deep learning framework designed to be user-friendly, scalable and efficient.https://github.com/Oneflow-Inc/oneflow/