18.6 机器翻译系统的部署 619
18.6 机器翻译系统的部署
除了在一些离线设备上使用机器翻译,更多时候机器翻译系统会部署在运算能
力较强的服务器上。一方面随着神经机器翻译的大规模应用,在 GPU 服务器上部署
机器翻译系统已经成为了常态。另一方面,GPU 服务器的成本较高,而且很多应用
中需要同时部署多个语言方向的系统。这时如何充分利用设备以满足大规模的翻译
需求就成为了不可回避的问题。机器翻译系统的部署,有几个方向值得尝试:
• 对于多语言翻译的场景,使用多语言单模型翻译系统是一种很好的选择(第十
六章)。当多个语种的数据量有限、使用频度不高时,这种方法可以很有效地
解决翻译需求中的长尾。例如,一些线上机器翻译服务已经支持超过 100 种语
言的翻译,其中大部分语言之间的翻译需求是相对低频的,因此使用同一个模
型进行翻译可以大大节约部署和运维的成本。
• 使用基于枢轴语言的翻译也可以有效的解决多语言翻译问题(第十六章)。这
种方法同时适合统计机器翻译和神经机器翻译,因此很早就使用在大规模机器
翻译部署中。
• GPU 部署中,由于 GPU 成本较高,因此可以考虑在单个 GPU 设备上部署多套
不同的系统。如果这些系统之间的并发不频繁,翻译延时不会有明显增加。这
种多个模型共享一个设备的方法比较适合翻译请求相对低频但是翻译任务又
很多样的情况。
• 机器翻译的大规模 GPU 部署对显存的使用也很严格。由于 GPU 显存较为有限,
因此模型运行的显存消耗也是需要考虑的。一般来说,除了对模型进行压缩和
结构优化之外(第十四章和第十五章),也需要对模型的显存分配和使用进行
单独的优化。例如,使用显存池来缓解频繁申请和释放显存空间造成的延时。
另外,也可以尽可能让同一个显存块保存生命期不重叠的数据,避免重复开辟
新的存储空间。图18.4展示了一个显存复用的示例。
• 在翻译请求高并发的场景中,使用批量翻译也是有效利用 GPU 设备的方式。不
过,机器翻译是一个处理不定长序列的任务,输入的句子长度差异较大。而且,
由于译文长度无法预知,进一步增加了不同长度的句子所消耗计算资源的不确
定性。这时,可以让长度相近的句子在一个批次里处理,减小由于句子长度不
统一造成的补全过多、设备利用率低的问题。例如,可以按输入句子长度范围
分组,也可以设计更加细致的方法对句子进行分组,以最大化批量翻译中设备
的利用率
[1193]
。
除了上述问题,如何对多设备环境下进行负载均衡、容灾处理等都是大规模机
器翻译系统部署中需要考虑的。有时候,甚至统计机器翻译系统也可以与神经机器
翻译系统混合使用。由于统计机器翻译系统对 GPU 资源的要求较低,纯 CPU 部署
的方案也相对成熟。因此,可以作为 GPU 机器翻译服务的灾备。此外,在有些任务,