LMDeploy 量化部署实践

news2024/11/16 6:20:38

一、环境配置见:https://github.com/InternLM/Tutorial/blob/camp3/docs/L2/LMDeploy/readme.md
验证LMDeploy启动InternLM2_5-7b-chat

conda activate lmdeploy
lmdeploy chat /root/models/internlm2_5-7b-chat

二、量化显存计算
参数计算:
在这里插入图片描述在这里插入图片描述
LMDeploy 提供了权重量化和 k/v cache两种策略。

k/v cache

InternLM2.5正常运行时占用显存23G:
1、在 BF16 精度下,7B模型权重占用14GB:70×10^9 parameters×2 Bytes/parameter=14GB
2、kv cache占用8GB:剩余显存24-14=10GB,kv cache默认占用80%,即10*0.8=8GB
3、其他项1GB

是故23GB=权重占用14GB+kv cache占用8GB+其它项1GB
在这里插入图片描述
lmdeploy chat /root/models/internlm2_5-7b-chat --cache-max-entry-count 0.4 这个参数是控制kv缓存占用剩余显存的最大比例。默认的比例为0.8,设置缓存的最大条目数量为 0.4 。缓存的作用通常是为了提高数据的访问速度,减少重复计算或读取数据的时间。通过设置这个参数,可以控制缓存的大小和使用效率,以平衡性能和资源消耗。
在这里插入图片描述
修改kv cache占用之后的显存占用情况(19GB, 减少4G):
1、与减少KV chache之前一样,在 BF16 精度下,7B模型权重占用14GB
2、kv cache占用4GB:剩余显存24-14=10GB,kv cache修改为占用40%,即100.4=4GB
3、其他项1GB
是故19GB=权重占用14GB+kv cache占用4GB+其它项1GB
而此刻减少的4GB显存占用就是从10GB
0.8-10GB*0.4=4GB

在线量化

由于都使用BF16精度下的internlm2.5 7B模型,故剩余显存均为10GB,且 cache-max-entry-count 均为0.4,这意味着LMDeploy将分配40%的剩余显存用于kv cache,即10GB*0.4=4GB。但quant-policy 设置为4时,意味着使用int4精度进行量化。因此,LMDeploy将会使用int4精度提前开辟4GB的kv cache。

相比使用BF16精度的kv cache,int4的Cache可以在相同4GB的显存下只需要4位来存储一个数值,而BF16需要16位。这意味着int4的Cache可以存储的元素数量是BF16的四倍。
int4 的cache采用auto_awq方法进行量化:

lmdeploy lite auto_awq \
   /root/models/internlm2_5-7b-chat \
  --calib-dataset 'ptb' \
  --calib-samples 128 \
  --calib-seqlen 2048 \
  --w-bits 4 \
  --w-group-size 128 \
  --batch-size 1 \
  --search-scale False \
  --work-dir /root/models/internlm2_5-7b-chat-w4a16-4bit

W4:这通常表示权重量化为4位整数(int4)。这意味着模型中的权重参数将从它们原始的浮点表示(例如FP32、BF16或FP16,Internlm2.5精度为BF16)转换为4位的整数表示。这样做可以显著减少模型的大小。
A16:这表示激活(或输入/输出)仍然保持在16位浮点数(例如FP16或BF16)。激活是在神经网络中传播的数据,通常在每层运算之后产生。
因此,W4A16的量化配置意味着:

权重被量化为4位整数。
激活保持为16位浮点数。

命令解释:

lmdeploy lite auto_awq: lite这是LMDeploy的命令,用于启动量化过程,而auto_awq代表自动权重量化(auto-weight-quantization)。
/root/models/internlm2_5-7b-chat: 模型文件的路径。
–calib-dataset ‘ptb’: 这个参数指定了一个校准数据集,这里使用的是’ptb’(Penn Treebank,一个常用的语言模型数据集)。
–calib-samples 128: 这指定了用于校准的样本数量—128个样本
–calib-seqlen 2048: 这指定了校准过程中使用的序列长度—2048
–w-bits 4: 这表示权重(weights)的位数将被量化为4位。
–work-dir /root/models/internlm2_5-7b-chat-w4a16-4bit: 这是工作目录的路径,用于存储量化后的模型和中间结果。

基础任务
使用结合W4A16量化与kv cache量化的internlm2_5-7b-chat模型封装本地API并与大模型进行一次对话:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

使用Function call功能让大模型完成一次简单的"加"与"乘"函数调用,作业截图需包括大模型回复的工具调用情况:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2088562.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解决vue中this.$set()不更新页面问题

问题汇总:解决vue中this.$set()不更新页面问题 this.$set()方法有一种情况,就是当你要设置的key已经存在于这个对象或数组中的时候,它只会更改data并不会为该key添加响应检测,所以解决这个问题的办法就是在设置值之前先把这个属性…

【Redis之一:下载安装Redis】

Redis下载与安装 一、下载 Redis 安装包1、 Windows 安装包下载 二、安装Redis1、 Windows 安装Redis 三、配置 Redis1、 Windows 中配置 Redis(1)配置访问密码(2)重启 Redis 服务 三、访问 Redis1、命令行访问 Redis(…

深度学习系列71:表格检测和识别

1. pdf处理 如果是可编辑的pdf格式,那么可以直接用pdfplumber进行处理: import pdfplumber import pandas as pdwith pdfplumber.open("中新科技:2015年年度报告摘要.PDF") as pdf:page pdf.pages[1] # 第一页的信息text pag…

深度学习项目实践——qq聊天机器人(transformer)(一)原理介绍

文章目录 首先第一步——QQ是如何实现实时聊天数据传输过程1. 用户发送消息的开始2. 数据封装与加密3. 建立连接:WebSocket协议的应用4. 消息的传输过程5. 接收者获取消息6. 双向通信与实时性保障7. 保持连接与断线重连 第二步——聊天机器人是如何来接管QQ账号的组…

什么牌子超声波清洗机好?家用超声波清洗机推荐

随着民众生活品质与幸福感的不断提升,诸如珠宝饰品、眼镜等精细物品成为了许多家庭中的常备之物。然而,这些小巧物件容易积累微尘并潜藏细菌,悄然威胁我们的健康安全。超声波清洗机应运而生,成为了解决这一隐患的理想方案&#xf…

快速了解Rust 的数据分析库Polars

【图书介绍】《Rust编程与项目实战》-CSDN博客 《Rust编程与项目实战》(朱文伟,李建英)【摘要 书评 试读】- 京东图书 (jd.com) 17.1.1 什么是Polars Polars是一个基于 Rust 的数据分析库,它的目标是提供一个高性能的数据分析工具,同时也…

自定义审批字段

一. 新增特性 1.路径:SPRO->物料管理->采购->采购订单->采购订单的下达过程->编辑特性 2.输入特征名Z_USRC2_PO点新建 二. 将特性分配给类 1.路径:SPRO->物料管理->采购->采购订单->采购订单的下达过程->编辑类 2.输入…

Windows上MSYS2的安装和使用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、下载二、安装三、使用1.打开命令行2.搜索软件3.安装软件4.卸载软件5.更新环境6.其他四、MSYS2和Cygwin的差别总结前言 MSYS2这个工具我是越用越喜欢,很多东西放在Linux上如鱼得水但是放在…

ClkLog针对神策不支持全埋点的客户端实现用户访问基础统计分析

本文将介绍,ClkLog针对神策不支持全埋点的客户端实现用户访问基础统计分析 1。 客户遇到的问题 ClkLog的用户访问基础统计分析功能是基于神策SDK的全埋点来实现的。 我们遇到有些客户是使用C、C#等语言来开发的客户端,然而神策此类SDK(如C, C…

什么是代理IP_如何建立代理IP池?

什么是代理IP_如何建立代理IP池? 1. 概述1.1 什么是代理IP?1.2 代理IP的工作原理1.3 爬虫的应用场景1.3.1 搜索引擎,最大的爬虫1.3.2 数据采集,市场分析利器1.3.3 舆情监控,品牌营销手段1.3.4 价格监测,全网…

jetsonNano烧录Ubuntu20.04镜像使用ROS2

本来想要参考Jetson nano升级Ubuntu20.04来进行升级。 但是此过程也有大坑,我的目的是,除了升级Ubuntu20.04,在上面使用ROS2,我还希望我写的代码可以使用上Pytorch。 方式一(未成功) 按照上面的教程可以正…

Spring Bean加载耗时采集工具

功能介绍 Target:针对启动慢的 Spring 应用,找出 IOC 容器启动过程中,加载耗时较长的 Bean 对象进行治理。  实现原理 主要用到Spring本身提供的两个扩展接口:BeanPostProcessor ApplicationListener 这两个接口…

202408830测试RK3588的rockit/VI的编译

202408830测试RK3588的rockit/VI的编译 2024/8/30 14:58 前言 环境介绍: 1.编译环境 Ubuntu 20.04.6 LTS rootrootrootroot-desktop:~$ rootrootrootroot-desktop:~$ cat /etc/issue Ubuntu 20.04.6 LTS \n \l rootrootrootroot-desktop:~$ 2.SDK版本&#xff1a…

8,sql查询条件查询语句

查询员工表结构,并分析 DESC 表名;DESC t_employee; 查询出生日期在 1990-01-01 和 1995-01-01 之间的员工信息。between 区间比较这句话的意思就是查看所有员工的生日在1990-01-01和1995-01-01之间的SELECT * FROM 表名 WHERE 生日 between 1990-01-01 AND 1995-0…

共绘国际智图:Elvy与图为科技携手探索边缘计算新境界

近日,巴西知名企业Elvy到访深圳图为科技,共议“合作开发边缘计算机及联合开拓海外市场”事宜。 在全球化日益加深的今天,技术的跨界合作正成为推动行业进步的重要力量。8月23日,一场旨在深化国际合作、共推边缘计算技术发展的会议…

云 VS 边缘计算,关系与区别是什么?

云计算和边缘计算的区别是什么? 云是一种 IT 环境,可以抽象、汇集和共享整个网络中的 IT 资源。边缘是网络边缘的计算位置,以及这些物理位置上的硬件和软件。是在云中运行工作负载,而边缘计算是在边缘设备上运行工作负载。 边缘…

马丁格尔交易策略Anzo Capital指出问题核心,那就是保证金

使用马丁格尔交易策略进行外汇交易时,Anzo Capital 强调了保证金管理的重要性。通过精准计算和策略规划,Anzo Capital 帮助交易者在波动的市场中保持资金安全,并最大化投资回报。 Anzo Capital 提醒交易者,了解波动回弹至关重要&…

渗透测试中最常见的安全漏洞有哪些

目录 常见的安全漏洞 拓展 渗透测试中如何检测SQL注入漏洞? 如何防范跨站脚本攻击(XSS)? 文件上传漏洞通常是如何被利用的? 思维导图 常见的安全漏洞 在渗透测试中,以下是一些最常见的安全漏洞: SQL注入&#x…

计算机毕设推荐-基于python的超市数据处理可视化分析

💖🔥作者主页:毕设木哥 精彩专栏推荐订阅:在 下方专栏👇🏻👇🏻👇🏻👇🏻 实战项目 文章目录 实战项目 一、基于python的超市数据处理可…

AI编码公司Magic获得近5亿美元巨额投资

Magic,一家专注于生成式人工智能AI编码的初创公司,最近在AI领域取得了显著的成就。该公司通过创建模型来生成代码并自动执行软件开发任务,成功吸引了包括前谷歌CEO埃里克施密特在内的一系列知名投资者的关注,并完成了一轮3.2亿美元…