18.5 小设备机器翻译 617
18.5 小设备机器翻译
在机器翻译研究中,一般会假设计算资源是充足的。但是,在很多应用场景中,
机器翻译使用的计算资源非常有限,比如,一些离线设备上没有 GPU,而且 CPU 的
处理能力也很弱,甚至内存也非常有限。这时,让模型变得更小、系统变得更快就成
为了重要的需求。
本书中已经讨论了大量的可用于小设备上的机器翻译技术方法,例如:
• 知识蒸馏(第十三章)。这种方法可以有效地将翻译能力从大模型迁移到小模
型。
• 低精度存储及计算(第十四章)。可以使用量化的方式将模型压缩,同时整型
计算也非常适合在 CPU 等设备上执行。
• 轻量模型结构(第十四章和第十五章)。对机器翻译模型的局部结构进行优化
也是非常有效的手段,比如,使用更加轻量的卷积计算模块,或者使用深编码
器-浅解码器等高效的结构。
• 面向设备的模型结构学习(第十五章)。可以把设备的存储及延时作为目标函
数的一部分,自动搜索高效的翻译模型结构。
• 动态适应性模型
[769, 1191, 1192]
。模型可以动态调整大小或者计算规模,以达到在不
同设备上平衡延时和精度的目的。比如,可以根据延时的要求,动态生成合适
深度的神经网络进行翻译。
此外,机器翻译系统的工程实现方式也是十分重要的,例如,编译器的选择、底
层线性代数库的选择等等。有时候,使用与运行设备相匹配的编译器,会带来明显的
性能提升
1
。如果希望追求更加极致的性能,甚至需要对一些热点模块进行修改。例
如,在神经机器翻译中,矩阵乘法就是一个非常耗时的部分。但是这部分计算又与
设备、矩阵的形状有很大关系。对于不同设备,根据不同的矩阵形状可以设计相应
的矩阵乘法算法。不过,这部分工作对系统开发和硬件指令的使用水平要求较高。
另外,在很多系统中,机器翻译模块并不是单独执行,而是与其它的模块并发
执行。这时,由于多个计算密集型任务存在竞争,处理器要进行更多的上下文切换,
会造成程序变慢。比如,机器翻译和语音识别两个模块一起运行时
2
,机器翻译的速
度会有较明显的下降。对于这种情况,需要设计更好的调度机制。因此在一些同时
具有 CPU 和 GPU 的设备上,可以考虑合理调度 CPU 和 GPU 的资源,增加两种设备
可并行处理的内容,避免在某个处理器上的拥塞。
除了运行速度,模型过大也是限制其在小设备上运行的因素。在模型体积上,神
经机器翻译模型具有天然的优势。因此,在对模型规模有苛刻要求的场景中,神经
1
以神经机器翻译为例,张量计算部分大多使用 C++ 等语言编写,因此编译器与设备的适配程度对
程序的执行效率影响很大。
2
在一些语音翻译场景中,由于采用了语音识别和翻译异步执行的方式,两个程序可能会并发。