赞
踩
目录
以命令行方式与 InternLM2-Chat-1.8B 模型对话
课程文档 Link: Tutorial/lmdeploy/README.md at camp2 · InternLM/Tutorial · GitHub
视频链接:LMDeploy 量化部署 LLM-VLM 实践_哔哩哔哩_bilibili
之前的课程中学习了:1)使用RAG范式开发大模型 2)使用XTuner微调大模型,这些的目的都是为了能够使大模型的回答更加贴合我们的需求。但最终,模型都是要服务于实际业务场景,这个时候就涉及到模型部署。
模型部署Definition:将训练好的模型,部署到服务器端 or 边缘端。
- 需要考虑很多问题:比如在服务器端部署,假设部署到集群,如何进行分布式推理大模型;边缘端的计算能力是否足够
- 在实际部署时会遇到很多难点,比如:大模型的参数量和计算量非常巨大,那么如何在有限的资源中,加载和推理大模型?
1. 计算量巨大
2. 内存开销巨大
以16浮点数为例,每个参数占用2个字节。那么20B模型,加载参数40G+ 显存,10.3G缓存,加起来就要至少50.3G 显存。
3.访存瓶颈与动态请求
目的:减少模型的冗余参数
1. 模型剪枝
2. 知识蒸馏
3. 量化(核心:把浮点数转换为整数 or 其他离散形式)
模型参数存储一般是以32位浮点数进行存储的,一个参数占用4个字节。存在一些冗余的情况,在满足回答的情况下,可以将浮点数转换为定点数(比如:8位,4位 or平均1位的整数)。
- 优点:模型量化可以提升efficiency,提升速度!(大模型,访存密集型,访存远大于计算的瓶颈,通过量化可以把访存量降低, 可以显著降低数据传输所用的时间)
完成以下任务,并将实现过程记录截图:
- # 配置 LMDeploy 运行环境
- studio-conda -t lmdeploy -o pytorch-2.1.2
-
- # 激活刚刚创建的虚拟环境,并安装0.3.0版本的lmdeploy
- conda activate lmdeploy
- pip install lmdeploy[all]==0.3.0
注: Huggingface与TurboMind大致介绍(截图来自课程文档,详细可以看页首的课程文档link!)
注:这里对比一下和传统的使用Transformer库运行的区别
- Transformer库是Huggingface社区推出的用于运行HF模型的官方库。
对比一下使用Transformer来直接运行InternLM2-Chat-1.8B模型,以及LMDeploy的使用感受,速度明显比原生Transformer快!
上述运行chat的时候,占用显存为如下图:
可以通过上图的显存占用情况发现,占显存还是比较多的,那么能否进行显存占用呢?
- # 尝试这个命令,设成0.01,约等于禁用KV Cache占用显存
- lmdeploy chat /root/internlm2-chat-1_8b --cache-max-entry-count 0.01
运行完这个命令之后显存占用,从原来7856M到4552M,有降低!
只用输入下面这个命令就可以完成量化:
- 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
参数注释:
- lite auto_awq:使用自动awq算法
- 采用‘ptb’数据集
- 采样128个数据对
- 量化上下文长度:1024
- 量化工作结束后,新的HF模型被保存到
internlm2-chat-1_8b-4bit
目录( --work-dir /root/internlm2-chat-1_8b-4bit)
运行完上面量化命令后,得到量化后的model,可以进行测试:
lmdeploy chat /root/internlm2-chat-1_8b-4bit --model-format awq --cache-max-entry-count 0.01
此时的显存占用:
1. 这个笔记内容非常详尽,可以参考
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。