在2018小米AIoT开发者大会上,小米举办了第一届开源技术峰会,并对小米开源历路及开源能力进行了详细解析。
2012年,小米迎来一位小米技术团队的支柱人物,也就是现在小米人工智能与云平台副总裁崔宝秋。随之而来的除了人尽皆知的AI,还有开源。
2012年7月,统一Hadoop集群,打通数据孤岛;
2012年10月,选型HBase,组建团队;
2013年12月,推出第一个HBase Committer;
2014年8月,正式成立小米开源委员会;
2015年5月,小米开源Open-Falcon;
2017年10月,小米开源Pegasus;
2018年6月,小米开源MACE。
为什么要拥抱开源?
崔宝秋表示,“我在打造小米人工智能与云平台团队时,一直以硅谷的创业公司、互联网公司的风格来打造,团队文化包括多个元素,其中一个非常重要的元素就是「开源」。”
为什么要拥抱开源?对公司来讲,拥抱开源有很多优势,主要包括以下几方面:
- 站在巨人的肩膀上。现在诸多大数据、人工智能、云计算技术开源已经成为标准,没必要再单写Hadoop;
- 提高工程师编程能力。一个工程师代码水平编程能力很好的方法就是读大量代码,大量的开源代码可以迅速提升工程师工程水平,也可以提升工程师文化,让大家喜欢技术、喜欢开放;
- 代码质量/工程文化的提升。开源软件可以提升工程师对编程的热爱,对代码质量的苛求;
- 吸引人才,构建人才库。一个公司拥抱开源,崇尚开源文化,可以吸引很多工程师来加入你的公司。
小米的开源之路
整个开源体系中,现在存在三种力量:个人爱好者、无开源商业模式组织、有开源商业模式组织。崔宝秋表示,小米属于第二类——无开源商业模式组织。
其中,区别于无开源商业模式组织,有开源商业模式组织的「开源」并不是「免费」的。诸如IBM、华为等公司在开源上的投入很多,但是有开源商业模式组织最终目的是从底层软硬件、应用层到云服务向其客户提供一整套解决方案。
小米属于无开源商业模式组织,另外,还包括诸多高校、科研机构,以及其他公司。
从2012年开始,小米开始正式涉足开源。
2012年7月开始做这个事情,到后来很快内部讨论选HBbase,开始大力投入,2013年我们自己在Hadoop上推出了自己的Minos,之后逐渐推出自己的其他一些围绕Hadoop的自研软件系统。到2014年8月,为了整合公司开源方面的资源,正式成立了开源委员会;再之后,当HBase满足不了我们需求时,我们开始自研Key-Value系统Pegasus。在AI时代,我们去年开始自研移动端深度学习框架 MACE,并在今年对外发布开源,也是我们开源的一个重大项目。
小米最初在做开源时,制定了五条开源战略,即「快、不重造轮子、不用则已 要用则精、永抱开放和共享的心态、极力推出自己的committer」,这些战略,至今仍然适用。
崔宝秋认为,「不用则已,要用则精」是国内诸多公司经常忽略的一点,即没有用精。其实,很多公司对开源不信任的原因之一是没有搞定,只拿来用,用的很不舒服,没碰到真正困难的时候一切都好,一旦上线、集群大小不够、一扩容发现出了问题,主要原因在于没有深度掌握,没有用精。
小米在开源的贡献
小米从2012年正式跨入开源,至今已有6年之久,6年之内,小米在拥抱开源的同时,也为整个开源生态做了很多事情。以HBase为例,小米在过去几年,一共推出了8个Committer,2个PMC Members。2018年,小米为HBase贡献了306个patch,占整体patch贡献值的23%,全球其他厂商一共贡献了1010个patch。崔宝秋在论坛上表示,“自从我们参与了HBase项目,这个项目的负责人多次表示,小米现在已经成为社区最活跃、力量最强的一支队伍。”
五六年前,小米当时与Facebook的团队交流时发现,他们做了很多事情,也犯了一些错误,他们没有想到的是,Facebook此前遇到的问题,小米也都遇到过,而且我们也解决了问题。所不同的是,小米将相关patch贡献了出去,也得到了开源社区的认可,项目得以不断发展;Facebook的团队没有贡献出去,项目最终反而以失败告终。
开源软件虽好,但并不能解决企业所有需求,这一点,小米也深有体会。性能跟不上、功能跟不上是小米使用开源软件遇到的问题,于是小米开始自研项目。在自研过程中,小米也经历了最初的蜕变。
我们自研项目时,自研一版不行,被我打回去,第二版还不够好,又被打回去,直到最后这个项目能够基本满足我的需求,才开始应用。这一项目就是2015年5月我们对外开源的Open-Falcon。
Open-Falcon是一个企业级、高可用、可扩展的监控系统,该项目的社区运营数据显示,目前,已有200 公司、5000 个人开发者参与到该项目中。
在此之后,小米又投入大量人力、资源到PEGASUS项目中,即强一直分布式Key-Value系统,以及移动端深度学习框架MACE,并相继对外开源。
MACE——移动端神经网络推理引擎
MACE是小米在2017年8月正式立项的移动端神经网络推理引擎,今年2月已经落地手机AI相机,并于今年6月正式对外开源。
MACE支持包括TensorFlow、Caffe等多种训练架构。小米人工智能与云平台AI平台高级软件工程师李寅在大会上表示,“为了适配更多训练框架,小米开始致力于兼容开放标准协议模型,这个开放标准协议是对所有训练框架平台的整合,我们希望所有训练框架都可以统一转到这个开放模型协议上,从而极大地减轻开发者的工作。经过这一层转换,所有移动端的部署和预测直接利用这份统一开放的模型协议就可以统一适配,而不用再去适配不同的开源框架。我们现在已经支持ONNX。”
MACE框架包括四层。最底层是设备芯片层,现在MACE支持三种异构芯片,包括ARM的CPU、GPU,以及高通的Hexajon DSP;其次,小米在芯片之上打造了高效的Kernels,以及针对高通DSP的HexagonNN引擎;然后,又封装了一层解释层,这层解释层可以翻译整个模型本身,将模型翻译成一个高效、可执行的序列,每个执行的算子下放到这些Kernels进行预测;小米希望通过MACE模型转换,将这些模型设计地更轻巧、运算效率更高、适配更好的底层Kernels或者芯片。
MACE最重要的工作就是在不同的芯片和设备上进行Kernels的优化,包括GPU性能优化与自动调优、NEON指令级优化、内存占用优化、模型初始化时间优化,以及模型保护、模型保密、基准测试等。
小米做开源的经验
谈到小米做开源的经验,崔宝秋将其归结为以下几点:
- 长期规划,厚积薄发。对于一个公司来讲,一些决策必须由高层来做,需要长期规划,长期投入的决心也是非常重要的;
- 社区的融合。某个开发者或某个公司很难对社区、对开源软件有影响力,小米推出Committer的一个原因就是希望有一定影响力,即不仅要站在巨人的肩膀上,还要为巨人指路;
什么叫为巨人指方向?开源是一个巨人,每一个开源项目都是一个巨人,社区在推着往前走,谁拥有这个开源项目?没有人,真正健康的一个开源项目是社区的融合,谁来决定它的走向?它的未来?是社区来决定的,即PMC。国内公司经常犯的一个错误是自己玩得很嗨,但是没有放回去,与整个社区的融合很差,因而导致项目不被接受,最终不管好的、或是坏的,全部被社区抛弃。
- 平衡开源与业务上的投入。大量的开源投入对于一个公司而言是很难的,小米的策略是:业务第一,开源第二,以业务为驱动,保障开源上的投入;
- 积极有效回报开源社区。关于这一方面,小米总结了四点:积极交流、参与讨论,清晰描述想法和算法,坚持自己的观点,为自己提交的代码负责;
- 健康的开源模式。自己本地分支要与社区分支结合来做,避免公司为了自己的需求及短期效益而封闭开发,与整个社区渐行渐远;
- AI时代继续拥抱开源。云计算、大数据时代离不开开源,从市场上也可见,目前,几乎所有的AI巨头都在做开源。
最后,谈到开源,崔宝秋表示,“不仅是代码开源、深度学习框架开源,我们还要提倡数据开源。今天大数据在人工智能中扮演着非常重要的角色,大数据包括知识图谱、数据服务、数据模型,这些是我想倡导大家开源的,也是小米在做的事情。”