社区供稿|一键部署 Hugging Face 模型!LMDeploy 与 transformers 强强联合

608次阅读
没有评论

Hugging Face 平台在人工智能研究,尤其是自然语言处理领域产生深远影响,平台通过提供易用的接口、丰富的预训练模型和开源工具如 transformers,简化了语言模型的使用难度, 大大降低了 NLP 应用的开发门槛。另外该平台提供了一个开放、协作的生态系统,通过模型共享以及社区协作,加速了知识传播和技术创新,使得更广泛的人群能够受益于最新的自然语言处理进展,已然成为机器学习领域的“GitHub”。

面对当前火热的对话模型,尽管 transformers 抽象且统一的接口为训练以及验证阶段提供了便利,但在推理效率方面存在一些缺点。如其内部缺少对 KV-Cache 的管理,使得每轮对话都需要所有的历史进行预填充(prefill),增加了很多重复计算,显著减慢了推理效率。另外,其缺少一种有效的部署方式,对于只想基于大语言模型进行开发的人员并不十分友好。

针对这些问题,LMDeploy 进行了大量的工程开发以及优化,经过数轮迭代,目前不仅具备了稳定且高效的推理能力,也提供了十分简单的使用方式,可以很方便地使用 Hugging Face 上面热门的 transformer 模型,实现“一键部署”。

https://github.com/InternLM/lmdeploy

https://huggingface.co/internlm

https://huggingface.co/lmdeploy


一键部署 Hugging Face 模型

在 v0.0.14 版本之前,若想使用 LMDeploy(TurboMind 引擎)进行推理或者部署,需要先使用命令 lmdeploy convert 将模型离线转换为 TurboMind 推理引擎所支持的格式,转换后的模型可以更快地被加载,但对用户使用来说增加了一个转换的环节,不太友好。

如今,自 v0.1.0a0 版本起,LDMdeploy 增加了模型在线转换的能力。通过模型的在线转换,可以直接加载 Hugging Face 模型,实现一键部署。使用前,请务必安装最新的版本:

pip install 'lmdeploy[all]>=v0.1.0a0'

API Server

API Server 提供了兼容 OpenAI API 服务接口的 RESTful API,可直接作为使用 OpenAI API 程序的替代品。

lmdeploy serve api_server internlm/internlm-chat-20b --model-name internlm-chat-20b

运行命令后,在浏览器中输入 http://0.0.0.0:23333 可以打开 Swagger UI,浏览各个 API 的使用方法并进行测试。其中前三个与 OpenAI API 一致,最后一个为 LMDeploy 独有的交互模式推理接口,它会在服务端保留历史对话的信息,避免多轮对话时重复进行 Context Decoding,提高运行效率。具体使用方式可参考我们之前的文章

社区供稿|一键部署 Hugging Face 模型!LMDeploy 与 transformers 强强联合

WebUI

LMDeploy 提供了基于 Gradio 的 Web 交互界面,并且可以配合 API Server 使用,使 Web 服务与推理服务分离。具体使用方法,可以通过 lmdeploy server gradio -h 查看帮助信息。

lmdeploy serve gradio internlm/internlm-chat-20b --model-name internlm-chat-20b

社区供稿|一键部署 Hugging Face 模型!LMDeploy 与 transformers 强强联合

离线推理

以下展示使用 TurboMind 接口进行推理的例子:

# load modelfrom lmdeploy import turbomind as tmtm_model = tm.TurboMind.from_pretrained('internlm/internlm-chat-20b', model_name='internlm-chat-20b')generator = tm_model.create_instance()
# process queryquery = 'Hello! Today is sunny, it is time to go out'prompt = tm_model.model.get_prompt(query)input_ids = tm_model.tokenizer.encode(prompt)
# inferencefor outputs in generator.stream_infer( session_id=0, input_ids=[input_ids]): res, tokens = outputs[0]
response = tokenizer.decode(res.tolist())print(response)

部署 4bit 量化模型

随着自然语言处理领域中日益复杂的任务需求,以及人们对模型性能的不断追求,语言模型的参数量近来急剧膨胀。面对数以亿计的参数,大模型对存储以及推理带来了新的挑战。一个 7B 的模型,大约占 14G 的显存,然而大部分消费级显卡的显存都不够加载模型,更别说推理了。

面对这些棘手的问题,聪明的研究员们提出了多种量化算法,通过将高比特权重如 FP32/FP16 量化为低比特权重如 INT8/INT4,不仅节约了显存,也降低了访存成本,提高了运算速度。详细的原理可阅读我们之前的文章

LMDeploy 中实现了 AWQ 算法来对模型进行 4bit Weight Only 量化。与 GPTQ 算法相比,AWQ 算法在易用性和拓展性方面更具优势。相较于 AWQ 算法的官方版本,LMDeploy 进行了大量的工程优化,具有更快的速度。

构建量化模型

将浮点模型转化为 4bit 模型主要包含两个步骤:

  • 生成量化参数

  • 根据量化参数,量化模型权重

具体的命令如下:

# 1. 获取量化参数lmdeploy lite calibrate  --model $HF_MODEL                # 可填本地路径,或者HF的repo_id,如internlm/internlm-chat-20b  --calib_dataset 'c4'             # 校准数据集,支持 c4, ptb, wikitext2, pileval  --calib_samples 128              # 校准集的样本数,如果显存不够,可以适当调小  --calib_seqlen 2048              # 单条的文本长度,如果显存不够,可以适当调小  --work_dir $WORK_DIR             # 保存 Pytorch 格式量化统计参数和量化后权重的文件夹 # 2. 根据量化参数,量化模型权重lmdeploy lite auto_awq  --model $HF_MODEL                # 与步骤 1 一致  --w_bits 4                       # 权重量化的 bit 数  --w_group_size 128               # 权重量化分组统计尺寸  --work_dir $WORK_DIR             # 步骤 1 保存量化参数的目录

另外,InternLM 以及 LMDeploy 在 Hugging Face 上面上传了一些热门的量化好的大模型,并验证了量化后的精度,可以直接下载使用,模型列表也在持续增加中。


下载链接:

https://huggingface.co/internlm

https://huggingface.co/lmdeploy

社区供稿|一键部署 Hugging Face 模型!LMDeploy 与 transformers 强强联合

社区供稿|一键部署 Hugging Face 模型!LMDeploy 与 transformers 强强联合

使用量化模型

量化模型的使用方式与前文一致,以 internlm/internlm-chat-20b-4bit 为例。

API Server

lmdeploy serve api_server internlm/internlm-chat-20b-4bit --model-name internlm-chat-20b

WebUI

lmdeploy serve gradio internlm/internlm-chat-20b-4bit --model-name internlm-chat-20b

internlm/internlm-chat-20b-4bit Model Card Inference 的部分说明,使用的是V0.0.14之前的部署方式,即先离线转化为 TurboMind 的模型格式,再加载转换好的模型。

结语

2023 年是生成式人工智能爆发的一年,基于 transformer 的语言大模型与以往的模型相比,在上下文理解,通用性和多任务适应性方面展现出了显著的优势,在处理复杂 NLP 任务中成为主流选择。

本文由 Hugging Face 中文社区内容共建项目提供,稿件由社区成员投稿,经授权发布于 Hugging Face 公众号。文章内容不代表官方立场,文中介绍的产品和服务等均不构成投资建议。了解更多请关注公众号:如果你有与开源 AI、Hugging Face 相关的技术和实践分享内容,以及最新的开源 AI 项目发布,希望通过我们分享给更多 AI 从业者和开发者们,请通过下面的链接投稿与我们取得联系:

https://hf.link/tougao

 

Read More 

正文完
可以使用微信扫码关注公众号(ID:xzluomor)
post-qrcode
 
评论(没有评论)
Generated by Feedzy