我的开源故事
好久没写文章了,这次不写面经了。(因为在字节也还没待多久)这回写点轻松的内容和大家分享~ 虽然做开源也就一年的时间。但也积攒了很多故事,想写出来和大家一起分享。
去年这个时候,我第一次接触到开源,当时正值“开源之夏”报名的高峰期。当时的我对开源项目知之甚少,但怀着对技术的热爱和对学习的渴望,我决定报名参加。这一决定开启了我一段难忘的旅程,也让我在技术和社区中找到了归属感。
如今,距离那次初次体验已经整整一年了。再次看到“开源之夏”的报名信息,心中感慨万千。这一年里,我从一个开源新手逐渐成长为能够独立解决问题并帮助他人的开发者。开源不仅提升了我的技术水平,也让我结识了许多志同道合的朋友。
开源之夏时期
在最开始我报名的是taichi社区,taichi是一个高效的开源计算框架,专为高性能计算和图形应用设计。它的目标是简化复杂的物理仿真和数值计算,提供一个易于使用且高效的编程环境。当时我正处于在学校研究NeRF的时期,接触了很多图形学框架。自然的对taichi产生了浓厚的兴趣。
Taichi 使用一种类似于 Python 的编程语言,使得编写和阅读代码都非常直观和简便。即使对于没有深厚编程背景的人来说,也容易上手。并通过自动并行化和优化技术,充分利用现代硬件的计算能力。它支持多种后端,包括 CPU、GPU 和各种加速器,使得计算效率极高。
同时我也报名了OpenPPL,和OpenMMLab的开源项目。并和这两个社区,甚至社区背后的公司留下了难忘的回忆。OpenMMLab 是一个开源的计算机视觉工具箱系列。它旨在提供全面的计算机视觉解决方案,涵盖了从图像分类到目标检测再到图像分割等多个领域。
OpenMMLab 提供了高度模块化的设计,用户可以根据需求自由组合和扩展各个模块。这种设计使得开发者可以快速进行实验和应用开发。它提供了大量预训练模型,用户可以直接使用这些模型进行推理或者在其基础上进行微调,极大地降低了开发门槛。
当时taichi的项目是使用taichi框架复现一个plenoxels。这也是一个三维渲染方法。而OpenMMLab的项目是复现MiniGPT。OpenPPL的任务是PPQ量化库相关的工作。很遗憾的是,最后这三个项目我都没有选中,但是我依然对开源保持热爱。
OpenMMLab时期
在调整心态后,我决定继续在开源社区中寻找机会。我发现了 OpenMMLab 项目,这个项目同样具有挑战性和吸引力。于是,我开始积极参与 OpenMMLab 社区的工作。
开源之夏报名失败之后,在去年的下半旬。OpenMMLab推出了超级视客营的活动,这个活动是对OpenMMLab算法库进行PR贡献。我最后选择了MMDeploy这个仓库,我先把EfficientNet移植到Jetson上。
在项目的 Issues 页面,我浏览了许多开放的问题。有些是关于新功能的建议,有些是关于现有功能的 bug 修复。我找到一个关于使用OnnxRuntime实现了NMSMatch算法的问题:这个任务看起来既有挑战性又在我能力范围内,于是我决定从这里开始。
我先仿照MMCV里的NMSMatch的实现进行学习,之后学习并实现了ONNXRuntime的NMSMatch。这次活动让我第一次真切的给开源做了贡献。代码被合入主仓库时的兴奋感难以言表。
在后续,我又为MMDeploy实现了仓库的专属镜像,在MMDeploy做开源的日子青涩而又快乐。
OpenPPL时期
在 OpenMMLab 的成功经验和积累的代码贡献记录给了我更多的信心。于是,我再次关注起 OpenPPL 项目,并积极参与其社区的讨论和开发。在与 OpenPPL 社区的交流中,我展示了自己在 OpenMMLab 项目中的贡献和积累的经验。这些经历证明了我对开源项目的热情和能力。
我开始在 OpenPPL 项目中寻找适合我的任务,并提交了几次高质量的 PR。这些贡献得到了社区维护者的认可。由于我在 OpenMMLab 和 OpenPPL 项目中的持续贡献和积极表现,我向商汤科技申请了日常实习,最后如愿进入了OpenPPL。
回顾这段经历,从最初的落选到最终获得实习机会,这一路走来充满了挑战和成长。通过在 OpenMMLab 社区的努力,我不仅积累了丰富的技术经验,还学会了如何在开源社区中合作和贡献。
InternLM时期
在商汤实习的同时,我积攒了不少大模型相关的经验。怀着对大模型技术的浓厚兴趣,我通过社区的推荐找到了 InternLM 机构,并顺利成为他们课程的助教。在担任助教的过程中,我不仅帮助学生们理解大模型的理论知识,还指导他们进行实际操作,巩固了自己的知识体系。
在此期间,我逐渐熟悉了 InternLM 的技术栈,并开始关注他们的大模型部署仓库——LMDeploy。通过积极参与社区讨论,阅读项目文档,我找到了几个可以改进的地方,并提交了自己的 Pull Request (PR)。这些 PR 涉及到性能优化(量化模型加速)、bug 修复。
这段经历让我更加坚定大模型推理部署的路线。
PaddlePaddle时期
之后在我开始关注到更多的开源项目,希望能在更广阔的领域中继续学习和贡献。一次偶然的机会,我了解到 PaddlePaddle,这是一款由百度开发的深度学习平台,以其高性能和灵活性而著称。PaddlePaddle 的广泛应用和活跃的社区吸引了我的注意,我决定深入了解并尝试为其做出贡献。
起初,我花了大量时间阅读 PaddlePaddle 的文档和教程,学习其独特的框架设计和使用方法。通过社区论坛和贡献者指南,我逐渐熟悉了项目的开发流程和代码规范。
在给Paddle的贡献中,我优化了一些Paddle上层API(round、 view等方法)。同时使用PIR实现了一个图模式匹配的方法,还为Paddle贡献了int4量化算子。
通过不断地贡献和学习,我不仅提升了自己的技术能力,也深刻体会到开源社区的合作精神和创新力量。
写在最后
现在越来越多的朋友们都希望有份开源的经历来充实自己,我认为重要的有几点。
- 真的解决了实际的问题,不是为了开源而开源
- 在使用中发现开源项目存在的问题,并动手改进它们
- 积极帮助别人改进开源项目现有的问题 希望大家都有机会参与到开源项目里。都有机会提高自己。
题外话
最近有时间会在机智流公众号写些文章,感兴趣的朋友们欢迎来关注我们的公众号呀~
#开源经历##开源之夏##开源社区##我的成功项目解析#