雷锋网 AI 开发者:2019 年 11 月 19 日,小米开发者大会(MIDC,MI Developer Conference)在北京举行,1 场主论坛+12 场分论坛,将呈现 AIoT+5G 等主题为「智能新时代」的多个领域最新技术;同时,这也是一场开源盛会。
大会现场,小米集团副总裁、技术委员会主席崔宝秋不仅正式发布了支持更丰富的异构计算算子、降低跨设备运行性能损失的自研移动端深度学习框架 MACE 0.12.0 升级版;也发布了小米自用 NLP 技术 MiNLP 1.2;还宣布了 Pegasus 1.12 已在 GitHub 上线的消息。因此,雷锋网(公众号:雷锋网) AI 开发者将开源内容整理编辑如下。
更丰富算子,更低性能损失
据了解,MACE 是专门为移动设备优化的深度学习模型预测框架,MACE 提供工具和文档,帮助用户将深度学习模型部署到移动电话、平板电脑、个人电脑和物联网设备上。
通过这一框架,小米可在移动端布局各类深度学习应用和算法,包括计算机视觉、语音识别等。据小米不完全统计,MACE 每天被调用 5000 万次。
MACE 从设计之初,便针对移动设备的特点进行了专门的优化,例如:
-
速度 在框架底层,针对 ARM CPU 进行了 NEON 指令级优化,针对移动端 GPU,实现了高效的 OpenCL 内核代码。针对高通 DSP,集成了 nnlib 计算库进行 HVX 加速。同时在算法层面,采用 Winograd 算法对卷积进行加速,从而契合在移动端进行计算的模型整体所需的预测延迟高要求。
-
功耗 框架针对 ARM 处理器的 big.LITTLE 架构,提供了高性能,低功耗等多种组合配置。针对 Adreno GPU,提供了不同的功耗性能选项,使得开发者能够对性能和功耗进行灵活的调整,从而解决移动端对功耗非常敏感这一问题。
-
系统响应 对于 GPU 计算模式,框架底层对 OpenCL 内核自适应的进行分拆调度,保证 GPU 渲染任务能够更好的进行抢占调度,从而保证系统的流畅度。
-
内存占用 通过对模型的算子进行依赖分析,引入内存复用技术,大大减少内存的占用。
更多详细可参考《小米开源自研移动端深度学习框架MACE》:
MACE 计算框架的整体结构
而现在,MACE 支持的应用场景大大增多,包括:AI 单摄、图片风格化、场景识别、图像超分辨率、翻译以及语音等。它针对移动芯片特性进行了大量优化,目前在小米手机上的人像模式、场景识别功能中已广泛应用。
用 MACE Model Zoo 中的 fast style transfer 模型在手机端生成的风格化图片
这次的升级,MACE 0.12.0 主要从以下四个方面入手,使其在实际应用中有了更大优势:
-
更丰富的异构计算算子
-
降低跨设备运行性能损失
-
新增 Kaldi 语音识别算子支持
-
新增 CMake 支持
其中,框架已支持的语音识别系统 Kaldi 是由 Daniel Povey(日前刚出任小米集团语音首席科学家)主导开发的开源语音识别系统,在众多语音识别测试和应用中有广泛的使用。
据介绍,MACE 已经支持大部分 Kaldi 系统内组件,以及 ONNX 形式的的 Kaldi 模型。此外,项目还提供了 Kaldi-onnx 转换工具。
值得注意的是,小米也在大会上公布了 MACE 近期(未来一两个月)的规划:
-
一是即将开源 MACE-Kit(人脸检测、人脸识别、语音识别、目标检测端到端 SDK);
-
二是新增微控制器支持(全面支持手机与 IoT 设备超低功耗推理场景);
崔宝秋也表示,在未来小米将继续加大在 Kaldi 上的投入,帮助打造一个国际化的开源社区,进一步引领开源的语音识别技术。
Github 地址:
https://github.com/XiaoMi/mace
文档地址:
https://mace.readthedocs.io/en/latest/
MACE Model Zoo 项目地址:
其它开源内容
MiNLP 1.2
今年年初,小米 MiNLP1.0 正式发布,该平台是小米基于声学自主深耕平台,在小米开发者大会上,崔宝秋表示小米 MiNLP 平台每天调用次数达到 60 亿次,然后正式发布 MiNLP 1.2。
新版 MiNLP 1.2 平台相较之前主要有两个重大更新:
-
调用模式从本地调用到支持云端、本地、移动端三端调用;
-
分析功能从词法分析拓展到句法和语义分析;
另外,新版平台也可以吸收和集成当前的前沿进展,并进行技术创新;同时,新版平台所支持的业务也进行了全面拓展,目前可支持公司的多项业务。
Pegasus 1.12
Pegasus 是一个分布式 Key-Value 存储系统,最初是用于弥补 HBase 在可用性和性能上的不足。
Pegasus 系统的 Server 端完全采用 C++ 语言开发,从而避免了使用 Java 所带来的 GC 影响和虚拟机开销;同时,它也使用了 PacificA 协议支持强一致性,使用了 RocksDB 作为单机存储引擎。由于不依赖外部文件系统,Pegasus 的 IO 路径更短,延迟通常更加稳定可控。
模型设计上,Pegasus 则采用了哈希分片进行数据的拆分,分片(Partition)是系统内部数据迁移的最小单元,每一分片内的数据有序存储,各个分片之间数据隔离,每个分片对应一个单独的 RocksDB 实例。
它也可看做是 HBase 和 Redis 的结合体,保证了高的可用度,也具有好的伸缩性。如果业务对性能的要求不是太高(譬如 P99 要求在 1 毫秒以内),那么 Pegasus 将是个不错的选择。
对于升级后的 Pegasus 1.12,其性能变化主要有三点,包括:
-
提供 HTTP 接口,以获取集群元信息;
-
提供更好的多租户支持能力;
-
支持接入 Prometheus 监控系统;
目前,Pegasus 1.12 则在提供一系列丰富的功能支持,如:快照冷备份、表的软删除、表级写限流等的基础上,有了更完善的高可用、高性能、强一致、易伸缩等性能。
Pegasus 1.12 Github 地址:
https://github.com/XiaoMi/pegasus
更多关于 Pegasus
雷锋网 AI 开发者
。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/137436.html