LOADING

Follow me

【转载】分享|TensorFlow团队告诉你:如何管理开源项目?
五月 6, 2017|DockerPaaS

【转载】分享|TensorFlow团队告诉你:如何管理开源项目?

【转载】分享|TensorFlow团队告诉你:如何管理开源项目?

全球人工智能:专注为AI开发者提供全球最新AI技术动态和社群交流。用户来源包括:北大、清华、中科院、复旦、麻省理工、卡内基梅隆、斯坦福、哈佛、牛津、剑桥等世界名校的AI技术硕士、博士和教授;以及谷歌、腾讯、百度、脸谱、微软、华为、阿里、海康威视、滴滴、英伟达等全球名企的AI开发者和AI科学家。


文章参考:Oreilly  作者:Pete Warden  翻译:小粽子

分享|TensorFlow团队告诉你:如何管理开源项目?

Tensorflow开源之道—在开源社区帮助下改进软件需要耐心和良好的组织。

 

开源的意义不仅仅在于把代码共享到网络上,希望有人来使用。从理论上讲,开源就是这么回事儿。但作为Google TensorFlow团队的一员,我也因围绕一个开源软件构建社区所需要涉及的不同元素而大开眼界。

 

1、怎样提供社区服务?

 

当一个新项目发布到世界上时,该项目的唯一专家就是编写这个项目的人。他们是唯一可以撰写文档和回答问题的人,也是能够最有效改进软件的人。但与此同时,我们这些TensorFlow核心成员也成为了项目扩展的瓶颈:我们无法同时完成所有事情。作为Google日常工作的一部分,我们知道如何编写代码和文档。但是,另一方面,尽管我们知道开源社区的技术支持对项目的成功至关重要,但是去回答开源社区中大量开发者各式各样的问题并不是我们习惯和擅长去处理的问题。

 

为了确保用户得到他们想要的答案,核心工程团队引入了轮转机制。团队成员可以选择解决Stack Overflow上标记#tensorflow的问题,在GitHub上查看拉取请求(pullrequest),对GitHub上的问题分类,处理内部与外部代码同步问题,或者追查测试失败的原因等等。从事这项工作的工程师们合理分工。通常,每个工程师对一个特定领域负责一个星期,所有人员循环轮转。虽然通常负责组织的工程师在本周的正常工作低效很多,但至少每个人每隔几个月才会受到一次这样的困扰。

 

2、怎样处理拉取请求?

 

我们部分开放TensorFlow源代码是为了让社区用户贡献他们的力量来不断改善它。到目前为止,我们已经有超过400个外部贡献者添加了代码,从小型文档修复到诸如OS X GPU支持,OpenCL实现或InfiniBand RDMA之类的大型改进工作。首先,轮转的核心工程师必须对每项贡献进行审查,以确保它们对tensorflow进行了有意义的改进。如果贡献通过初始审查,则会启动Jenkins测试以确保其不会导致任何故障。通过这一步之后,值班工程师可能会将其转交给另一位熟悉该领域的核心工程师进一步审查。

 

GitHub的代码审查新功能在这一过程中帮助很大; 在此功能开发之前,处理那些大量的个人意见对工程师来讲是一件痛苦的事情。通常,核心工程师会与外部贡献者共同处理较大的拉取请求。一旦大家都认同这一个请求,它将合并到GitHub顶部,然后在下一次同步时合并到我们的内部代码库中。

 

代码许可协议:作为我们自动拉取请求过程的一部分,我们需要确保将所有外部贡献均在代码许可协议(CLA)下进行。我们将贡献者的GitHub用户名与我们在cla.developers.google.com上的记录相匹配,以确保我们可以根据Apache 2.0许可证分发整个代码库。如果不同的电子邮件地址与拉取请求中的登录信息相关联,或者贡献者以公司身份登录,都可能会有很麻烦的问题。轮转负责拉取请求的工作人员需要去解决出现的以上任何问题。

 

3、怎样处理来自GitHub的问题?

 

在Github上已经有超过5000个关于TensorFlow的提问。不过,这看起来让人头疼的指标正是我们希望的,因为它说明了人们真正在使用Tensorflow!为了确保我们对每个问题都提出了回应,值班的工程师会对进来的消息使用标签进行分类。如果这是一个我们不太可能短期内实现的功能,我们将其标记为“欢迎贡献”。对于程序缺陷,我们会考虑它们的严重程度。现在,我们越来越多地看到,问题在无需我们的协助下就可以得到解决。外部用户自己渐渐成为了Tensorflow专家,特别是在Windows这样我们并不是每天都在使用的平台上。

 

如果某个提问在开源社区中迟迟没有解决方案且具有较高的优先级,值班人员会将其分配给我们熟悉该领域的工程师来解决。TensorFlow团队都有GitHub帐户,所以我们可以很方便的使用GitHub问题跟踪器来分配问题。因此,我们要求我们的工程师打开GitHub上的错误相关邮件的通知,以便他们在关注内部跟踪器之外,也可以看到他们被分配处理该问题。

 

4、怎么解决Stack Overflow问题?

 

Derek Murray是Stack Overflow轮转负责人,我深深佩服他回答问题的能力。根据他的个人资料页面,他的帖子已经帮助影响到了超过130万人。他还建立了一个由RSS源驱动的自动化表格,使我们可以使用#tensorflow标签来跟踪站点上的所有问题。我们每周轮转,但是发现问题的数量远远超出一个人能处理的范畴。现在,我们正在尝试按循环方式自动分解问题。

 

当在轮转职位上时,我每天早上看看电子表格,看看我被分配了什么问题。虽然我们无法自己回答所有的问题,但是我们会仔细看一下所有的问题。如果问题比较简单,我们会自己来回答一下。

 

值班工程师是解决问题的主力,但有时候合适的解决方案需要更多的时间或更专业的知识。如果一些问题似乎可以回答,但社区中没有人主动出手,我们将在通过查询代码(通常使用“git blame”)来确定团队中的谁可能能够解决。然后,值班工程师会发送电子邮件来询问那位内部专家是否可以提供帮助。

 

邮件列表:我们有一个邮件列表设置,起初我们不太清楚它能做什么。但是,我们很快就发现,通过邮件列表并不是一个跟踪和回答问题的好办法。现在,我们通过邮件列表来讨论杂七杂八的问题。实际上,我们发现,即使对于架构问题的讨论,GitHub可能更适合。所以,我们现在使用邮件列表来发送信息并分享公告,它还是值得订阅的。

 

5、怎样实现代码同步?

 

在聊天中,很多人都惊讶的发现,我们在google 内部使用的代码库与Github上共享的几乎完全相同,除了一些小区别:例如,Google内部基础架构是分开的且路径不同,但是同步过程是完全一致的。每周至少进行一次内部更新,并且经常从GitHub中获取代码。

 

问题的复杂之处在于我们正在进行双向同步。在GitHub公共项目和我们的内部版本上都有很多同时进行的更改,我们需要将它们全部合并在一起。目前没有现有的工具可以使用,所以我们编写了一组Python脚本来处理这个问题。脚本将GitHub更改引入到我们的内部源代码库中,转换所有标题路径和其他更改,并将其与最新的内部代码合并,创建内部副本。然后,我们将所有内部代码转换为外部格式,并继续使用该脚本将结果与最新的GitHub进行合并。

 

对于内部更改,我们也尽力确保每个登录都显示为单个git提交,并包括作者的GitHub帐户和更改的注释。我们在GitHub上有一个特殊的“tensorflow-gardener”帐户,用于管理此过程。当内部代码改动迁移到GitHub后,你就可以看到内部提交的代码。

 

确保转换过程在代码发生变化时仍能够继续工作有一定的难度。为了验证是否发生这种情况,我们确保每个内部的更改都可以通过脚本运行到外部版本,同时外部更改也可以更新到内部代码库,并且与原始内部版本没有任何差别。该脚本对涉及TensorFlow代码库的内部变化进行测试,并会阻止所有未通过审核的提交。对于那些发送拉取请求的代码,我们有时会要求进行不常见的更改,而这通常是因为我们必须确保他们的代码与基础设施同步。

 

6、Jenkins测试

 

由于Tensorflow需要支持很多平台,因此我们希望拥有广泛的测试基础设施。 TensorFlow需要能够在Linux,Windows和OS X等桌面系统上运行以及iOS,Android,AndroidThings和Raspberry Pi等移动和嵌入式系统上运行。我们还针对GPU有不同的代码路径,包括CUDA和OpenCL支持,以及基于Bazel,cmake和plainmakefile的构建过程。

 

开发人员不可能在进行更改时手动测试所有这些组合,因此我们设计运行了一套支持大多数平台的自动化测试程序,所有这些都由Jenkins自动系统控制。维护这一系统正常运转需要投入大量的时间和精力,因为总是存在操作系统更新,硬件问题以及与TensorFlow无关的其他问题可能导致测试失败。我们有一个工程师团队致力于使整个测试过程正常运作,他们发现了很多潜在的问题并在出问题前及时挽救了我们。

 

7、与开发者的联系

 

我们在谷歌的开源工作并不孤单,我们从其他项目如Kubernetes和开放源代码计划办公室(他们也有一套很好的文档)学到了很多。我们有一个非常努力的开发人员关系专家团队来协助我们,他们处理了大量文档,代码示例以及关乎开发者体验的其他重要部分。我们的长期目标是将关键专业知识传授给核心开发人员之外的广大开发者,以便更多无论是google内部还是外部的开发者可以参与到帮助社区建设的过程中来。将核心工程师的一部分时间分配到客户服务中的一大好处就是让我们第一手的了解用户所遇到的问题。参与客户服务也促使我们改进常见的错误并添加文档,因为我们可以直观的看到所需技术支持工作量的减少。

在不久的将来,我们希望随着更多人熟悉tensorflow框架的内部细节,文档质量不断提升,我们可以为处理常见任务(如错误分类)创建更多的指南。届时,我很荣幸有机会与这么多外部开发人员进行互动,希望能够帮助其中的一些人创造出激动人心的机器学习新应用。

 

TensorFlow如何处理开源支持:https://conferences.oreilly.com/oscon/oscon-tx/public/schedule/detail/62054?intcmp=il-prog-confreg-lp-ostx17_20170503_new_site_pete_warden_tensorflow_support_post_top_cta_oscon_session_link

 

分享|TensorFlow团队告诉你:如何管理开源项目?

分享|TensorFlow团队告诉你:如何管理开源项目?分享|TensorFlow团队告诉你:如何管理开源项目?

热门文章推荐

重磅|欧盟重砸10亿欧元 企图抗衡中国量子计算机主导地位

资源|5本深度学习和10本机器学习书籍(免费下载)

热文|成人网站PornHub爬虫,一天可爬取500万以上的视频(附源码)

重磅|中国医疗机器人行业图谱:2家上市,12家获融资,近1/3的团队来自哈工大

重磅|这家只上了中小板的AI公司市值或将超万亿!!!!!

重磅|佩奇致股东公开信:除了谷歌,Alphabet还做了啥?

重磅|滴滴宣布融资380亿(估值约3500亿):重点布局AI业务!

最新|霍金称世界正迈入“新科学复兴”,李开复微博点赞

no comments
Share

发表评论