❤️点击上方,选择星标置顶,每天给你送上干货❤️

最近有学妹问我,我训了一个Transformer模型,但是预测好慢啊,有啥解决方案吗?

我心想,你又想好,又想快,咋不上天????呢?

于是我跟她说,你可以试试lightseq啊,跟闪电⚡️一样快,用了你就可以上天了。

她一脸懵比,lightseq是啥玩意儿啊?咋就能让我的模型起飞????️了呢?

我跟她说,你不需要知道太多细节,你只需要知道它是一个Transformer系列模型推理加速库就行了。

她还是一脸疑惑,那用起来能有huggingface方便吗?你看人家就两行代码。

我不屑一笑,就这?lightseq也只要两行代码就够了!

为了方便,我用了一个bart模型预测句子中mask单词的例子来给她吹了一波。

不懂什么是bart?建议先去看看huggingface的文档:
https://huggingface.co/transformers/model_doc/bart.html

huggingface bart

我们平时想用huggingface的bart来预测句子中的mask单词,大体上都会像下面这样写代码:

from transformers import BartTokenizer, BartForConditionalGenerationtokenizer = BartTokenizer.from_pretrained("facebook/bart-base")
model = BartForConditionalGeneration.from_pretrained("facebook/bart-base")sentences = ["I love that girl, but <mask> does not <mask> me."]
inputs = tokenizer(sentences, return_tensors="pt", padding=True)
generated_ids = model.generate(inputs["input_ids"], max_length=50)
res = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)
print(res)

当然运行前要先安装一下transformers包:

pip3 install transformers

最后会输出句子“I love that girl, but she does not love me.”,句子中的两个“mask”被预测成了“she”和“love”。

看起来预测的很nice,但是预测的也太慢了,这要是有一堆句子要去预测,不得等到????年????月?

接下来我们来看看lightseq是怎么加速预测的。

lightseq bart

代码我都放在下面地址了,只要两分钟就能跑出结果了:
https://github.com/godweiyang/lightseq/tree/python_example/example/python

运行前要先安装一下lightseq包:

pip3 install lightseq

首先lightseq只能接收Protocol Buffer协议定义的模型文件,如果你不知道这是啥也没关系,因为我们帮你写好了模型转换的脚本,就是hf_bart_export.py,它会将huggingface预训练的bart模型转换为transformer_pb2.py定义好的Protocol Buffer格式。

所以直接运行python3 hf_bart_export.py就行了,这里我们用的是bart-base模型。

运行完了会发现执行目录下多出一个lightseq_bart_base.pb文件,这就是转换后的模型文件。

最后直接跟huggingface一样,两行代码就能搞定啦:

import lightseq
from transformers import BartTokenizertokenizer = BartTokenizer.from_pretrained("facebook/bart-base")
model = lightseq.Transformer("lightseq_bart_base.pb", 128)sentences = ["I love that girl, but <mask> does not <mask> me."]
inputs = tokenizer(sentences, return_tensors="pt", padding=True)
generated_ids = model.infer(inputs["input_ids"])
generated_ids = [ids[0] for ids in generated_ids[0]]
res = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)
print(res)

看得出来仅仅替换了模型定义和模型推理那两行代码而已,是不是非常简单快速?

这时候她又问了,那我换一个模型,比如bert,要怎么导出pb模型呢?

也很简单,只需要为bert也单独写一个hf_bert_export.py就行了。不过目前还在开发中,之后会慢慢完善常见的一些模型的。

速度到底怎么样?

我写好了一个例子,就在ls_bart.py里,直接运行就行了,当然你也可以加上--user_input参数来手动输入句子。

输入的句子是:

I love that girl, but <mask> does not <mask> me.
She is so <mask> that I can not help glance at <mask>.
Nothing's gonna <mask> my love for you.
Drop everything now. Meet me in the pouring <mask>. Kiss me on the sidewalk.

运行结果如下:

=========================lightseq=========================
lightseq generating...
lightseq time: 0.034502994269132614s
lightseq results:
I love that girl, but she does not love me.
She is so beautiful that I can not help glance at her.
Nothing's gonna change my love for you.
Drop everything now. Meet me in the pouring rain. Kiss me on the sidewalk.
=========================huggingface=========================
huggingface generating...
huggingface time: 1.6297104470431805s
huggingface results:
I love that girl, but she does not love me.
She is so beautiful that I can not help glance at her.
Nothing's gonna change my love for you.
Drop everything now. Meet me in the pouring rain. Kiss me on the sidewalk.

可以看出预测的是真的????????,最后两句歌词都预测的很完美,能看出是啥歌吗?

再看预测时间,lightseq是huggingface的47倍左右,真是一个天上一个地下啊。

总结

总结一下,想要使用lightseq加速你的模型,只需要两步就行了:

  • 将你的模型转换为pb格式的模型。(lightseq为你写好了转换脚本,不断更新中)

  • 调用lightseq.Transformermodel.infer进行快速推理。

学妹赶紧打住了我,好了好了,我知道很????????了。还给你装起来了,我这就去用。

但是源码哪里有?我想学一学。

我又甩给她一串地址:
https://github.com/bytedance/lightseq

速度超快!字节跳动开源序列推理引擎LightSeq

好好看,好好学,都是CUDA写的,要是看得迷糊,建议先去看看我之前的入门教程嗷:
熬了几个通宵,我写了份CUDA新手入门代码

从此,世上又多了一位快如⚡️的????。

- END -

我是godweiyang,华东师范大学计算机系本硕专业第一,字节跳动AI Lab NLP算法工程师,秋招斩获上海三家互联网大厂ssp offer,主要研究方向为机器翻译、句法分析、模型压缩与加速。最大特点就是脾气好、有耐心,有任何问题都可以随时咨询我,不管是技术上的还是生活上的。

公众号后台回复【内推

可以通过我的内推码投递简历,加我微信还能随时查进度、咨询问题。

公众号后台回复【加群

可以进我的技术交流群和内推群。

记得一键③连,今天的你格外的可爱????

只用两行代码,我让Transformer推理加速了50倍相关推荐

  1. 苹果回应iPhone邮件漏洞;GitHub连续3天爆严重宕机情况;腾讯开源Transformer推理加速工具| 极客头条...

    整理 | 屠敏 头图 | CSDN 下载自东方 IC 快来收听极客头条音频版吧,智能播报由标贝科技提供技术支持. 「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦 ...

  2. 用Python进行屏幕截图,只用两行代码搞定

    一.计算机中如何进行屏幕截图呢? 1.全屏截图 按下键盘中的'PRTSC'或者'Print Screen'键,即可实现全屏截图(不同键盘位置和名称可能不同).此时,并不能看到效果,只是将截图保存在粘贴 ...

  3. python实现屏幕截图_电脑截屏操作有哪些,用Python进行屏幕截图,只用两行代码搞定...

    对于自媒体作者或者经常编辑进行文本编辑的人来讲,屏幕截图应该是一个很常见的操作.今天,带大家一起体验一下Python屏幕截图的操作,通过这篇内容你可以复习以下知识点: Python截图屏幕图片 使用P ...

  4. 只用两行代码做个表白二维码,赶快送给你心目中那个她吧♥(๑> ₃ <)♥

    上一篇:教你一招完美解决 pptx 库安装失败的问题 今天有同事给我说:女朋友生日快到了,想用Python给她写个表白二维码,然后印在买的衣服上送给她.这么特别的生日礼物,博主还是第一次听到,不得不说 ...

  5. Transformer家族5 -- 推理加速(Faster-Transformer、TurboTransformers)

    系列文章,请多关注 Transformer家族1 – Transformer详解和源码分析 Transformer家族2 – 编码长度优化(Transformer-XL.Longformer) Tra ...

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

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

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

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

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

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

  9. 从零实现Transformer、ChatGLM-6B、本地知识库、模型(训练/推理)加速

    前言 最近一直在做类ChatGPT项目的部署 微调,关注比较多的是两个:一个LLaMA,一个ChatGLM,会发现有不少模型是基于这两个模型去做微调的,说到微调,那具体怎么微调呢,因此又详细了解了一下 ...

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

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

最新文章

  1. 从命令行到IDE,版本管理工具Git详解(远程仓库创建+命令行讲解+IDEA集成使用)
  2. android检测蓝牙设备连接不上,Android检查设备连接状态
  3. key mysql_mysql中key 、primary key 、unique key 与index区别
  4. 【408预推免复习】计算机组成原理之指令系统
  5. bash builtin eval
  6. 超过一半的受访者表示愿意升级到Windows 11
  7. 简单文件传输TFTP服务器搭建 Linux RHEL6
  8. 【转】 NSArray copy 问题
  9. 解读中国式O2O的未来发展三大趋势
  10. 英伟达有魔力,Uber小心翼翼 | 跟着开复去硅谷Day1
  11. App内存优化-实践
  12. python迭代器的设计
  13. 苹果x和xs买哪个好_苹果12和苹果11哪个值得买-苹果12和11哪个更值得买
  14. python案例3:货币转换---初级
  15. android 格式化sd咔_如何在Android中格式化SD卡 | MOS86
  16. 解决QQ登录SDK不能网页授权登录的问题
  17. GB9706.1-2020|小议指示灯的颜色和报警
  18. Multisim基础 交流电源AC的Voltage offset的含义
  19. 少年: Nginx了解下
  20. php date获取星期几,php date()方法参数详解 以及获取星期几~

热门文章

  1. .Net MVC框架 + WCF 搭建 集群开发
  2. 【英宝通Unity4.0公开课学习 】(六)76讲到90讲
  3. POJ 3468 A Simple Problem with Integers(线段树区间更新)
  4. 【linux】make出现遗漏分隔符
  5. 趣图图解 SOLID 软件开发原则
  6. Windows10 关闭自动更新
  7. python学习之-文件和对象
  8. Elasticsearch如何做到亿级数据查询毫秒级返回
  9. JVM故障分析系列之四:jstack生成的Thread Dump日志线程状态
  10. 数据结构基础温故-5.图(上):图的基本概念