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》:
https://www.leiphone.com/news/201806/5PYJx9sVJDURvwpj.html
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 項目地址:
https://github.com/XiaoMi/mace-models

其它開源內容
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
https://pegasus-kv.github.io/overview/
來源 | 雷鋒網
作者 | 楊鯉萍