玩转社区开源贡献,看这篇就够了!
来源 | TensorFlow
本文来自社区投稿与征集。作者唐源,现任蚂蚁集团技术专家,目前专注于建立 AI 基础架构和自动机器学习平台。
本文转自:https://zhuanlan.zhihu.com/p/165098355
作为最早一批非谷歌的 TensorFlow 社区贡献者,同时也是 TensorFlow committer 和 SIG IO maintainer,我将在这篇文章里分享一下自己贡献 TensorFlow 的经历以及一些收获,希望能对大家有启发,鼓励大家一起参与进来。大家如果感兴趣可以去我的 GitHub[1] 查找相关的贡献,以及关注我的 Twitter [2] 来得到第一时间的更新。
参与 TensorFlow 社区进行贡献有多种形式,这里我主要围绕 4 个方面来谈谈我对 TensorFlow 社区的贡献:
贡献 TensorFlow 高阶 API 代码
积极参与 TensorFlow 社区的管理
贡献 TensorFlow 延伸出来的开源项目
传播知识和分享经验
从用户到贡献者
TensorFlow 是在 2015 年年底开源在 GitHub 上的。在这之前我一直在参与贡献 Apache MXNet [3] 的 Scala API,在深度学习系统的设计方面也有了一定经验的积累。那个时候我的日常工作主要是使用 R 和 Python 来实现各种算法,所以 TensorFlow 这种一开始就比较注重 Python 的框架一下子就吸引到了我们团队的注意力,我也开始利用业余时间尝试使用 TensorFlow 搭建一些简单的神经网络以及传统的机器学习算法。
当时在早期的 TensorFlow 版本中都是需要对低阶的 API 有深度的理解才能实现这些。数据科学从事者没有必要为了使用最新的算法和技术花许多时间来学习这些实现的细节,通过这一套高阶的 API,他们可以很快地直接将这些使用在工作和研究中。当时作为数据科学从事者的一员,我看到了这一块的需求,即使自己比较熟悉 TensorFlow 也仍然感到实现算法特别繁琐。
不久后,tensorflow/skflow (Scikit Flow) [4] 开源了,这是当时谷歌工程师 Illia Polosukhin 最早在谷歌内部创立的项目,这个项目的目的是降低大家使用分布式机器学习和深度学习的门槛,让大家可以像使用 Scikit-learn 那样快速地搭建自己的机器学习和深度学习模型,用仅仅几行代码就能使用 TensorFlow 实现的深度学习算法,甚至是传统的机器学习算法,比如逻辑回归、随机森林等等。我也作为种子用户开始试用,发现很多的功能还不成熟,也缺少很多实用的 API,于是我在项目很早期的时候就开始参与贡献,主要设计和贡献了许多新的 API 来提升用户体验。
获得支持和认可
当然,TensorFlow 团队也逐渐意识到了高阶 API 对社区用户的重要性。在他们的支持下,我们把 Scikit Flow 贡献到了 tf.estimator 模块 [5],TensorFlow 团队也开始积极地参与进来,改进了很多分布式训练的逻辑,添加了 feature_column、layers 等新的模块。为了能够更好地和 TensorFlow 生态融合,他们也在谷歌内部各个项目和场景中开始使用和落地,比如 YouTube Watch Next 的推荐系统。
关于模块的设计和一些经验的分享,可以参考我们在 2017 年 KDD 会议上发表的文章 TensorFlow Estimators: Managing Simplicity vs. Flexibility in High-Level Machine Learning Frameworks [6]。
当时也因为我对 TensorFlow 的贡献,谷歌开源部门在 2016 年颁给了我 Open Source Peer Bonus [7]。这个奖项是由内部员工提名推荐,然后再经过内部审核和讨论得到最后的获奖人名单,我通过持续对 TensorFlow 的贡献吸引到了他们的注意并得到肯定,这在当时对我来说是很大的鼓励和认可。在这里我也鼓励大家重在坚持,相信一切的付出都是值得的。
参与 TensorFlow 社区的管理
TensorFlow 社区现在也分为了很多子项目以及不同的特别兴趣小组 SIGs,比如 SIG IO 维护着 TensorFlow I/O [8] 这个 TensorFlow 子项目,这个项目支持从各种格式以及文件系统(比如 Apache Arrow、Kafka、Alibaba OSS、等等)来读写数据,以供 TensorFlow 模型训练使用。作为 SIG IO 管理者的一员,在这里也邀请大家在使用的同时,有什么问题和想法都可以在社区通过邮件、Gitter、或者 GitHub issues 等不同的形式提出来,贡献不仅仅限于贡献代码,很多时候贡献文档、参与讨论也会给社区带来非常大的帮助。大家可以参考社区 tensorflow/community [9] 里的一些文档了解到不同 SIG 的运作方式积极参与进来。
另外,社区的一些新的 API 提案也会通过 tensorflow/community 里的 Request for Comments (RFC) 的形式公开和社区讨论,举一个近期的例子,谷歌团队以 RFC 的形式提出了在 Keras 里添加 Multihead Attention 和 EinsumDense layers [10],我当时看到了这个提案,第一个反应就很好奇这个和社区 SIG Addons 以及 Keras experimental 里现有的 layers 之间有什么区别和联系,于是在提案底下评论并且邀请了社区几位相关的开发者来一起讨论。
除此之外,社区的不同 SIG 也会定期举办社区会议,感兴趣的开发者可以一起加入讨论遇到的问题,这也会带来潜在的跨公司、跨社区之间的交流与合作等等。
TensorFlow 在 Twitter 上也非常活跃,重要通知以及新颖与优质的案例也会在上面推广,社区的 SIG 管理者也会经常在上面宣布新的版本发布并与社区互动。下图是我们在 Twitter 上宣布 TensorFlow IO v0.11.0 版本发布的一个例子。
贡献开源社区生态
参与 TensorFlow 社区贡献,也不仅仅限于 TensorFlow GitHub 组织下的项目,在这我也简单介绍一下在加入 TensorFlow 社区之后围绕 TensorFlow 生态做的一些工作。
Kubeflow [11] 支持在 Kubernetes 集群上很方便地运行各种机器学习框架,这其中也包括通过 TF Operator [12] 执行 TensorFlow 原生分布式训练、通过 MPI Operator [13] 执行 Horovod 支持的 TensorFlow 分布式训练。
ElasticDL [14] 支持在 Kubernetes 集群上运行 TensorFlow,并且支持容错和弹性调度,提升集群利用率。
和 RStudio 合作的 TensorFlow in R [15],提供了非常友好的 API 让用户能够使用 R 语言来调用 TensorFlow,支持包括所有的低阶 API,也包括 tf.keras、tf.data、tf.estimator 等等。
技术推广和知识传播
由于当时 TensorFlow 刚开源不久,官方文档以及用例还不完善,一些网上的学习资源也都是以英文为主。与国外相比,国内学习条件乃至中文版的学习课程与资源、专业图书、都非常匮乏。
为了帮助更多国内的爱好者学习,让 TensorFlow 能在国内更好地推广,我写了当时第一本 TensorFlow 中文教材《TensorFlow实战》[16],在当时也很荣幸地获得了 Jeff Dean 以及 TensorFlow 团队的推荐,更多的背景可以参考 CSDN 的专访 [17]。
最近我也参与了《动手学深度学习》英文版 [18] 的 TensorFlow 实现,这是一本结合算法、图示和代码的深度学习教材,每个章节就是一个可执行的 Jupyter Notebook,可在本地执行或者 Google Colab 等云上环境运行。目前已经有至少 85 所大学使用它作为教材,包括斯坦福、伯克利、清华、北大、浙大、等等。项目开源在 d2l-ai/d2l-en [19],在这里我也鼓励大家一起参与进来,让有用的知识和技术能够得到更好更快地传播。
写在最后
从个人的角度来说,参与开源能够塑造个人品牌、认识各地的开发者、促进世界范围内的合作、提升个人技术、思考,以及交流能力等等。
从公司的角度来说,参与开源能够提升社区影响力、引导社区发展、提升团队整体能力、避免重造轮子、复用现有技术,以及鼓励创新等等。
我从参与开源软件这个过程中获得了许多帮助,学到了很多,认识了许多志同道合的人,我也希望通过我的贡献来报答社区对我的帮助。我相信付出越多,获得的回报也越多。
作者简介:唐源,现任蚂蚁集团技术专家,目前专注于建立 AI 基础架构和自动机器学习平台。一直积极参与开源软件的开发,是多个开源软件的作者,XGBoost 和 Apache MXNet 的 PMC 成员, 同时也是 TensorFlow、Kubeflow、以及 ElasticDL 的 Committer,著有《TensorFlow实战》。
如果您想详细了解 本文讨论 的相关内容,请参阅以下文档。这些文档深入探讨了这篇文章中提及的许多主题:
[1] GitHub
https://github.com/terrytangyuan[2] Twitter
https://twitter.com/terrytangyuan[3] Apache MXNet
https://github.com/apache/incubator-mxnet[4] Scikit Flow
https://github.com/tensorflow/skflow[5] tf.estimator 模块
https://tensorflow.google.cn/guide/estimator[6]TensorFlow Estimators: Managing Simplicity vs. Flexibility in High-Level Machine Learning Frameworks
https://arxiv.org/abs/1708.02637[7] Open Source Peer Bonus
https://opensource.googleblog.com/2016/09/google-open-source-peer-bonus-program.html[8] TensorFlow I/O
https://github.com/tensorflow/io[9] tensorflow/community
https://github.com/tensorflow/community[10] Multihead Attention 和 EinsumDense layers
https://github.com/tensorflow/community/pull/260/[11] Kubeflow
https://github.com/kubeflow/[12] TF Operator
https://github.com/kubeflow/tf-operator[13] MPI Operator
https://github.com/kubeflow/mpi-operator[14] ElasticDL
https://github.com/sql-machine-learning/elasticdl[15] TensorFlow in R
https://tensorflow.rstudio.com/[16] 《TensorFlow实战》
https://terrytangyuan.github.io/2017/02/12/tensorflow-in-practice-book-chinese/[17] CSDN 的专访
https://terrytangyuan.github.io/2019/12/31/interview-with-csdn-year-end/[18] 《动手学深度学习》英文版
https://www.d2l.ai/[19] d2l-ai/d2l-en
https://github.com/d2l-ai/d2l-en
推荐阅读
一键实现图像、视频卡通化,GAN又进化了
PyTorch 1.6、TensorFlow 2.3、Pandas 1.1同日发布!都有哪些新特性?
Python 还能实现图片去雾?FFA 去雾算法、暗通道去雾算法用起来! | 附代码
程序员必备基础:Git 命令全方位学习
微软直播马上开始,近百岗位等你来,快戳进直播间
相关文章:

grub2 命令行进入系统
有时候grub引导可能出问题,因此我们需要在grub界面利用命令行进入系统。下边就做一个简单的介绍。1、在grub界面,按c进入命令行界面2、命令行输入“ grub>set root(hd ”之后按tab键,查看你的硬盘,hd0表示第一块硬盘…
梯度中心化,一行代码加速训练并提升泛化能力
来源 | 晓飞的算法工程笔记优化器(Optimizer)对于深度神经网络在大型数据集上的训练是十分重要的,如SGD和SGDM,优化器的目标有两个:加速训练过程和提高模型的泛化能力。目前,很多工作研究如何提高如SGD等优化器的性能,…

Microsoft程序员测试题
原创:onefi http://www.frontfree.net/2003年6月1日 最近大家在网站上看到不少Microsoft的测试题,引来不少的眼光。我在这里把所有的测试题加以整理,再附上自己的答案。(个别题目答案有多种,文本仅代表作者的思路&a…

裸centos安装PCRE时报错解决
2019独角兽企业重金招聘Python工程师标准>>> no acceptable C compiler found in $PATH由于没有gcc的编译环境引起的,yum install gcc就ok unrecognized option -DHAVE_CONFIG_H由于没有gcc-c的编译环境引起的,yum -y install gcc-c 转载于:…

mysql删除开放用户权限
来访用户ODBC 1,在本地的cmd中用root用户进入mysql2,创建一个ODBC的用户create user ODBClocalhost;查看用户是否创建成功select user,host from mysql.user;3,将所有的权限开放给ODBC用户grant all on *.* to ODBClocalhost;查看ODBC用户的权限show grants for ODBC localhost…
AI不止能美颜,美妆迁移这样做 | 赠书
本文内容节选自《深度学习之人脸图像处理:核心算法与案例实践》,作者言有三。美颜和美妆是人脸中很常见的技术,在网络直播以及平常的社交生活中都有很多应用场景。本文重点介绍的是人脸妆造迁移的核心技术及其相关资源。想要了解关于深度学习…

ASP.Net中自定义Http处理及应用之HttpModule篇
HttpHandler实现了类似于ISAPI Extention的功能,他处理请求(Request)的信息和发送响应(Response)。HttpHandler功能的实现通过实现IHttpHandler接口来达到。而HttpModule实现了类似于ISAPI Filter的功能。 HttpModule的实现HttpModules实现了类似于ISAPI Filter的功…

未处理的异常导致基于 ASP.NET 的应用程序意外退出
问题具体见:http://q.cnblogs.com/q/34874/ 相应站点的w3wp.exe 会意外终止 EventLog中的信息: An unhandled exception occurred and the process was terminated. Application ID: DefaultDomain Process ID: 43644 Exception: System.Runtime.Seri…

Git 执行更改
Jerry 克隆库,他决定实现基本字符串操作。于是,他创建文件string.c,在添加内容到 string.c 会这个样子。 #include <stdio.h> int my_strlen(char *s) { char *p s; while (*p) p; return (p - s); } int main(void) { int i; char *s…

静态属性和静态方法2 - C++快速入门22
静态属性和静态方法2 让编程改变世界 Change the world by program 静态方法 嗯,还是静态方法?!这阵子有鱼油表示对该方法的特色还是有点云里雾里还有那个神神兮兮的this指针。。。 所以小甲鱼保持务必让你彻底领悟的精神继续和大家探讨&…

浅析.Net共享程序集编程
作者:宋华 赛迪网Net结构里的程序集Assembly是自我描述的安装单元,它在应用程序域(AppDomain)中运行。您必须首先将程序集加载到应用程序域中,然后才能运行该应用程序,并且,同一程序集可以加载到多个应用程序域中&a…
“崩溃!我再也不搞 AI 了”谷歌 AI 专家:别让你的方法打败你!
今天,想跟大家聊聊 Python 人工智能。最近几年,我看过市面上很多 Python和人工智能的教程,基本都是先介绍Python基本语法、dict、tuple 等基本库的使用,最后学习机器学习、深度学习的常用算法......但我与 Google 人工智能开发专家…

Spring MVC 相关资料整理
来源于:http://www.cnblogs.com/ylhssn/p/4062757.html 1、概述 Spring MVC是一种基于Java实现MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行解耦,基于请求-响应模型帮助我们简化日常web系统的…

Wireless-N Configuration
Wireless-N Configuration/Zh CnContents [hide]1 关于Wireless N的一般信息2 基本设置2.1 20 MHz vs 40 MHz2.1.1 2.4GHz频段的描述2.1.2 2.4GHz频段表2.2 无线安全设置2.3 高级设置3 Problems and Resolution3.1 Actual Speeds3.2 Testing3.3 Device Drivers4 Device Specifi…

为.Net程序集添加资源
作者:宋华 本文选自:赛迪网 2002年12月06日 在.Net结构中,程序集Assembly(也称着程序集或托管Dll)是自我描述的安装单元,它可以只包括一个PE(可移植可执行)格式的Dll或exe文件,也可以由多…
这5个 AI 用例,转变了传统商务沟通
作者|Lanre Onibalusi译者 |天道酬勤,责编 | 晋兆雨封图 | CSDN 付费下载自视觉中国很少有人会想到这样一种情景:世界上几乎有一半的国家处于封锁状态(可能长达数周或几个月),并且大多数人的工作能力也受到…

cocos2dx 3.x(动态改变精灵的背景图片)
//更换精灵CCSprite的图片有两种方式。 //直接通过图片更换 //使用setTexture(CCTexture2D*)函数,可以重新设置精灵类的纹理图片。 // auto bg Sprite::create(); Texture2D* texture Director::getInstance()->getTextureCache()->addImage("bg2.png&…

如何在.NET中创建服务型组件
作者:张劲松 本文选自:赛迪网 2002年12月03日 对于在WINDOWS上作过一些开发的程序员来说,COM+应该是不会感到陌生的吧。COM+代表了Microsoft在COM技术平台上的最高水平,也是Microsoft藉以和J2EE抗衡的…

flex viewstack的简单应用
1 Flex API里面介绍viewstack: MX ViewStack 导航器容器由一组彼此上下堆叠的子容器组成,其中一次只可以显示一个子容器。选择另一个子容器后,它将显示在原来子容器的位置处,所以看起来好像此子容器替换了原来的子容器。…
在线等:“实习拿到两个不太好的offer,去腾讯还是去阿里?”
“你永远都不知道明天和‘公司的意外’哪个先来。”疫情期间,这是我们最战战兢兢的心情。但是显然,有些人体会不了。这份行业数据,让笔者“柠檬”了。1疫情下,有的公司宣布破产有的公司增长413%疫情期间,人工智能的价值…

如何成功地在亚洲植入敏捷和DevOps
\关键要点\\首先要植入西方文化的要素。\\t使用价值流映射有助于打破文化障碍。\\t让上层管理者参与进来。\\t黑客节(Hackfest)将有助于减少前置期时间。\\t理解文化差异的影响。\\\我读过的一篇文章说Scrum并不适合于亚洲。作者所说的非常正确ÿ…

浅析.Net下的AppDomain编程
作者:宋华 发文时间:2002 我们知道,进程是操作系统用于隔离众多正在运行的应用程序的机制。在.Net之前,每一个应用程序被加载到单独的进程中,并为该进程指定私有的虚拟内存。进程不能直接访问物理内存&…
AI 医生正式上岗了?AI 医疗结合迎爆发点!
作者 | 硬核云顶宫责编 | 晋兆雨封图 | CSDN 付费下载自视觉中国这些年,人工智能应用于医学界是非常热的话题。在医学三大杂志——新英格兰医学杂志、柳叶刀、JAMA上,AI与医疗相结合的论文,占比越来越高。其中最明显的趋势是将医生从繁重的诊…

Android之解析Android Map地图返回的Json数据
先上一下需要解析的Json数据:{"results" : [{"address_components" : [{"long_name" : "荔湾区","short_name" : "荔湾区","types" : [ "sublocality", "political" ]}…

9成P2P平台面临出局,千亿资本何去何从?
【阅读原文】作者:楠沨据研究院数据中心统计,截至2016年10月底,我国 P2P贷款余额已经攀升至7,470亿元左右,环比增长6.0%。进入10月份百强榜的平台,其贷款余额总计3,275亿元,占到整个行业的44%;榜…
关于Transformer,那些的你不知道的事
作者 | 小莫来源 | 阿泽的学习笔记(ID: aze_learning)引言本博客主要是本人在学习 Transformer 时的「所遇、所思、所解」,通过以 「十六连弹」 的方式帮助大家更好的理解该问题。十六连弹为什么要有 Transformer?Transformer 作用是什么&am…

用ASP.NET上传大文件
作者:思归 微软MVP http://blog.joycode.com/saucer/我们在上传大文件时都遇到过这样或那样的问题。设置很大的maxRequestLength值并不能完全解决问题,因为ASP.NET会block直到把整个文件载入内存后,再加以处理。实际上,如果…

中国最齐全的主要电子商务网站(B2C)
中国最齐全的主要电子商务网站(B2C)------[连载之电子商务网站架构]访问量超过100万的电子商务网站技术架构版本:V1出处:http://jimmyli.blog.51cto.com/ 我站在巨人肩膀上Jimmy Li作者:Jimmy Li关键词:中国 电子商务 网站 B2C连接…

怎么安装MYSQL5.0的JDBC驱动
1、下载mysql for jdbc driver. http://dev.mysql.com/downloads/connector/j/3.1.htmlMySQL Connector/J is distributed as a .zip or .tar.gz archive containing the sources and class files as well as a class-file only "binary" .jar archive named "…

ASP.NET中的事务处理和异常处理
刘彦青编译 来自:yesky 使用SQL-Transaction类和.NET提供的异常处理机制,我们就能够以一种可靠的方式处理数据库运行中的问题和发现系统异常。这篇小文章将解释事务处理和异常处理的概念和用法。 什么是事务? 事务处理是由以一个单一的…