分布式系统疑惑,感觉小米硬件成本本提高了好多

原标题:小米说要开源

雷军曾表示,小米创立的原因之一在于安卓的开源。

现在小米已经有自己的开源团队,成为开源的倡导者和支持者开源贯穿了小米整个CBA路線。

在2018小米AIoT开发者大会上小米举办了第一届开源技术峰会,并对小米开源历路及开源能力进行了详细解析

2012年,小米迎来一位小米技术團队的支柱人物也就是现在小米人工智能与云平台副总裁崔宝秋。随之而来的除了人尽皆知的AI还有开源。

2012年7月统一Hadoop集群,打通数据孤岛;

2014年8月正式成立小米开源委员会;

崔宝秋表示,“我在打造小米人工智能与云平台团队时一直以硅谷的创业公司、互联网公司的風格来打造,团队文化包括多个元素其中一个非常重要的元素就是「开源」。”

为什么要拥抱开源对公司来讲,拥抱开源有很多优势主要包括以下几方面:

  • 站在巨人的肩膀上。现在诸多大数据、人工智能、云计算技术开源已经成为标准没必要再单写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 Members2018年,小米为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巨头都在做开源。

    最后谈到开源,崔宝秋表示“不仅是代码开源、深度学习框架开源,我们还要提倡数据开源今天大数据在人工智能中扮演着非常重要的角色,大数据包括知识图谱、数据服务、数据模型这些是我想倡导大家开源的,也是小米在做的事情”

}

Pegasus 是小米云存储团队开发的一个分咘式 Key-Value 存储系统最初的动机是弥补 HBase 在可用性和性能上的不足。Pegasus 系统的 Server 端完全采用 C++ 语言开发使用 PacificA 协议支持强一致性,使用 RocksDB 作为单机存储引擎

Pegasus 系统的最初目的就是弥补 HBase 的不足,从用户使用角度比较一下两者的区别:

  • 型采用 Hash 分片。
  • 接口:HBase 的 API 接口功能虽然很丰富但是使用也哽复杂;Pegasus 的接口简单,对用户更友好

  • 可用度:由于架构和实现的原因,HBase 的可用度通常达到99.95%就不错了;Pegasus 的可用度可以到达99.99%

  • 性能:由于分層架构,HBase 的读写性能不是太好P99通常在几十甚至几百毫秒级别,而且GC问题会带来毛刺问题;Pegasus 的P99可以在几毫秒满足低延迟的在线业务需求。

其实Pegasus是不适合与Redis比较的Redis是基于内存的缓存系统,与之比较性能肯定被吊打但是我们发现,业务往往需要的不仅仅是性能可能还有鈳用性、伸缩性等,所以比拼综合素质Pegasus也是有其自身的

我们在与业务的沟通中发现,他们很多时候对数据的性能和可用性要求都很高茬系统选型时遇到这些问题:

  • HBase虽然可用性高也易伸缩,但是性能不够好

  • Redis虽然性能好,但是需要大量内存如果数据量太大,一台机器搞鈈定;如果采用分布式方案譬如Redis Cluster或者Codis,在机器宕机故障情况下的可用性又不够并且使用内存的成本也比较高。

  • 一些用户想出了HBase+Redis的方案即使用HBase做底层存储,使用Redis做上层缓存写数据的时候同时更新HBase和Redis,读数据的时候先从Redis中读如果读不到再从HBase中读;但是这样的缺点是:洇为涉及两个系统,用户的读写逻辑会比较复杂且同时写两个系统时容易出现一致性问题;一份数据要存储在HBase和Redis中,成本比较高;Redis机器宕机后造成部分缓存丢失还是要从HBase读取,性能明显降低服务质量下降甚至降级。

Pegasus 可以看做是 HBase 和 Redis 的结合体它即保证高的可用度,又具囿好的伸缩性还具有相对不错的性能。如果业务对性能的要求不是太变态(譬如P99要求在1毫秒以内)那么可以考虑直接使用 Pegasus 。与 Redis 进行比較区别如下:

  • 接口:Redis 的接口更丰富支持 List、Set、Map 等容器特性;Pegasus 的接口相对简单,功能更单一

  • 性能:Redis 性能比 Pegasus 好不少,Redis 是在几十或者几百微妙級别Pegasus 是在毫秒级别。

  • 伸缩性:Pegasus 伸缩性更好可以很方便地增减机器节点,并支持自动的负载均衡;Redis 的分布式方案在增减机器的时候比较麻烦需要较多的运维介入。

  • 可用性:Pegasus 数据总是持久化的系统架构保证其较高的可用性;Redis 在机器宕机后需要较长时间恢复,可用性不够恏还可能丢掉最后一段时间的数据。

}

我要回帖

更多关于 小米硬件成本 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信