【InternLM实战营--第五节课作业】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

目录

文章目录

第五节课基础作业

一、LMDeploy环境部署 

二、LMDeploy模型对话(chat)

2.1 下载模型

2.2 使用Transformer库运行模型

2.3使用LMDeploy与模型对话

 笔记:使用LMDeploy与模型进行对话的通用命令格式为:

三.LMDeploy模型量化(lite)

 3.1 设置最大KV Cache缓存大小

 ​编辑

3.2 使用W4A16量化

总结


第五节课基础作业


一、LMDeploy环境部署 

跟着教程创建完开发机之后首先创建conda环境。

由于环境依赖项存在torch,下载过程可能比较缓慢。InternStudio上提供了快速创建conda环境的方法。打开命令行终端,创建一个名为lmdeploy的环境:

studio-conda -t lmdeploy -o pytorch-2.1.2

创建完环境之后就可以 安装LMDeploy了,先激活刚刚创建的虚拟环境:

conda activate lmdeploy

安装0.3.0版本的lmdeploy:

pip install lmdeploy[all]==0.3.0

 作业截图:

环境准备:

安装LMDEploy:

二、LMDeploy模型对话(chat)

2.1 下载模型

开发机的共享目录中准备好了常用的预训练模型,可以运行如下命令查看:

ls /root/share/new_models/Shanghai_AI_Laboratory/

 笔记:

国内和国外都有一些托管模型和数据集的社区,比如HuggingFace。托管在HuggingFace社区的模型通常采用HuggingFace格式存储,简写为HF格式。

但是HuggingFace社区的服务器在国外,国内访问不太方便。国内可以使用阿里巴巴的MindScope社区,或者上海AI Lab搭建的OpenXLab社区,上面托管的模型也通常采用HF格式

TurboMind是LMDeploy团队开发的一款关于LLM推理的高效推理引擎,它的主要功能包括:LLaMa 结构模型的支持,continuous batch 推理模式和可扩展的 KV 缓存管理器。

TurboMind推理引擎仅支持推理TurboMind格式的模型。因此,TurboMind在推理HF格式的模型时,会首先自动将HF格式模型转换为TurboMind格式的模型。该过程在新版本的LMDeploy中是自动进行的,无需用户操作。

简而言之就是搞清楚模型采用TurboMInd引擎推理时候需要进行模型格式的转换!

2.2 使用Transformer库运行模型

笔记:Transformer库是Huggingface社区推出的用于运行HF模型的官方库

按照官方教程在VScode中创建一个新代码文件,将以下内容复制进去,并运行:

import torch
from transformers import AutoTokenizer, AutoModelForCausalLM

tokenizer = AutoTokenizer.from_pretrained("/root/internlm2-chat-1_8b", trust_remote_code=True)

# Set `torch_dtype=torch.float16` to load model in float16, otherwise it will be loaded as float32 and cause OOM Error.
model = AutoModelForCausalLM.from_pretrained("/root/internlm2-chat-1_8b", torch_dtype=torch.float16, trust_remote_code=True).cuda()
model = model.eval()

inp = "hello"
print("[INPUT]", inp)
response, history = model.chat(tokenizer, inp, history=[])
print("[OUTPUT]", response)

inp = "please provide three suggestions about time management"
print("[INPUT]", inp)
response, history = model.chat(tokenizer, inp, history=history)
print("[OUTPUT]", response)

激活环境后运行代码:

python /root/pipeline_transformer.py

笔记:Hugging Face 的 Transformers 库中的 pipeline 是一个高级接口,它允许用户轻松地使用预训练模型来执行各种自然语言处理(NLP)任务,而无需深入了解模型的内部工作原理。pipeline 将模型的加载、文本的预处理(分词)、模型的推理(预测)以及后处理结果封装在一起,提供了一个简单的函数调用接口。

作业截图:

这里运行速度还是有点慢的。

2.3使用LMDeploy与模型对话

 笔记:使用LMDeploy与模型进行对话的通用命令格式为:

lmdeploy chat [HF格式模型路径/TurboMind格式模型路径]

这里执行如下命令运行下载的1.8B模型:

lmdeploy chat /root/internlm2-chat-1_8b

作业截图:

模型加载完成:

 

 使用模型进行对话:

三.LMDeploy模型量化(lite)

笔记

量化是一种以参数或计算中间结果精度下降换空间节省(以及同时带来的性能提升)的策略。

有两个跟量化有关的概念十分重要:

 3.1 设置最大KV Cache缓存大小

KV Cache是一种缓存技术,通过存储键值对的形式来复用计算结果,以达到提高性能和降低内存消耗的目的。在大规模训练和推理中,KV Cache可以显著减少重复计算量,从而提升模型的推理速度。理想情况下,KV Cache全部存储于显存,以加快访存速度。当显存空间不足时,也可以将KV Cache放在内存,通过缓存管理器控制将当前需要使用的数据放入显存。

模型在运行时,占用的显存可大致分为三部分:模型参数本身占用的显存、KV Cache占用的显存,以及中间运算结果占用的显存。LMDeploy的KV Cache管理器可以通过设置--cache-max-entry-count参数,控制KV缓存占用剩余显存的最大比例。默认的比例为0.8。

当直接运行 internlm2-chat-1_8b模型的时候,显存占用是7856MB:

下面运行:

lmdeploy chat /root/internlm2-chat-1_8b --cache-max-entry-count 0.5

改变KV cache的大小,可以看到,运行后显存得到了降低,变为6608MB:

 

 

3.2 使用W4A16量化

MDeploy使用AWQ算法,实现模型4bit权重量化。推理引擎TurboMind提供了非常高效的4bit推理cuda kernel,性能是FP16的2.4倍以上。它支持以下NVIDIA显卡:

  • 图灵架构(sm75):20系列、T4
  • 安培架构(sm80,sm86):30系列、A10、A16、A30、A100
  • Ada Lovelace架构(sm90):40 系列

 首先按照依赖库:

pip install einops==0.7.0

 仅需执行一条命令,就可以完成模型量化工作:

lmdeploy lite auto_awq \
   /root/internlm2-chat-1_8b \
  --calib-dataset 'ptb' \
  --calib-samples 128 \
  --calib-seqlen 1024 \
  --w-bits 4 \
  --w-group-size 128 \
  --work-dir /root/internlm2-chat-1_8b-4bit

笔记:

 

量化工作结束后,新的HF模型被保存到internlm2-chat-1_8b-4bit目录。下面使用Chat功能运行W4A16量化后的模型。

lmdeploy chat /root/internlm2-chat-1_8b-4bit --model-format awq

作业截图:

量化后命令行客户端对话:

 

 推理速度貌似快了一些(不明显) 

网页客户端对话:


总结

量化操作是一种优化模型大小和加速推理过程的技术,通过减少模型权重和激活的精度来实现。我这篇博客完成了实战营中的基础作业内容,部署了量化前后的模型,并生成300字故事,感受一下量化前后的推理速度差异。

  • 19
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值