Project description
fastgpt
fastgpt 是什么
fastgpt 的背景
GPT 模型是通过序列文本预测下一个词的训练任务得到的预训练模型,可以在文本生成任务上达到很好的效果。
transformers 库是近些年最火的做预训练模型的 python 库,在其背后的社区,网友、组织分享开源了各式各样的预训练模型,尤其是截止 2022 年 6 月 23 日,社区 的开源文本生成模型多达到5068 个。
onnx 是由微软,亚马逊 ,Facebook 和 IBM 等公司共同开发的,针对机器学习所设计的开放式的文件格式,经过 onnxruntime 量化压缩的预训练模型,在 cpu 硬件上推理速度在各开源框架的对比上首屈一指。
然而,通过transformers 官方的 onnx 接口转换、onnx 量化 API,却没有做好 GPT 模型转换的兼容问题,手动进行 onnx 转换需要自定义很多配置,对于新手不很友好。
fastgpt 库,就是为了无缝衔接 transformers 库调用的 GPT 模型与 onnx 格式,使用者可以在仅修改两行代码的情况下,使用 onnx 量化后的模型
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM . from_pretrained ( "distilgpt2" )
from fastgpt import CausalLMModelForOnnxGeneration
model = CausalLMModelForOnnxGeneration . from_pretrained ( "distilgpt2" )
在 fastgpt 这一行代码中,会自动执行以下流程
transformers hub 的模型下载
pytorch 模型推理,输出 logits
onnx 格式转换
onnx 格式模型推理,输出 logits,进行对比差异
onnx 量化
onnx 量化格式模型推理,输出 logits,进行对比差异
安装
pip install fastgpt
快速 demo
from transformers import AutoTokenizer
from fastgpt import CausalLMModelForOnnxGeneration
model = CausalLMModelForOnnxGeneration . from_pretrained ( "distilgpt2" )
tokenizer = AutoTokenizer . from_pretrained ( "distilgpt2" )
prompt_text = "Natural language processing (NLP) is the ability of a computer program to understand human language as it is spoken and written"
input_ids = tokenizer (
prompt_text , return_tensors = "pt" , add_special_tokens = False
) . input_ids
generated_ids = model . generate ( # 这里完全兼容transformers的generate函数
input_ids ,
max_length = 64 + len ( prompt_text ),
decoder_start_token_id = tokenizer . cls_token_id ,
eos_token_id = tokenizer . sep_token_id ,
output_scores = True ,
temperature = 1 ,
repetition_penalty = 1.0 ,
top_k = 50 ,
top_p = 0.9 ,
do_sample = True ,
num_return_sequences = 1 ,
length_penalty = 2.0 ,
early_stopping = True ,
)
print ( tokenizer . decode ( generated_ids [ 0 ], skip_special_tokens = True ))
print ( "=" * 20 )
fastgpt 的优点
兼容 transformers : 基于 transformers 库的文本生成函数 ,功能非常丰富。fastgpt 在 onnx 格式模型上,兼容该函数。
兼容 cache : 在文本生成的一个个 token 生成过程中的past_key_value
需要在 GPT 模型上持续迭代输入,fastgpt 已经通过 onnx 格式做好衔接。
代码修改低成本 :代码替换原版 transformers 仅需修改两行代码。
onnx 格式占内存小 :对于 distilgpt2 模型,torch 版318MB
, onnx 量化版243MB
cpu 上速度更快 : 用时约降低 33%
速度对比
生成速度评测(ms)
模型框架
beam:1
beam:2
beam:3
beam:4
torch
170.337
247.907
292.964
375.905
fastgpt
111.018
157.749
203.759
250.348
模型框架
beam:1
beam:2
beam:3
beam:4
torch
299.241
445.179
509.537
655.131
fastgpt
203.626
279.155
345.895
418.564
模型框架
beam:1
beam:2
beam:3
beam:4
torch
556.111
842.068
925.621
1196.995
fastgpt
384.92
510.985
627.584
742.666
模型框架
beam:1
beam:2
beam:3
beam:4
torch
1053.495
1574.953
1748.569
2296.531
fastgpt
608.141
1000.812
1227.086
1461.645
模型框架
beam:1
beam:2
beam:3
beam:4
torch
2086.6
2568.279
2620.381
3147.943
fastgpt
1518.054
1628.206
1686.807
2622.179
model name : Intel(R) Xeon(R) Platinum 8272CL CPU @ 2.60GHz
cpu cores : 2
感谢
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages .
Source Distribution
File details
Details for the file fastgpt-0.0.3.tar.gz
.
File metadata
Download URL:
fastgpt-0.0.3.tar.gz
Upload date:
Jun 23, 2022
Size: 10.6 kB
Tags: Source
Uploaded using Trusted Publishing? No
Uploaded via: twine/4.0.1 CPython/3.9.13
File hashes
Hashes for fastgpt-0.0.3.tar.gz
Algorithm
Hash digest
SHA256
e3ea1eab9cdc2ef6330a3cac3b2282aaeb2289f3866b22b7557f805ece0b9eee
Copy
MD5
cd3c67b16bfd8dbab6f8011a01dbeebd
Copy
BLAKE2b-256
f3c3f3aad2f030c5dc5ad5ce596e8e8fb0bbaaaa866c8bbe45c1dd70022200b6
Copy
See more details on using hashes here.