多项创新技术加持,实现零COGS的Microsoft Editor语法检查器( 三 )


ONNX 加速语法检查器
ONNX是微软开发的高性能引擎 , 它可在各种硬件平台上加速人工智能模型 。许多基于机器学习的微软产品都利用 ONNX来加速推理性能 。为了进一步降低推理延迟 , ORT 团队的研发人员们首先将版的语法检查器 , 通过 -ONNX 导出器导出为 ONNX 格式 , 再使用 ONNX进行推理 。ONNX支持的特定优化以及 INT8 量化 , 这不仅实现了在 CPU 上的性能加速 , 同时还可以缩减模型大小 。该端到端解决方案使用了多项前沿技术 , 以实现高效地运行这个先进的语法检查器模型 。
ONNX是一个具有很好延展性的跨硬件模型加速引擎 , 可以支持不同的应用场景 。为了最高效运行这一创新解码算法 , 我们对导出器和 ONNX做了一系列提升 , 最终让这一先进的语法检查器模型以最高性能运行 。
—— 宁琼 , 微软首席产品主管
提供了一个内置函数 , 可以轻松地将模型导出为 ONNX 格式 。为了支持语法检查模型的独特架构 , 研发人员们在导出器里实现了复杂嵌套控制流导出到 ONNX , 并扩展了官方 ONNX 规范来支持序列数据类型和运算符 , 以表示更复杂的场景 , 例如自回归搜索算法 。这样就不需要单独导出模型编码器和解码器组件 , 再使用序列生成逻辑将它们串联在一起 。由于 -ONNX 导出器和 ONNX支持序列数据类型和运算符 , 所以原模型可以导出成单一的一个包括编码器、解码器和序列生成的 ONNX 模型 , 这既带来了高效的计算 , 又简化了推理逻辑 。此外 ,  ONNX 导出器的 shape type组件也得到了增强 , 从而可以得到符合更严格的 ONNX shape type 约束下的有效的 ONNX 模型 。
在语法检查器模型中引入的算法最初是在中实现的 。为了使其与 ONNX 兼容以便于导出 , 研发人员们在中重新实现了算法 。在深入实施时 , 研发人员们发现 ONNX 标准运算符集不直接支持某些组件(例如分叉检测器) 。目前有两种方法可以将不支持的运算符导出到 ONNX 并在 ONNX中运行:1. 利用 ONNX 已有的基本运算符组建一个具有等效语义的图;2. 在 ONNX中实现一个更高效的自定义运算符 。ONNX自定义运算符功能允许用户实现自己的运算符 , 以便灵活地在 ONNX中运行 。用户可以权衡实现成本和推理性能来选择合适的方法 。考虑到本模型组件的复杂性 , 标准 ONNX 运算符的组合可能会带来性能瓶颈 。因此 , 研发人员们选择在 ONNX中实现自定义运算符 。
ONNX支持的优化和量化 , 这在 CPU 和 GPU 上都能提升性能 。此外 , ONNX针对语法检查器模型进一步增强了编码器以及解码器图算融合 。支持该模型的另一大挑战是多个模型子图 , 而 ONNX优化器和量化工具对此也实现了子图融合 。ONNX量化压缩已被应用于整个模型 , 进一步改善了吞吐量和延迟 。
GPT-3.5助力模型实现质的飞跃
为了进一步提高生产中模型的精度和召回率 , 研究员们使用了强大的 GPT-3.5 作为教师模型 。具体而言 , GPT-3.5 模型通过以下两种方式来帮助提高结果:
:用于客户端建模的成本效益参数化
近年来 , 客户端设备的计算能力大大增加 , 使得利用深度神经网络来实现最终的零销货成本成为可能 。然而 , 在这些设备上运行生成式语言模型仍然是一个很大的挑战 , 因为这些模型的内存效率必须受到严格的控制 。在涉及生成式语言模型时 , 自然语言理解中用于神经网络的传统压缩方法往往不适用 。