新闻中心

昆仑芯助力vivo语音识别效果与性能提升,携手共建wenet开源生态

芯进展 发布于 2022-11-25 18:30

语音识别是AI领域的一项重要基础服务,同样也是vivo AI体系中举足轻重的能力,是Jovi输入法、Jovi语音助手等应用的基石。打造高准确率、高性能的语音识别引擎,才能给vivo亿级的语音用户带来良好的体验。基于wenet端到端语音识别工具,vivo结合自身业务场景进行深度优化,成功研发离线和流式识别引擎,支撑vivo语音业务的快速发展。

 

 

随着用户量的快速增⻓,语音识别性能问题凸显,CPU推理方案在峰值场景TP99延时较高,且难以满足高算力的业务场景。为确保良好的用户体验、进一步提升产品及服务质量,性能优化、降本增效势在必行。

 

vivo AI工程中心在模型推理加速积累了多年经验,为此自研一套语音识别流式推理引擎。引擎支持动态batching、显存池、数据分桶排序等特性,同时支持CPUGPU,并在GPU上取得了不错的加速效果。

 

昆仑芯科技深耕AI加速领域十余年,专注打造拥有强大通用性、易用性和高性能的通用人工智能芯片,并持续精进在芯片架构、软件栈、工程化系统层级等方面的技术实力。目前,昆仑芯科技已实现两代通用AI芯片产品的量产及落地应用,通过用算力赋能不同场景中的 AI 应用,驱动千行百业的智能化转型。

 

为进一步降本增效以及提升用户体验,vivo AI工程中心同步启动AI多元算力项目,联合昆仑芯科技,在语音识别场景首先展开研发共建,深入合作,并已取得阶段性突破进展。

 

 

vivo 自研语音识别流式推理引擎

 

整个引擎包括四部分:

  1. wenet解码器,包括前端处理(特征、VAD)->encoder->语言模型(wfst)->decoder流程。
  2. 数据调度,动态batching、分桶排序等。
  3. Runtime适配层,抽象模型推理接口,便于适配不同推理后端。
  4. Runtime层,后端推理层包括onnxruntimeGPU、昆仑芯的XpuRT等。

 

 

自研引擎特点:

  • 支持多batch流式请求,多batch能充分发挥硬件计算性能。
  • 动态batchting,根据实际请求会在一定时间自动组装batch,便于提升引擎的并发吞吐能力。
  • 分桶排序,减少多batch的无效padding,减少无效计算量。
  • 显存池,高并发下流式识别缓存会频繁申请和释放,通过显存池优化了这部分开销,提高性能。

 

另外针对语言模型(wfst)优化

  • 语言模型的lattice-faster-decoder过程有千万/秒的小对象内存申请(ForwardLinkBackpointerToken),通过将小对象合并大对象的池化方案,一次wfstsearch14ms减少到5ms
  • 线程模型优化。默认的线程模型是一个会话一个pthread线程,在GPU方案中,每秒数千线程创建系统负载较大,通过将pthread线程优化为bthread
  • 对象复用。将AsrDecoder池化复用,减少内存的动态申请,CPU性能提升27%

 

 

昆仑芯高性能推理库方案

 

AI推理引擎面临的最大技术挑战——同时满足业务快速灵活迭代和硬件高性能。面对该挑战,昆仑芯科技团队为vivo提供了两种解决方案:基于图编译引擎方案和基于高性能推理库方案。综合业务和性能的双重考量,vivo团队最终选择了高性能推理库方案。该方案基于昆仑芯API高性能算子库自研模型推理大算子,主要由EncocerDecoder两个大算子组成。

 

高性能推理库特点:

  • 支持动态shape,性能与静态shape无异,相比静态模拟动态可节省大量宝贵的显存资源。
  • 支持多batch流式推理,解决流式推理一大难题,特别是cache管理。
  • 深度图优化,使用了昆仑芯丰富的图融合优化,如:ffn_kernel_fusionattention_fusion等,可变长优化技术等。
  • 不同量化策略,FP16/INT8动态静态量化以及混合量化。
  • 定制算子融合,如ConforermEncoderRelPos相关计算可以融合为rel_pos_fusion_kernel等。
  • 自动化工具,模型一键导入等。

 

 

性能测试:

 

对比不同后端的性能数据onnxruntime(CPU)GPU165w)、昆仑芯XPU(R200),具体硬件配置如下:

硬件

配置

CPU

2 * Intel(R) Xeon(R) Gold 6330 CPU @ 2.00GHz

内存

512G

显卡

165w GPU

XPU

1 * 昆仑芯AI加速卡R200

 

最大并发数测试

方案

并发路数

onnxruntime(CPU)

350

GPU(165w

1700

昆仑芯AI加速卡R200

1400

 

onnxruntime(CPU)首尾字耗时

并发路数

首字耗时(ms)

尾字耗时(ms)

150

795

74

350

799

82

 

GPU(165w FP16 首尾字耗时

并发路数

首字耗时(ms)

尾字耗时(ms)

250

763

21

600

765

27

800

764

31

1000

779

43

1500

789

58

1700

795

70

 

昆仑芯AI加速卡R200 FP16 首尾字耗时

并发路数

首字耗时(ms)

尾字耗时(ms)

250

772

27

600

781

27

800

787

59

1000

788

65

1400

799

81

 

整体来看,在FP16量化后不同后端均达到精度无损,昆仑芯高性能推理库方案单卡并发达到了1400路,相比CPU350路的最大并发,性能提升约4倍,首字和尾字耗时也大大降低,降本增效明显。单机单卡的测试外,也进行了单机4卡的压测,单机4GPU165w)和4R200均达到了4000路并发。

 

相对主流 165w GPU,昆仑芯语音识别高性能推理库方案通过构建大算子的方式也为业务根据自身特性做针对性融合、量化、裁剪提供了更加便捷、更加有用的工具。

 

 

昆仑芯在wenet 中开源 XPU 支持

 

wenet是国内最大的语音开源社区,致力于推动语音技术落地,共创共赢昆仑芯2 AI 芯片是wenet中支持的首款新型异构AI推理芯片,基于昆仑芯第2代推理卡模型推理采用语音高性能推理库的非流式解码方案,目前源码已合入到wenet主线。第二阶段,昆仑芯科技、vivowenet社区三方联手,将共同推出图引擎和高性能库两种后端推理,支持多batch流式解码,模型优化到部署端到端的解决方案,为客户业务落地持续赋能。

 

未来,昆仑芯科技将持续发挥在推理生态的领先优势,助力语音业务用户体验不断优化,同时也将与社区紧密合作,协力共建wenet国产生态。

 

 

关于vivo人工智能研究院

 

vivo 人工智能研究院成立于2017年,致力于人工智能的基础研究和应用探索。专注于计算机视觉、语音技术、自然语言处理和机器学习、深度学习、强化学习等领域的基础研究,从用户需求出发,不断创新,致力于实现“1001个便利,持续通过AI能力为用户带来无处不在的惊喜和激动人心的体验。

 

 

参考链接

  • vivo官网:https://www.vivo.com/
  • wenet官网:https://github.com/wenet-e2e/wenet
  • 昆仑芯科技官网:https://www.kunlunxin.com.cn/
  • 昆仑芯在wenet开源链接:https://github.com/wenet-e2e/wenet/tree/main/runtime/kunlun