如何给开源项目做贡献?

openlab_4276841a 更新于 1年前

作者: Adrian Boguszewski 和武卓

      现如今,越来越多的开源软件被应用于千行百业。据统计1,我国在全球最大开源平台GitHub上的贡献者数量已经达到了全球第二。2020年,GitHub平台上中国贡献者数量增加了37%;而在另一个开源平台Gitee上,中国贡献者的数量更是增加了50%,总量超过了600万人。

       以OpenCV这个开源计算机视觉及机器学习库为例。OpenCV于2000年首次公开发布,已经成功地经历了20多年的发展,为全球开发者提供了2500多个优化算法。OpenCV团队团队花费了大量时间,完成了出色的工作,知道吗,其实你也可以这么做。但是,如果你这样做没有为你带来任何直接的经济收入,你还会觉得为开源项目做贡献有什么意义吗?

为什么要为开源项目做贡献?千言万语都说不完

开源项目提供源代码来帮助开发人员免费解决他们的问题,开发人员分享改进的解决方案并为开源项目做出贡献。 因此,双方都受益匪浅,形成了一个良性循环。

现在,让我们来看看为开源项目做贡献有哪些益处:

· 通过学习他人的源代码来获得个人成长

在开源项目中,你通常可以免费下载或克隆源代码。因此,你可以方便地阅读源代码,了解如何定义函数来实现特定功能,如何建立模型训练流水线等等。通过这种方式,你将学会如何使用开源项目提供的功能和工具,并能通过阅读源代码学到知识,逐步成长为高级开发人员!

· 建立起自己的名声

如果你使用开源软件,并提出比目前更好的解决方案,欢迎你将你的工作提交给开源项目。提交后,你的工作将得到审查,并会获得有益的反馈。经过几轮修改,你的工作最终可以获得批准并合并到该项目中。最后,你的解决方案被其他人正式接受并使用,这意味着你建立起了自己的名声���

· 在简历中增加优秀的开源项目经历

通过贡献一个开源项目,你相当于加入了一个拥有成千上万志同道合的开发者的社区。你还将有机会通过提交你的工作并获得评审,与开发和维护开源项目的专业人员建立联系和互动。同时,你可以通过在开源平台上公开展示你的技能来创建一份优秀的简历。我们希望这将有助于你跳过面试,在5分钟的谈话后被录用!


哪里可以找到“最佳的”开源项目?

    你可以通过各种平台或渠道为开源项目做出贡献。这里有一些成功案例,根据我们的经验,你可以先找到一些有趣的项目和方法,让你成为开源开发者。

    首先,考虑GitHub或任何其他代码托管服务。通常,开源项目有一个存储库来存储代码和相应的介绍文档。你可以通过浏览GitHub找到你感兴趣的项目。有关如何为开源项目做贡献的详细指南,一般可以在名叫“CONTRIBUTING.md”的文件中找到。

    其次,还可以找到一些开发者活动(如针对全日制学生或开源初学者的谷歌代码之夏(GSoC)等)、挑战赛或项目核心开发人员和维护人员组织的竞赛。通过参加这些活动或竞赛,你可以按照组织者指定的方式做出贡献,甚至还可以顺便赢得一些奖金。

    最后,可以借助你当前使用的应用程序。正如文章开头所述,今天常用的许多应用程序都是免费和开放的。你正在使用一些你非常喜欢的应用程序,很有可能是开源的——有了这个想法,你可以寻找这些应用程序的开源代码仓,然后参与这些程序的开发和维护工作,帮助它们变得更好!


接下来,我们将回答最重要的问题,“如何做出贡献?”。

本文基于OpenVINO™ Toolkit–一个来自英特尔的用于优化和部署AI推理的开源项目。对于其它开源项目,请联系社区并阅读他们详细的贡献指南。

好的,现在你决定为OpenVINO ™这个开源项目做点贡献了。 首先,你应该找到该项目的网站和代码库,以了解更多关于项目需求、代码结构和贡献规则的信息。目前,你可以在这里 找到 OpenVINO ™项目的官方文档,整个代码库托管在GitHub上。想要了解这个项目,最佳选择就是把它用起来!如果你不熟悉OpenVINO™, 请克隆并运行OpenVINO Notebooks仓库,并运行其中一些notebooks代码示例来学习并享受其中的乐趣。

我们强烈建议你通过运行:

· 002-openvino-api来学习基本的运行时功能

· 101-tensorflow-to-openvino来学习如何转换tensorflow模型

· 通过401-object-detection-webcam来获得通过实时摄像头观察到推理结果的乐趣���.

为开源项目做贡献的典型步骤如下:

第一步:分支(Fork)项目

这个项目需要你工作在自己的仓库副本上,并创建pull request来合并代码。这意味着当你准备好开始你的旅程时,你需要点击“fork”按钮来fork主仓库。

第二步:克隆(Clone)项目

现在你已经拥有了你的远程副本。是时候在你的机器上克隆整个仓库了。你可以通过以下命令来克隆:

git clone git@github.com:<your_nickname>/openvino.git

如果你遇到如下图所示的错误,那可能跟你的SSH密钥有关。请参阅添加密钥指南 或者 通过https克隆 查找相应的解决方法。

第三步:编译(Compile)项目

下一步是建立你的开发环境,包括克隆子模块、安装依赖项和设置选项。我们推荐使用Ubuntu 20.04。请注意,在调试模式下编译代码将占用大约50GB的磁盘空间。如果你是经验丰富的开发人员,可以指定不同的选项来启用或禁用某些模块。请参阅此处的指南

cd openvino/
git submodule update --init --recursive
./install_build_dependencies.sh
sudo apt install cython3 intel-opencl-icd
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Debug -DENABLE_PYTHON=ON -DENABLE_TESTS=ON -DENABLE_FUNCTIONAL_TESTS=ON -DENABLE_DEBUG_CAPS=ON -DENABLE_CPU_DEBUG_CAPS=ON -DENABLE_NCC_STYLE=ON ..

至此,你已经为编译做好准备了。运行以下的“make”命令行,然后等待整个过程运行结束。

make --jobs=$(nproc --all)

比较少见但是有可能出现的情况是,你的操作系统杀掉了你的编译。如果你碰到了如下图所示的情况,请以更少的并发任务,再次运行“make”命令

如果你想学习更多的关于整个编译建立的过程,请参考《如何从 OpenVINO™ 的主分支构建 OpenVINO™ Wheel 包?| 开发者实战》。

第四步:运行(Run)项目

为了确保每一项都正确构建了且 OpenVINO™ 是可用的,你可以运行如下这个名为 hello_query_device 的示例程序,它将打印所有可用的计算设备。

cd ../bin/intel64/Debug
./hello_query_device

你应该能看到所有可以运行 OpenVINO™的设备。在我们这种情况下,包括CPU, GNA以及GPU。

第五步:选择一个问题(issue)

你已经构建了代码。现在,你已准备好进行真正的开发了。一个好的起始点是根据实际需求修复或实现一些东西,使你的工作更有价值,并增加被合并的可能性。Github上有一个Issues标签,在那里你可以找到社区报告的bug和功能请求。

在你非常熟悉代码之前,最好寻找一个容易解决问题(easy-to-fix issues)的地方开始你的开发工作。这些地方通常有特定的标签,比如“good first issue”或类似的标签。

当你决定修复/实现什么时,建议先与开发人员和社区讨论一下,以确认最终的需求并指定你自己来解决这个问题。当一切都知道后,你就可以开始编写代码了。

第六步:代码实现

在你开始之前还有一件事,那就是找到并阅读贡献指南。遵循规则和代码风格是非常重要的。在大型项目中,一致性是至关重要的。然后你可以创建一个新分支(带有有意义的名称的)并切换到它。

git branch <meaningful_branch_name>
git checkout <meaningful_branch_name>

在你喜欢的任何IDE中打开代码,或者使用像vim这样的文本编辑器开始编写代码吧!每隔一段时间测试一下你的修改,以确保它朝着正确的方向推进着。

如果你在实现功能时遇到任何的bug,请创建一个issue来上报这个错误。

第七步:测试代码

如果你实现了一个新特性或修复了一个bug,你应该为它提供单元和功能测试(如果可以的话)。例如,如果你的更改与Python API相关 (src/bindings/python/src),好的做法就在相同的模块中增加单元测试 (src/bindings/python/tests) 。当你的修改影响了推理引擎的时候(src/inference/src ),你就应该增加相应的测试目录 (src/ tests/unit/inference_engine) 。接着再编译一遍 OpenVINO™,与其他人一起运行你的测试,并检查是否一切都通过。

cd ~/openvino/bin/intel64/Debug
./ieUnitTests

第八步:推送(Push)并创建拉取请求(Pull Request)

当 OpenVINO™编译和测试都通过了,你可以将你的分支推送到远程仓库。

git push -u origin <meaningful_branch_name>

创建一个PR(Pull Request),将你的更改拉向主仓库(main repo)是必须的。你可以在Pull requests选项中完成。

记得要为你的修改添加注释以及合适的标签,比如 Python API。

第九步:更新

然后,请等待主要开发团队的评估,当评估准备就绪时,请回答问题,消除开发团队的疑虑,并根据评估结果改进你的代码。同时,你需要确保所有CI测试都通过。如果没有,找到这些问题并解决它们。

第十步:合并(Merge)

最终,你的工作被合并啦!

我们鼓励你与我们长期合作��� 选择下一个issue,记得不时同步你的主分支!

OpenVINO™ 工具包现在是谷歌代码之夏(GSoC)的一部分啦!这可能是开启开源之旅的最佳方式之一。一起关注新闻并期待GSoC 2023吧!


数据来源:

[1] 中国信息通信研究院云计算与大数据研究所《开源生态***》 2021.9

0个评论