Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >让大家久等了,BERT推理加速终于开源了

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

作者头像
godweiyang
发布于 2021-08-12 06:25:01
发布于 2021-08-12 06:25:01
97700
代码可运行
举报
文章被收录于专栏:算法码上来算法码上来
运行总次数:0
代码可运行

作者 | 韦阳

出品 | 公众号:算法码上来(ID:GodNLP)

- BEGIN -

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

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

实现原理

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

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

LightSeq已经「完美支持了BERT模型的快速推理」,代码近期已经开源:https://github.com/bytedance/lightseq

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

首先需要安装LightSeq和Hugging Face:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install lightseq transformers

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
output_lightseq_model_name = "lightseq-bert-base-chinese"
input_huggingface_bert_model = "bert-base-chinese"

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import torch
from transformers import AutoTokenizer, AutoModelForMaskedLM
import lightseq.inference as lsi

tokenizer = 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))

效果演示

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
请输入中文句子,要预测的字符用#代替:
> 巴黎是#国的首都。
> 巴黎是法国的首都。

代码地址

https://github.com/bytedance/lightseq

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

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

- END -

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法码上来 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
只用两行代码,我让Transformer推理加速了50倍
最近有学妹问我,我训了一个Transformer模型,但是预测好慢啊,有啥解决方案吗?
godweiyang
2021/04/23
4.2K0
使用🤗Transformers进行NLP的数据增广的4种常用方法
这是我觉得最有趣的技术,这种方式首先使用模型将句子转换为不同的语言,然后将其转换回目标语言。当我们为此使用 ML 模型时,它会生成与原始句子相同但单词不同的句子。Huggingface 的模型中心提供了各种预训练模型,例如 Google T5、Facebook NMT(神经机器翻译)等。在下面的代码中,我使用 T5-base 进行英语到德语的翻译,然后使用 Bert2Bert 模型进行德语到英语的翻译 . 我们还可以使用 Fairseq 模型,这些模型可用于英语到德语和德语到英语。
deephub
2021/09/15
7130
Pytorch版本的BERT
BERT地址:https://github.com/google-research/bert
玖柒的小窝
2021/10/22
1.6K0
​一文带你了解:人工智能大模型:技术原理、应用与未来发展
近年来,人工智能领域取得了前所未有的突破,尤其是以GPT(Generative Pre-trained Transformer)、LLaMA、Claude等为代表的大型语言模型(Large Language Models,LLMs)引领了一场技术革命。这些大模型凭借数十亿甚至数千亿参数的规模,展现出了接近人类的语言理解和生成能力,为人工智能的应用开辟了广阔前景。本文将深入探讨AI大模型的技术原理、训练方法、应用场景以及未来发展趋势,并提供丰富的代码示例,帮助读者更好地理解和应用这些技术。
远方2.0
2025/04/04
3150
零基础入门:DeepSeek微调的评测教程来了!
三天前,看到了我们 Datawhale 公众号上发了文章《零基础入门:DeepSeek 微调教程来了!》反响很好,其中的内容写的非常接地气,适合学习者进行学习体验。
Datawhale
2025/02/28
3190
零基础入门:DeepSeek微调的评测教程来了!
Huggingface🤗NLP笔记6:数据集预处理,使用dynamic padding构造batch
从这一集,我们就正式开始使用Transformer来训练模型了。今天的部分是关于数据集预处理。
beyondGuo
2021/10/08
5.1K2
一文学会Pytorch版本BERT使用
https://github.com/huggingface/pytorch-pretrained-BERT
用户3946442
2022/04/11
5940
一文学会Pytorch版本BERT使用
NLP实战 | BERT文本分类及其魔改(附代码)
每天给你送来NLP技术干货! ---- 写在前面 本文主要介绍了两种文本分类模型:BERT文本分类基础模型,及基于Bert和TextCNN的魔改模型。在作者实际的有关文本分类的工作中取得了F1值超越Bert基础模型近4%的效果。 1. Baseline:Bert文本分类器 Bert模型是Google在2018年10月发布的语言模型,一经问世就横扫NLP领域11项任务的最优结果,可谓风头一时无二。 有关于Bert中transformer的模型细节,我们在此就不赘述了。感兴趣的朋友,可以看看《The Illus
zenRRan
2022/10/10
6.6K0
NLP实战 | BERT文本分类及其魔改(附代码)
Qwen2大模型微调入门实战-命名实体识别(NER)任务
以Qwen2作为基座大模型,通过指令微调的方式做高精度的命名实体识别(NER),是学习入门LLM微调、建立大模型认知的非常好的任务。
zenRRan
2024/07/04
2.2K0
Qwen2大模型微调入门实战-命名实体识别(NER)任务
BERT模型解读与简单任务实现
语言模型:语言模型是指对于任意的词序列,它能够计算出这个序列是一句话的概率。 预训练:预训练是一种迁移学习的概念,指的是用海量的数据来训练一个泛化能力很强的模型 微调:微调(Fine-tuning)是指在预训练模型的基础上,针对特定任务或数据领域,对部分或全部模型参数进行进一步的训练和调整 Transformer: BERT是基于Transformer实现的,BERT中包含很多Transformer模块,其取得成功的一个关键因素是Transformer的强大作用。BERT仅有Encoder部分,因为它并不是生成式模型。Transformer个模块通过自注意力机制实现快速并行,改进了RNN最被人诟病的训练慢的缺点,并且可以增加到非常深的深度,充分发掘DNN模型的特性,提升模型准确率。 Transformer首先对每个句子进行词向量化,进行编码,再添加某个词蕴含的位置信息,生成一个向量。而后通过Attention算法,生成一个新向量,这个新向量不仅包含了词的含义,词中句子中的位置信息,也包含了该词和句子中的每个单词含义之间的关系和价值信息。这种方法突破了时序序列的屏障,使得Transformer得到了广泛的应用。
Srlua
2024/12/01
3580
BERT模型解读与简单任务实现
【AI大模型】Transformers大模型库(一):Tokenizer
这里的Transformers指的是huggingface开发的大模型库,为huggingface上数以万计的预训练大模型提供预测、训练等服务。
LDG_AGI
2024/08/13
9120
深度解析BERT:从理论到Pytorch实战
在信息爆炸的时代,自然语言处理(NLP)成为了一门极其重要的学科。它不仅应用于搜索引擎、推荐系统,还广泛应用于语音识别、情感分析等多个领域。然而,理解和生成自然语言一直是机器学习面临的巨大挑战。接下来,我们将深入探讨自然语言处理的一些传统方法,以及它们在处理语言模型时所面临的各种挑战。
TechLead
2023/10/21
5.1K0
深度解析BERT:从理论到Pytorch实战
不是炒作GenAI!终于有 BERT 的替代品了
在OpenAI o3火遍全网的同时,一个名为ModernBERT的热门模型已经发布并成为热门话题,而且 Huggingface 的官方博客也已发布,下面笔者是阅读相关资料之后的一些总结
致Great
2024/12/22
2410
不是炒作GenAI!终于有 BERT 的替代品了
使用BERT进行文本分类
准备数据阶段主要需要用到的是datasets.Dataset 和transformers.AutoTokenizer。
lyhue1991
2023/09/05
7480
使用BERT进行文本分类
Qwen2大模型微调入门实战-命名实体识别(NER)任务
以Qwen2作为基座大模型,通过指令微调的方式做高精度的命名实体识别(NER),是学习入门LLM微调、建立大模型认知的非常好的任务。
用户9029617
2024/06/20
1.1K0
Qwen2大模型微调入门实战-命名实体识别(NER)任务
Deepseek 实战全攻略,领航科技应用的深度探索之旅
想玩转 Deepseek?这攻略别错过!先带你了解它的基本原理,教你搭建运行环境。接着给出自然语言处理、智能客服等应用场景的实操方法与代码。还分享模型微调、优化技巧,结合案例加深理解,让你全面掌握,探索科技新可能!
羑悻的小杀马特.
2025/02/26
2760
基于 BERT 的抽取式摘要
Python: 3.7 或更高版本(推荐 3.8 或 3.9,与 PyTorch 和 Transformers 兼容性更好)。
小言从不摸鱼
2025/03/05
1562
基于 BERT 的抽取式摘要
BERT+PET方式数据处理
示例中 {MASK} 代表 [MASK] token 的位置,{textA} 代表评论数据的位置。
@小森
2024/06/07
1230
关于bert的输出是什么
我们在使用Bert进行微调的时候,通常都会使用bert的隐含层的输出,然后再接自己的任务头,那么,我们必须先知道bert的输出都是什么,本文接下来就具体记录下bert的输出相关的知识。 由于我们微调bert的时候一般选用的是中文版的模型,因此,接下来我们加载的就是中文预训练模型bert。直接看代码:
西西嘛呦
2021/07/20
3.3K0
HuggingFace Transformers 库深度应用指南
在现代自然语言处理(NLP)领域,HuggingFace Transformers 库已经成为了不可或缺的基础工具。作为一个开源项目,它不仅提供了数千个预训练模型,还大大简化了最先进NLP模型的使用和微调过程。因此,掌握这个库的深度使用还是极为重要的。本指南将采用以下学习路径:按照基础环境搭建、核心API使用、实战案例应用、高级优化技巧来帮助各位读者渐进式地掌握它的使用。
别惹CC
2025/01/13
7200
相关推荐
只用两行代码,我让Transformer推理加速了50倍
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验