算法工程师想进一步提升竞争力?向TensorFlow开源社区贡献你的代码吧

算法工程师为何也要向社区贡献代码?

[做者:DeepLearningStack,阿里巴巴算法工程师,开源TensorFlow Contributor]前端

“作算法的人要熟悉算法框架源码吗?算法工程师难道不该该会使用框架建模就能够了吗?如何成为具备必定竞争力的算法工程师?”...git

我常常被不一样的人问相似这样的问题。坦白地说从我我的经验来看,身边算法作的不错的人对算法框架源码广泛熟悉,并且算法建模这件事在当前来看还并不能纯粹的与底层隔离,由于你会常常与计算性能,算法实现原理打交道。固然,我也见过一些比较浮躁的从业者,认为算法工程师应该只作建模不碰源码,这些人通常都只是根据网上教程跑通了个MNIST,ImageNet的例子就认为本身能够胜任算法工程师的工做了,这种人其实不是想作算法,而是不想写代码而已。算法门槛表面上在下降,可实际上是不断升高的。一方面,学术界算法创新竞争愈来愈激烈,主要表如今AI相关的顶会变多,accept的paper也愈来愈多,多到根本看不过来,你如今所想到的模型创新,没准在另外一家公司或者学校已经走到实验验证阶段了;另外一方面,性能优化和定制的功能开发等工程能力愈来愈重要。如今来看,市场上作想要算法的人很是多,但到面试经过的几率很低,这也侧面说明了竞争门槛实际上是比较高的。github

但这也是机会。若是你是作算法的,请趁此机会提高本身的工程能力和算法领域内的影响力。How?其实很简单——为算法领域的知名开源软件贡献代码。由于我我的是TensorFlow的contributor,因此我以TensorFlow为例为你们介绍。面试

向TensorFlow社区贡献代码的步骤

第一步 Fork!

首先,进入TensorFlow的GitHub页面,地址以下:https://github.com/tensorflow/tensorflow ,能够看到以下页面。算法

红色框内表示当前TensorFlow这个开源项目已经有1844我的贡献过代码,想要加入这个行列的coder们请努力吧,这并无想象中那么难。由于咱们没法直接对开源项目clone开发,而只能在咱们本身的仓库中开发,因此咱们须要点击Fork按钮,将该项目Fork到本身的GitHub仓库名下,而后咱们就能够在咱们本身的仓库中看到这个项目。性能优化

第二步 Clone本身的仓库

成功Fork以后,咱们就能够将它Clone下来进行开发了。每次开发以前最好切出一个分支出来,避免直接在master上作修改。架构

第三步 与Fork以前的开源master创建联系

自从咱们Fork新项目起,咱们本身仓库的master将再也不与开源master有任何联系,也就是说咱们本身仓库的master代码将再也不随着开源master自动更新。那么如何及时更新本身的仓库呢?这须要为咱们clone下来的项目添加upstream,即上游远程仓库。这很是简单,只须要一句命令便可搞定。咱们须要将开源master的git地址复制下来而后添加到当前项目的,对于TensorFlow来讲执行下面命令便可。框架

git remote add upstream git@github.com:tensorflow/tensorflow.git

这样就与开源社区master创建起了联系,咱们能够看到配置文件.git/config文件中确实添加了upstream。分布式

第四步 编写代码,提交到咱们的仓库中

这一步比较常规,在本地切出开发分支,编写代码,提交到咱们本身的仓库中。性能

第五步 生成Pull Request

当咱们将本身的commit提交到本身的GitHub仓库以后,就能够向Fork源master提交Pull Request(简称PR)申请了。首先进入本身的GitHub仓库页面,点击New pull request按钮。

点击后进入Comparing页面,咱们选择须要往Fork源merge的分支,以下所示。因为我当前这个分支已经提交了PR,但还处于review期间,因此生成的页面不太同样。

第六步 填写代码贡献说明

这是最后一步,须要在生成的页面中填写本身要贡献这段代码的缘由,而后引入相关的reviewer进行讨论。不得不说,这一部分很是关键,由于大部分reviewer只会review代码规范,而这段代码的做用自己须要你们本身解释清楚。若是你曾经在该项目中贡献过代码,那么会显示Contributor字样。

自此,你成功的向开源社区提交了一个PR,离成为Contributor走进了一步。

关于PR的状态跟踪

通常状况下,TensorFlow的reviewer响应都是比较快的,并且他们对于技术讨论很是开放,也很是愿意社区积极贡献代码。Reviewer会在你的PR上提出各类Comments,在不断的代码refine以后,代码将最终成功merge到开源master中,从状态上看你的PR将会显示紫色的Merged。若是到了这一步,那么恭喜你,成功成为了TensorFlow社区的Contributor!

如何与开源master同步

TensorFlow社区master天天都会更新,因此建议天天作一次代码同步,很是简单,两行git命令就能搞定。

git pull upstream master
git push origin master

分别是将upstream(也就是Fork源)代码更新到本地,向origin(本身的仓库远端)更新代码。

TensorFlow发布通告中会有你的名字

由于你的贡献让TensorFlow更加完善,因此在以后的发布通告中会出现你的名字。下面的这段发布通告来自于TensorFlow 1.13.0 RC2,其实你能够从描述中看到,在1800+名Contributor中,绝大部分是Google内部的人,因此Google外部的Contributor很是少。

TensorFlow有那么多待完善的功能吗?怎么发现它们?

其实很是多。TensorFlow一大特色是通用性,但愿可以在各类场景下均可以变得成熟。可是这个目的工程量浩大,难免存在Bug,设计不完善,性能不理想,功能不全面等状况。其实在使用TensorFlow建模时就会遇到他们,并且几率还真不小。固然你能够遇到问题选择绕开它们,但这可能也意味着你错失了一个提PR的机会。提PR的前提是你必须对源码有所了解,因此算法工程师们在读paper读累了的时候不妨换换思路,天天看一点TensorFlow源码多提高一些工程素养。

TensorFlow社区值得关注的东西

TensorFlow是Google重要的算法军火库,Google围绕着TensorFlow自己还作了其余子项目,他们也很是重要。另外,也能够加入讨论组。

TensorFlow生态中的其余子项目

TensorFlow生态中子项目至关丰富,有前端TensorBoard,有易用性框架Estimator等等。这些子项目也一样须要社区贡献力量。

TensorFlow 2.0的标准制定项目——Community

Community子项目其实就是TensorFlow的RFC文档,它是TensorFlow 2.0的标准,里面含有一些模块和接口的设计。为何要关注RFC文档?这是由于TensorFlow的发展比较快,常常出现某些模块被弃用,某些新模块将要大力发展的状况。这些信息对于开发者很是重要,若是你想共享一段代码,但它与社区的发展标准背道而驰,那么将是无用功,因此RFC文档对于避免虚工是很是有用的。但一个标准的提出也须要通过社区的审核和讨论,因此若是有本身的想法,能够在Community中提出本身的comments,引入更多的人参与讨论。

扩展——与TensorFlow有关的项目

从TensorFlow项目这一个点出发,咱们能够不怎么费力气地学习到更多的开源项目,并且TensorFlow架构和源码设计足够复杂,这使得咱们在看其余相关项目时变得相对轻松。好比当你对TensorFlow使用单机多卡GPU通讯感兴趣时,能够参考NCCL。当你对多机分布式感兴趣时,你或许能够看看Uber开源的Horovod。当你想要研究不一样框架之间的差别时,你也许能够看看Pytorch,caffe2和MXNet。这种辐射式的积累会让咱们学习更多的软件设计哲学。

写在最后

因为本人也是算法工程师,工做中不只是TensorFlow的用户,也在本身所任职的公司参与TensorFlow的定制开发与性能优化。从我我的角度来看,算法工程师这个职位不得不说是含有大量水分的,一方面真正懂算法可以在AI顶会发一些高质量paper的人占比并不高,另外一方面,在算法工程上理解较深的人也并很少,而在算法和工程两方面都比较强的人就更少了。如今属于算法领域较热的时段,这方面的油水,薪资竞争力和需求量都很大,因此市场上存在不少想要进入这个领域的人,这是好事。可是若是一我的本身跑几个模型例子就声称本身能够作算法而且十分反感写代码的话,那他在算法领域也不会有很好的发展。除非,你是一个算法造诣很是高的天才而且可以胜任算法科学家的人。不然,请不要欺骗本身,认真培养你的算法能力工程能力,毕竟你的目标仍是一个合格的算法工程师。

相关文章
相关标签/搜索