查看原文
其他

一键部署Hugging Face模型!LMDeploy与transformers强强联合

LMDeploy InternLM 2024-04-23

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


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


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


https://github.com/InternLM/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 任务中成为主流选择。


最近,多模态推理,超长文本推理的需求也对现有的推理框架的能力提出挑战,LMDeploy 也会针对当前的热点需求,有针对性地进行优化开发,欢迎大家访问以下链接,关注我们的最新动态:


https://github.com/InternLM/lmdeploy#news-


大模型在真实法律任务中表现究竟如何?LawBench:多层能力体系全面评估

2023-11-28

简化部署,优化推理!LMDeploy RESTful API 让大模型落地更丝滑

2023-11-17

仅需一块3090显卡,高效部署InternLM-20B模型

2023-11-08


点击下方“阅读原文”直达 LMDeploy GitHub 主页

继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存