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

2023/12/01 14:00
阅读数 285

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,提高运行效率。具体使用方式可参考我们之前的文章



WebUI


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


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



离线推理


以下展示使用 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




使用量化模型


量化模型的使用方式与前文一致,以 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


本文分享自微信公众号 - Hugging Face(gh_504339124f0f)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部