close
当前位置: 物联网在线 > IT技术 > 大数据 >

TensorFlow技术主管:团队如何管理开源项目

TensorFlow 技术主管在这篇文章中和我们分享了他们团队管理开源项目的经验。

开源不仅仅是把代码贡献出来然后希望有人来使用它。我也知道这一点,不过在成为 Google TensorFlow 团队的成员后,我才认识到围绕一个软件构建一个社区所需要考虑的因素实在是很多。

社区服务

当一个新项目发布出来时,该项目唯一的专家就是编写这个项目的人。他们是唯一可以撰写文档和回答问题的人,而且他们可以最有效地改进软件。因此,我们这些 TensorFlow 团队中的核心成员也成为了项目扩大的瓶颈:毕竟我们无法马上完成任何事情。我们知道如何编写代码和文档,因为这些任务是我们日常工作的一部分。但另一方面,回答大量来自社区开发者的问题不是我们应该做的事,尽管我们也知道这对于项目的成功至关重要。

为了保证用户可以获得所需要的答案,核心工程师团队的所有人都加入了轮流回答问题。团队成员可以选择解决 Stack Overflow 上带有 #tensorflow 标记的问题 、在 GitHub 上审查 pull requests ,分类  GitHub issues ,处理同步外部和内部代码或追查 测试失败 的原因。

通常,每个工程师每次对一个特定领域负责一个星期,以循环的方式轮流负责。因此,轮值的工程师在本周正常工作中的生产力会低很多,不过至少每个人工作被打断的频率降到了几个月一次。

Pull requests

我们开源 TensorFlow 部分的目的是希望通过社区的贡献来改进它。到目前为止,我们已经拥有超过 400 个外部贡献者添加了代码,从小的文档修复到大型的添加,如 支持 OS X GPU 、 OpenCL 的实现 或  InfiniBand RDMA 。首先,轮值的核心工程师必须对每项贡献都进行审查,以确定是否有价值。如果贡献通过初始审查,会触发一组  Jenkins 测试 ,以确保其不会导致任何故障。如果这些行为也通过审查后,值班的工程师可能会希望其他对这个领域更了解的工程师来看一看,所以这将会被转交给该专家进行审查。

GitHub 全新的详细的 代码审查工具 在这个过程中提供了很大的帮助;没有它们之前,处理所有的个人意见是一件痛苦的事情。通常,大的 PRs 会在工作中保持一段时间,核心工程师会和一个或多个外部贡献者协同工作,在大家都满意后,PR 将会在 GitHub 中被合并,然后在下次运行同步时合并到我们的内部代码库中。

代码许可协议

作为我们自动的 pull request 的一部分,我们会将贡献者的 GitHub 账号与我们在 cla.developers.google.com 上的记录相匹配,以确保任何的外部贡献者都拥有代码许可协议(CLA)。我们的目标是确保整个代码库可在 Apache 2.0 协议下准确无误地分发。当 pull request 的轮值工程师要对出现的所有问题进行整理时,如果一个 pull request 内部关联了不同的邮箱,或是贡献者需要以公司的身份登录,情况可能会变得复杂。

GitHub issues

目前已经有超过 5000 个 issues 提交到 TensorFlow,对于有些人来说,这看起来似乎有点让人沮丧。但这是我最喜欢的指标 —— 它说明了用户有在真正使用这个项目!为了确保能对每个提交的 issue 都进行回应,值班的工程师会时刻关注新出现的信息,并尝试使用标签对它们进行分类。如果是一个我们内部不太可能在短期时间内实现的特性,我们会将其标记为“Contributions Welcome(欢迎贡献)”,对于 bug,我们会尝试优先考虑。这段时间以来,随着外部用户自己也成了某些领域的专家,我们看到越来越多的问题无需我们的帮助也能够被解决了。特别是在像 Windows 这些我们不是每天都使用的平台上。

如果某个 issue 通过社区没能找到答案或者解决方案,而且它的优先级也比较高,值班工程师会将其分配给对这个领域更了解的工程师。整个 TensorFlow 团队都有 GitHub 账号,所以我们可以使用常规的 GitHUb issue 跟踪器来分配问题。我们考虑过把用户提交的 bug 复制到我们的内部系统,但为相同的信息同步两份副本的代价实在是太高了。因此,我们的工程师除了要关注内部的跟踪器之外,还需要打开 GitHub 上有人提交了 bug 的邮件通知,以便及时看到属于自己的分配。

Stack Overflow

Derek Murray 是 Stack Overflow 值班小组的负责人。我十分敬畏他回答问题的能力,根据他的 个人资料页 ,他发表过的帖子已经被超过 130 万人浏览。他还设法建了一个由 RSS 源驱动的自动化电子表格。开始的时候,我们每周轮流负责,但后来需要处理的问题的数量变得十分庞大,一个人难以处理。所以后来在轮流的基础上,我们采用了自动分配问题的方式来代替之前的做法。


you might also like

  • 基于时空算法研究的商业决策分析
  • 大数据洞察报告的变现困境,到底要怎么走出
  • 大数据+分析学 数字油田的两把利剑
  • 布局数据库核心国际标准制定者——中国科学院直属基金国科嘉和领投柏睿数据
  • 如何让热点图支持大数据
  • 给Java开发者的10个大数据工具和框架
  • 像研究股票一样研究白酒基于大数据的量化基本面研究探索
  • 用 Python 分析过去四年的比赛数据,实力最强的 NBA 球队原来是它
  • 2017“一带一路”国际舆情大数据报告
  • 做数据分析时,R 用户如何学习 Python?

  • (责任编辑:ioter)