前几个月一直有不少小伙伴问我要「LightSeq的BERT推理加速代码」,当时内部已经使用了,但是一直没空整理开源。

现在代码终于整理好了,写了一个简单的样例,大家有需要的可以使用起来了。

实现原理

这里我直接使用预训练好的BERT模型,用户只需要输入一个带有[MASK]标记的句子,就可以自动预测出完整的句子。

例如我输入“巴黎是[MASK]国的首都”,那么模型就会输出“巴黎是法国的首都。”。

LightSeq已经「完美支持了BERT模型的快速推理」,代码近期已经开源:

GitHub - bytedance/lightseq: LightSeq: A High Performance Library for Sequence Processing and Generation

BERT推理使用样例可以参考examples/inference/python目录下的ls_bert.py文件。我们用LightSeq来加速BERT推理试试。

首先需要安装LightSeq和Hugging Face:

pip install lightseq transformers

然后需要将Hugging Face的BERT模型导出为LightSeq支持的HDF5模型格式,运行examples/inference/python目录下的hf_bert_export.py文件即可,运行前将代码的第167-168两行修改为下面这样,指定使用中文版本的BERT预训练模型。

output_lightseq_model_name = "lightseq-bert-base-chinese"
input_huggingface_bert_model = "bert-base-chinese"

然后就会在运行目录下生成一个lightseq-bert-base-chinese.hdf5模型文件,导出就成功啦。

最后使用LightSeq进行推理即可:

import torch
from transformers import AutoTokenizer, AutoModelForMaskedLM
import lightseq.inference as lsitokenizer = AutoTokenizer.from_pretrained("bert-base-chinese")
hf_model = AutoModelForMaskedLM.from_pretrained("bert-base-chinese")
hf_model.to("cuda:0")
ls_model = lsi.Bert("lightseq-bert-base-chinese.hdf5", 128)while True:raw_text = input("请输入中文句子,要预测的字符用#代替:\n> ")input_text = raw_text.replace("#", "[MASK]")inputs = tokenizer(input_text, return_tensors="pt")input_ids = inputs["input_ids"]mask = inputs["attention_mask"]outputs = ls_model.infer(input_ids, mask)logits = hf_model.cls(torch.Tensor(outputs).to(dtype=torch.float, device="cuda:0"))output_ids = logits.argmax(axis=2)res_text = tokenizer.batch_decode(output_ids)res_text = res_text[0][1:-1].replace(" ", "")output_text = list(raw_text)for i in range(len(raw_text)):if raw_text[i] == "#":output_text[i] = res_text[i]print("> " + "".join(output_text))

效果演示

给大家看看效果,运行我写好的代码,我们来看看会输出什么结果:

请输入中文句子,要预测的字符用#代替:
> 巴黎是#国的首都。
> 巴黎是法国的首都。

代码地址

GitHub - bytedance/lightseq: LightSeq: A High Performance Library for Sequence Processing and Generation

就在上周,首位外部贡献者出现了,修复了LightSeq的词嵌入表示的bug。

在这里我们非常欢迎感兴趣的同学来贡献自己的代码,包括但不局限于:修复bug、提供训练和推理样例、支持更多模型结构。

让大家久等了,BERT推理加速终于开源了相关推荐

  1. 预训练模型参数量越来越大?这里有你需要的BERT推理加速技术指南

    ©作者 | 徐超 单位 | 微软亚洲互联网工程院 研究方向 | 文本相关性.多语言扩展 基于 Transformer 的预训练模型,尤其是 BERT,给各种 NLP 任务的 performance 带 ...

  2. tensorrt安装_基于TensorRT的BERT推断加速与服务部署

    BERT的出现真是广大NLPer的福音,在很多任务上能取得显著提升.不例外,作者在工作过程中也使用了BERT进行下游任务训练,但在感叹BERT真香的时候,它及其漫长的推断时间让人感到很为难.本文就记录 ...

  3. 基于动态提前退出的预训练模型推理加速简介

    ©PaperWeekly 原创 · 作者 | 李磊 单位 | 北京大学硕士生 研究方向 | 自然语言处理 随着如 BERT.RoBERTa 等预训练模型在一众自然语言处理任务上取得了出色的表现,如何在 ...

  4. 模型推理加速系列|如何用ONNX加速BERT特征抽取(附代码)

    简介 近期从事模型推理加速相关项目,所以抽空整理最近的学习经验.本次实验目的在于介绍如何使用ONNXRuntime加速BERT模型推理.实验中的任务是利用BERT抽取输入文本特征,至于BERT在下游任 ...

  5. 腾讯第100个开源项目:微信开源推理加速工具TurboTransformers

    出品 | AI科技大本营(ID:rgznai100) 4月24日,腾讯正式宣布开源Transformer推理加速工具TurboTransformers.该工具面向自然语言处理领域中Transforme ...

  6. FastFormers:实现Transformers在CPU上223倍的推理加速

    点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要5分钟 Follow小博主,每天更新前沿干货 作者:Parth Chokhra 编译:ronghuaiyang 导读 使用多头注意力的Tran ...

  7. 腾讯开源 TurboTransformers:自然语言处理推理加速工具

    4 月 24 日,腾讯正式宣布开源 Transformer 推理加速工具 TurboTransformers.该工具面向自然语言处理领域中 Transformers 相关模型丰富的线上预测场景,在微信 ...

  8. 微信开源推理加速工具 TurboTransformers,性能超越 PyTorch/TensorFlow 与主流优化引擎

    腾讯宣布开源 Transformer 推理加速工具 TurboTransformers.该工具面向自然语言处理领域中 Transformers 相关模型丰富的线上预测场景,据介绍,其在微信.腾讯云.Q ...

  9. PyTorch开发者福音, OpenVINO整合PyTorch实现推理加速!

    作者: Ashish Datta, Sai Jayanthi, Natalie Kershaw (Microsoft), Yamini Nimmagadda, Sesh Seshagiri 编译:李翊 ...

  10. 【模型推理加速系列】05: 推理加速格式TorchScript简介及其应用

    简介 本文紧接前文:模型推理加速系列|04:BERT模型推理加速 TorchScript vs. ONNX 实验结果:在动态文本长度且大batch size的场景下,TorchScript 格式的in ...

最新文章

  1. C语言程序设计 细节总结(第1-7章)
  2. 《硝烟中的Scrum和XP》作者新作 《精益开发实战》
  3. 动态更改echarts 高度_EasyShu地图可视化新突破,ECharts图表完美集成
  4. C#程序员转android开发
  5. 华章7-8月份新书简介(2018年)
  6. 2 0 2 0 年 第 十 一 届 蓝 桥 杯 - 国赛 - CC++大学B组 - B.扩散
  7. JS重新来过之------------[String对象]
  8. IT人员必看的几个网站 http://gzsean.blog.51cto.com
  9. Verilog HDL语言设计一个比较电路
  10. 电脑系统越来越慢,怎么删除临时文件
  11. saltstack2 grains模块
  12. 得到的概率值_手把手教你将矩阵概率画成图
  13. JS 继承各种方法的优劣比较 ----JS 学习笔记(五)
  14. http://blog.csdn.net/flyingscv/archive/2008/05/03/2371153.aspx
  15. ETL、BI、MMP数据库
  16. informix的安装步骤
  17. 解决安装TortoiseSVN时,提示 Windows-Update(kb2999226)
  18. 第九届蓝桥杯快速排序java
  19. XPS文件怎么打开?可以转成PDF格式吗?
  20. 11篇推荐系统入门必读经典论文(附下载链接)

热门文章

  1. php入门第二篇---变量
  2. 关于系统响应函数OnSysCommand
  3. Altium Designer(一):SCH
  4. VMware安装Linux,出现错误-未找到要在其中创建新文件系统的有效设备
  5. CF gym101933 K King's Colors——二项式反演
  6. vim修改tab默认4个空格
  7. HDU 1251 - 统计难题(字典树模板题)
  8. RESTful学习笔记
  9. opencv _rect
  10. delphi控件属性大全-详解-简介