Project Icon

EET

Transformer模型推理加速引擎

EET是一个专注于Transformer模型的PyTorch推理加速引擎。它支持百川、LLaMA等大规模语言模型,提供int8量化功能,可在单GPU上高效运行超大模型。EET通过CUDA内核优化和量化算法显著提升多模态及NLP任务的推理性能,为Transformers和Fairseq提供开箱即用的加速方案。使用EET只需几行代码即可实现模型的高效部署与推理。

简单高效的Transformer

EET

GitHub license GitHub release release

EET(简单高效的Transformer)是一个友好的Pytorch推理插件,专注于基于Transformer的模型,使得大规模模型变得可负担。

特点

  • 新功能🔥:支持百川、LLaMA和其他大语言模型。
  • 新功能🔥:支持int8量化。
  • 支持在单个GPU上运行超大规模模型。
  • 专门用于多模态和自然语言处理任务的推理(CLIP/GPT-3/Bert/Seq2seq等)。
  • 高性能。通过CUDA内核优化和量化/稀疏算法的效果,使基于transformer的模型变得更快。
  • 为Transformers和Fairseq提供开箱即用的解决方案。省去繁琐的配置,只需几行代码即可让你的模型运行起来。

模型矩阵

模型类型TransformersFairseq量化加速比支持版本
GPT-32~8倍0.0.1 beta
BertX1~5倍0.0.1 beta
ALBertX1~5倍0.0.1 beta
RobertaXX1~5倍0.0.1 beta
T5XX4~8倍1.0
ViTXX1~5倍1.0
CLIP(GPT+ViT)XX2~4倍1.0
DistillbertXX1~2倍1.0
BaichuanX1~2倍2.0
LLaMAX1~2倍2.0

快速开始

环境要求

  • cuda:>=11.4
  • python:>=3.7
  • gcc:>= 7.4.0
  • torch:>=1.12.0
  • numpy:>=1.19.1
  • fairseq:==0.10.0
  • transformers:>=4.31.0

以上环境为最低配置,最好使用更新版本。

安装

推荐使用docker镜像。

从源码安装

如果您从源码安装,您需要先安装必要的环境。然后按以下步骤进行:

$ git clone https://github.com/NetEase-FuXi/EET.git
$ pip install .

建议使用nvcr.io/nvidia/pytorch:23.04-py3及其他系列镜像,您也可以使用提供的Dockerfile文件。

从Docker开始

$ git clone https://github.com/NetEase-FuXi/EET.git
$ docker build -t eet_docker:0.1 .
$ nvidia-docker run -it --net=host -v /your/project/directory/:/root/workspace  eet_docker:0.1 bash

EET及其所需环境已在docker中安装。

运行

我们提供三种类型的API:

  • 算子API,如embedding、masked-multi-head-attention、ffn等。使您能够定义自定义模型。
  • 模型API,如TransformerDecoder、BertEncoder等。使您能够将EET集成到您的PyTorch项目中。
  • 应用API,如Transformers Pipeline。使您能够用几行代码运行模型。

算子API

算子API是C++/CUDA和Python的中间表示。我们提供了Transformer模型所需的几乎所有算子。您可以组合不同的OP来构建其他模型结构。

  • 算子API表格

    算子Python API备注
    multi_head_attentionEETSelfAttention自注意力
    masked_multi_head_attentionEETSelfMaskedAttention因果注意力
    cross_multi_head_attentionEETCrossAttention交叉注意力
    ffnEETFeedforward前馈网络
    embeddingEETBertEmbedding对应Fairseq和Transformers
    layernormEETLayerNorm与nn.LayerNorm相同
  • 如何使用

    这些OP的定义在文件EET/csrc/py11/eet2py.cpp中, 一些使用示例显示在python/eet下的文件中,告诉我们如何使用这些OP来组成经典模型。

模型API

作为插件,EET提供了友好的模型API(python/eet)以集成到Fairseq和Transformers中。

您只需根据下表找到相应的类(通常带有'EET'前缀),并使用from_torch和from_pretrained函数初始化对象。

注意:我们目前仅支持GPT-3的预填充

EET和fairseq类比较表:

EETfairseq备注
EETTransformerDecoderTransformerDecoder
EETTransformerDecoderLayerTransformerDecoderLayer
EETTransformerAttentionMultiheadAttention
EETTransformerFeedforwardTransformerDecoderLayer多个小算子的融合
EETTransformerEmbeddingEmbedding + PositionalEmbedding
EETTransformerLayerNormnn.LayerNorm

EET和Transformers类比较表:

EETtransformers备注
EETBertModelBertModel
EETBertEmbeddingBertEmbeddings
EETGPT2ModelGPT2Model
EETGPT2DecoderGPT2ModelTransformers没有GPT2Decoder
EETGPT2DecoderLayerBlock
EETGPT2AttentionAttention
EETGPT2FeedforwardMLP
EETGPT2Embeddingnn.Embedding
EETLayerNormnn.LayerNorm

除了上述基本模型类型外,我们还扩展了一些特定任务的API以支持不同的任务。下表是我们部分特定任务模型API:

EETtransformers备注
EETBertForPreTrainingBertForPreTraining
EETBertLMHeadModelBertLMHeadModel
EETBertForMaskedLMBertForMaskedLM
EETBertForNextSentencePredictionBertForNextSentencePrediction
EETBertForSequenceClassificationBertForSequenceClassification
EETBertForMultipleChoiceBertForMultipleChoice
EETBertForTokenClassificationBertForTokenClassification
EETBertForQuestionAnsweringBertForQuestionAnswering
  • 如何使用

这是一个展示如何使用模型API的代码片段:

useofbert

您可以直接使用特定任务的API构建应用程序。 这是一个填充掩码的示例:

from eet import EETRobertaForMaskedLM
from transformers import RobertaTokenizer
input = ["My <mask> is Sarah and I live in London"]
tokenizer = RobertaTokenizer.from_pretrained('roberta-base')
eet_roberta_model = EETRobertaForMaskedLM.from_pretrained('roberta-base',max_batch = max_batch_size,data_type = data_type)
# 第一步:分词
model_inputs = tokenizer(input,return_tensors = 'pt')
masked_index = torch.nonzero(model_inputs['input_ids'][0] == tokenizer.mask_token_id, as_tuple=False).squeeze(-1)
# 第二步:预测
prediction_scores = eet_roberta_model(model_inputs['input_ids'].cuda(),attention_mask = model_inputs['attention_mask'])
# 第三步:argmax
predicted_index = torch.argmax(prediction_scores.logits[0, masked_index]).item()
predicted_token = tokenizer.convert_ids_to_tokens(predicted_index)

更多示例请参考 example/python/models

应用程序API

EET提供了现成的管道方法,简化了不同任务的应用程序构建,无需使用上述模型API。

以下是一个示例:

import torch
from eet import pipeline
max_batch_size = 1
model_path = 'roberta-base'
data_type = torch.float16
input = ["我的<mask>是Sarah,我住在伦敦"]
nlp = pipeline("fill-mask",model = model_path,data_type = data_type,max_batch_size = max_batch_size)
out = nlp(input)

目前我们支持以下任务:

任务支持版本
文本分类1.0
词符分类1.0
问答1.0
填充掩码1.0
文本生成1.0
图像分类1.0
零样本图像分类1.0

更多示例请参考 example/python/pipelines

性能

GPT-3和Bert模型推理的详细性能数据可以在链接查看。

  • A100上的GPT-3
a100_prompt
  • 2080ti上的Bert
bert_ft
  • 3090上的Llama13B
bert_ft

引用我们

如果您在研究中使用了EET,请引用以下论文。

@misc{https://doi.org/10.48550/arxiv.2104.12470,
  doi = {10.48550/ARXIV.2104.12470},
  url = {https://arxiv.org/abs/2104.12470},
  author = {Li, Gongzheng and Xi, Yadong and Ding, Jingzhen and Wang, Duan and Liu, Bai and Fan, Changjie and Mao, Xiaoxi and Zhao, Zeng},
  keywords = {Computation and Language (cs.CL), FOS: Computer and information sciences, FOS: Computer and information sciences},
  title = {Easy and Efficient Transformer : Scalable Inference Solution For large NLP model},

视频

我们在知源LIVE上有一场分享,链接:https://event.baai.ac.cn/activities/325。

联系我们

您可以通过GitHub issues发布您的问题。

您也可以通过电子邮件联系我们:

ligongzheng@corp.netease.com, dingjingzhen@corp.netease.com, zhaosida@corp.netease.com

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号