请选择 进入手机版 | 继续访问电脑版
Mozilla

火狐社区

登录    注册

用新浪微博连接 QQ互联

Snips 以 Rust 打造嵌入式语音助理

yingliu Mozilla员工 发表于 2018-3-13 11:40:06 | 显示全部楼层 [复制链接]
4 3219
本帖最后由 yingliu 于 2018-3-13 11:42 编辑

9BcdOilSmsh.png

法国人工智能创新公司 Snips 设计出一款语音助理程序。这套程序可以嵌入单一设备,或应用在家庭网络中来调控光线、温度、音乐等不同环境条件。你可以使用 Raspberry Pi 打造智能家庭控制系统(home hub),要它提供天气预报、播放歌曲或煮上一杯香浓的意式咖啡。此技术已引起一些制造业者的注意,如 Keecker 正着手把 Snips 的方案加入多媒体家用机器人等产品中。Snips 的合作对象还包括产业价值链中的领导厂商,包括:NVIDIA、EBV 和 Analog Devices,以将语音能力融入音响设备、家用自动化系统、汽车等越来越多的设备中。

Snips 语音助理解决方案可在单一设备上执行完整的程序代码库(code base),即使没有网络联机时也可以运作,所以很与众不同。Snips 的软件堆栈包含唤醒词(“Hey Snips”)、应用逻辑、语音识别引擎及语言理解模块。

相较之下,Amazon Echo 和 Google Home 则只会执行唤醒词的程序代码,并须靠云端平台来接收问题及产生响应。这种模式能让厂商收集用户的语音数据,所以也引发一些隐私安全疑虑。

Snips 把语音助理程序嵌入设备的秘诀是什么?就是用 Rust 系统语言写程序。

Rust 是由 Mozilla 建立的快速高效的开源系统程序语言。自从在2015 年 5 月发布第一个稳定版本后,Rust 已获越来越多企业采用并打造商业软件,特别是最尖端的产品。

Rust 的高明之处在于它结合了不同语言的属性,所以才能提供高性能却只占极少内存,同时还能保障内存安全性并支持跨平台编译。这也使它成为 Snips 的最佳选择,既能把程序代码嵌入各种不同设备中,并只占用少量内存与运算资源。

为何要用 Rust

Snips 首席工程师 Mathieu Poumeyrol 在上一份工作时曾用过 Rust 写多平台的程序。他利用 Rust 的跨平台编译功能,省下针对不同平台写程序的麻烦。使用 Rust, 他只要写一次程序后进行转译,程序代码就能在不同机器上执行,节省了好几天或几周的重复作业时间。

因为有过那次经验,在开发之初,Poumeyrol 便在 Snips 内部大力倡导采用 Rust。Rust 符合 Snips 的要求——高效率、可移植性和安全性;而且,它还能提供很高的性能,即使在小型设备上也跑得飞快。

Poumeyrol 说:「那时,Snips 在移动和后台系统的开发工作已经使用非常现代的语言,如 Swift、Kotlin 和 Scala。那让我们的工程师比较有意愿尝试 Rust。」

经过进一步研究后,Snips 的技术团队认为 Rust 确实颇为理想。「于是,我们在 2016 年决定全面使用 Rust」,该公司技术总监 Joseph Dureau 表示:「我们非常庆幸当初做出那个决定。」

性能与可移植性

本来,Snips 工程团队手上有个大难题:该如何把语音助理程序嵌入到所有客户的连网设备上,确保它跑得安全快速,还不受设备操作系统和架构所限呢?

他们在 Rust 身上找到解答。Rust 具备几大优点:C/C++ 等低级语言的高性能、把程序代码转到新平台的功能,以及专为加强安全所设计的内存安全功能(程序代码在连网设备上执行时也不成问题)。(请看2016 年 Crock Pot 遭黑客入侵的报道

性能Rust 程序快速高效,就算在资源有限的设备上运行,也不致降低性能。Poumeyrol 说,Rust 一方面采用和 C++ 语言一样的零成本抽象(zero-cost abstraction)原则,另一方面也提供和 garbage collection 功能的语言一样的安全层级。它能在不消耗运行时间性能的情况下支持高阶功能,而这正是 Snips 需要的。

可移植性通过 Rust 的编译程序 rustc,Snips 的工程师只需写一次程序,就能把程序转译到不同设备上。因为 Snips 每隔几周就得新增支持设备平台,所以这一点格外重要。rustc 采用 LLVM 作为编译程序的后端。LLVM 是经过验证的编译程序框架,能让程序设计人员进行跨平台编译,以支持绝大多数的现代硬件架构,包括移动设备、桌面计算机和服务器等等。

Dureau 指出:「我们必须只写一次程序,然后快速安全地在许多平台上执行程序代码。只要是嵌入式语音助理的程序,我们都是用 Rust 开发。」

安全性归功于 Rust 独特的「所有权」(ownership)模式,编译好的程序代码不仅安全性高于 C/C++,日后维护起来也更容易。Rust 运用所有权、转移(move)和借用(borrow)等概念来追踪内存资源,以确保它们被正确使用。

Rust 是这样保障内存安全的:程序人员写好一个新程序代码后,以编译程序来编译,rustc 会检查程序有无错误。如果它发现程序代码没有正确处理内存资源,则编译的步骤无法完成。这个内存安全性不够高的程序代码将难以放到生产环境执行。rustc 还有另一个功能:针对程序错误提供警示,以及建议修复方式(如果可能的话)。这可以省下大笔时间,并让新手程序员有机会从中学习,同时也降低产生安全弱点的风险。

Poumeyrol 对 rustc 赞誉有加:「编译时,它可以确保资源管理有效完成,以免等到 runtime 时才发现问题」。

快速的开发周期

有了 Rust 帮忙,Snips 的技术团队以破纪录的时间完成语音平台的开发:在不到一年的时间内写好程序,并让语音助理程序运用到生产环境。

开发脚步这么快,这都归功于 Rust 的内存安全功能。开发者运用 Rust 编译程序的反馈,快速发现和解决程序缺陷。由于早期修复缺陷变得更容易(而不必等到执行后才处理),所以那些前期的修复有效缩短了开发周期。另外,QA 速度也加快了,让 Snips 得以更快推出新功能上线。

目前,Snips 的解决方案支持十多个设备平台,包括 Raspberry Pi 3、DragonBoard、Sagemcom、Jetson TX2、IMX.8M 等等。Snips 还能轻松地继续扩大 Rust 的支持范围,因为他们可以重复使用同一套程序代码库,而不必为各个架构一一定制设计。

学写 Rust

Snips 现在所有的嵌入式程序代码都是用 Rust 写的。Poumeyrol 已训练该公司的嵌入式软件工程师及许多机器学习科学家学会 Rust 语言。在比较了解 Rust 后,他们最常参考的是由开源 Rust 专案于线上发表的《Rust 程序设计语言》(The Rust Programming Language Book)(第二版)

Poumeyrol 说,训练过程进行得很顺利也很快。受训的工程师彼此分享经验,慢慢的,整个嵌入式软件工程团队都非常积极主动地学习。

Poumeyrol 表示:「Rust 是切合时代需求的语言,只要尝试过这些现代语言后,就很难再适应 C 或 C++ ,因为你会非常想念 Rust 的可移植性和效率。」他进一步说,越来越多软件工程师和机器学习专家把 Rust 视为解决程序设计老问题的常用工具,Rust 正在更多领域获得更多人采用。


挽尊小优优 小狐狸
发表于 2018-3-14 00:20:31 | 显示全部楼层
Moz大法好!
隐元 老狐狸
发表于 2018-3-14 07:16:48 | 显示全部楼层
mozilla执掌最先进的编程语言rust!
FlamingFox 狐狸精
发表于 2018-3-18 15:54:52 | 显示全部楼层
超级强大的mozilla!!
310971373 狐狸精
发表于 2018-3-22 20:49:17 | 显示全部楼层
建议出一套Rust的深度教程,方便大家学习。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表