书生浦语大模型实战营:LMDeploy量化部署

news2024/9/21 22:05:53

1.任务:

使用结合W4A16量化与kv cache量化的internlm2_5-1_8b-chat模型封装本地API并与大模型进行一次对话。

2.背景:

1.计算模型需要的权重大小: 1B代表10个亿参数,假如是16位浮点数(f16),也就是2个Byte,则模型的权重大小为:1 * 10^9 * 2 = 2GB;假如是20B,则权重大小为40GB。

2.背景存在问题: 实际上不止40GB,因为LmDeploy部署的时候默认配置cache-max-entry-count为0.8。说明kv cache会占用剩余显存的80%,我们可以缩小其比例,减少重复计算,优化推理服务性能机制。

而其他项也会占用部分内存,会略微高一点。

3.设置kv cache int4/int8 在线量化: 自 v0.4.0 起,LMDeploy 支持在线 kv cache int4/int8 量化,量化方式为 per-head per-token 的非对称量化。此外,通过 LMDeploy 应用 kv 量化非常简单,只需要设定 quant_policycache-max-entry-count参数。目前,LMDeploy 规定 quant_policy=4 表示 kv int4 量化,quant_policy=8 表示 kv int8 量化。

3.过程:

1.环境安装:

conda create -n lmdeploy  python=3.10 -y
conda activate lmdeploy
conda install pytorch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 pytorch-cuda=12.1 -c pytorch -c nvidia -y
pip install timm==1.0.8 openai==1.40.3 lmdeploy[all]==0.5.3

2.部署7B模型:
先软链接介绍硬盘存储消耗:

mkdir /root/models
ln -s /root/share/new_models/Shanghai_AI_Laboratory/internlm2_5-7b-chat /root/models
ln -s /root/share/new_models/Shanghai_AI_Laboratory/internlm2_5-1_8b-chat /root/models
ln -s /root/share/new_models/OpenGVLab/InternVL2-26B /root/models

部署模型:

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

在这里插入图片描述
3.设置最大kv cache大小:
kv cache是一种缓存技术,通过存储键值对的形式来复用计算结果,以达到提高性能和降低内存消耗的目的。在大规模训练和推理中,kv cache可以显著减少重复计算量,从而提升模型的推理速度。理想情况下,kv cache全部存储于显存,以加快访存速度。

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

lmdeploy chat /root/models/internlm2_5-7b-chat --cache-max-entry-count 0.4

在这里插入图片描述
4.设置在线 kv cache int4/int8 量化:
自 v0.4.0 起,LMDeploy 支持在线 kv cache int4/int8 量化,量化方式为 per-head per-token 的非对称量化。此外,通过 LMDeploy 应用 kv 量化非常简单,只需要设定 quant_policycache-max-entry-count 参数。目前,LMDeploy 规定 quant_policy=4 表示 kv int4 量化,quant_policy=8 表示 kv int8 量化。

利用lmdeploy启动api server:

lmdeploy serve api_server \
    /root/models/internlm2_5-7b-chat \
    --model-format hf \
    --quant-policy 4 \
    --cache-max-entry-count 0.4\
    --server-name 0.0.0.0 \
    --server-port 23333 \
    --tp 1

在这里插入图片描述
5.W4A16 模型量化和部署1.8B:
模型量化是一种优化技术,旨在减少机器学习模型的大小并提高其推理速度。量化通过将模型的权重和激活从高精度(如16位浮点数)转换为低精度(如8位整数、4位整数、甚至二值网络)来实现。
那么标题中的W4A16又是什么意思呢?

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

因此,W4A16的量化配置意味着:

  • 权重被量化为4位整数。
  • 激活保持为16位浮点数。
lmdeploy lite auto_awq \
   /root/models/internlm2_5-1_8b-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-1_8b-chat-w4a16-4bit

在这里插入图片描述
在这里插入图片描述
6.利用量化后的模型进行API部署:

lmdeploy serve api_server \
    /root/models/InternVL2-1.8B-w4a16-4bit/ \
    --model-format awq \
    --quant-policy 4 \
    --cache-max-entry-count 0.1 \
    --server-name 0.0.0.0 \
    --server-port 23333 \
    --tp 1

在这里插入图片描述
7.请求部署后的API:
新建cli文件:

touch /root/internlm2_5.py

复制粘贴:

# 导入openai模块中的OpenAI类,这个类用于与OpenAI API进行交互
from openai import OpenAI


# 创建一个OpenAI的客户端实例,需要传入API密钥和API的基础URL
client = OpenAI(
    api_key='YOUR_API_KEY',  
    # 替换为你的OpenAI API密钥,由于我们使用的本地API,无需密钥,任意填写即可
    base_url="http://0.0.0.0:23333/v1"  
    # 指定API的基础URL,这里使用了本地地址和端口
)

# 调用client.models.list()方法获取所有可用的模型,并选择第一个模型的ID
# models.list()返回一个模型列表,每个模型都有一个id属性
model_name = client.models.list().data[0].id

# 使用client.chat.completions.create()方法创建一个聊天补全请求
# 这个方法需要传入多个参数来指定请求的细节
response = client.chat.completions.create(
  model=model_name,  
  # 指定要使用的模型ID
  messages=[  
  # 定义消息列表,列表中的每个字典代表一个消息
    {"role": "system", "content": "你是一个友好的小助手,负责解决问题."},  
    # 系统消息,定义助手的行为
    {"role": "user", "content": "帮我讲述一个关于狐狸和西瓜的小故事"},  
    # 用户消息,询问时间管理的建议
  ],
    temperature=0.8,  
    # 控制生成文本的随机性,值越高生成的文本越随机
    top_p=0.8  
    # 控制生成文本的多样性,值越高生成的文本越多样
)

# 打印出API的响应结果
print(response.choices[0].message.content)

启动:

conda activate lmdeploy
python /root/internlm2_5.py

在这里插入图片描述
6.Fuction Call:
在这里插入图片描述

3.来源:

https://github.com/InternLM/Tutorial/blob/camp3/docs/L2/LMDeploy/readme.md#2.1.3

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

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

相关文章

计算机视觉概念科普

计算机视觉(Computer Vision, CV)是一门多学科交叉的科学,旨在让计算机具备“看”的能力,即通过图像或视频数据来理解世界。它结合了信号处理、图像处理、模式识别、机器学习等多个领域的技术,让计算机能够执行诸如识别…

【Python学习手册(第四版)】学习笔记20.2-迭代和解析(二)-迭代解析、迭代方法的计时比较、函数陷阱

个人总结难免疏漏,请多包涵。更多内容请查看原文。本文以及学习笔记系列仅用于个人学习、研究交流。 本文较简单,主要是概括了解析语法(列表解析、生成器、集合、字典解析),以及对前面的各种迭代进行计时比较&#xf…

通过python解决原神解密

最近楼主玩原神世界任务做到稻妻了,在稻妻有很多解密游戏,但是博主最头疼的就是稻妻的石头解密QAQ(如图) 就在昨晚,楼主又碰到了石头解密,瞎打,半天解不出来。于是就想,有没有什么严…

如何在Windows下使用make编译Makefile

最近有小伙伴咨询我去编译运行一个程序。我一开始以为是CMakeLists,结果发现是makefile。 什么是Makefile ‌Makefile是一种用于自动化构建和管理程序的工具‌,它定义了项目中文件的依赖关系和构建步骤,帮助程序员自动化编译、链接和打包程序…

Ps:创建帧动画

在 Photoshop 中,帧动画 Frame Animation是一种通过在“时间轴”面板中创建和管理多个帧来实现动画效果的方式。 所谓帧动画,也就是传统意义上的逐帧动画,依次播放每个帧而构成的动画形式。每个帧记录了“图层”面板上所有图层的属性状态&…

QT Mainwindow下指定控件的setMouseTracking(true)和mousemoveevent函数失效-问题解决

目录: 一,问题描述二,解决方法2.1解决依据2.2方法实操 三,参考资料 一,问题描述 ☀️之前碰到过的一个问题,现在分享出来:想在qt哪里搞个鼠标移动在控件显示的图片上,然后实时显示对…

[数据集][目标检测]红外场景下车辆和行人检测数据集VOC+YOLO格式19069张4类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):19069 标注数量(xml文件个数):19069 标注数量(txt文件个数):19069 标…

一文带你画PCB板,有手就行

背景 最近写Autosar网络唤醒功能,想在实际硬件上验证,但是市面上没有找到板子验证,只能找人帮忙画PCB板。但是这里遇到比较大的问题,1、整个周期会比较长,板子不太可能一次就能完成,中间会出现修改的地方&…

C#/.NET/.NET Core技术前沿周刊 | 第 1 期(2024年8.12-8.18)

前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录、追踪C#/.NET/.NET Core领域、生态的每周最新、最实用的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿,助力技术成长与视野拓宽。 欢迎投稿,推荐…

【蓝牙协议栈】【BLE】【GATT】精讲GATT Profile架构(图文并茂精华版)

目录 1. 蓝牙BLE通用属性协议(GATT) 2.GATT角色介绍 3.GATT 层级和Profile架构 4. GATT Server架构(重点内容) 5. Characteristic架构(重点内容) 6. (Characteristic Properties)特性属性详解&#x…

一款免费的目录以及文件对比工具,替代Beyond Compare

Beyond Compare是一款功能强大的文件对比工具,但是由于是付费软件,很多没有购买的企业用户无法使用。CCompare就是一款替代Beyond Compare的免费方案,一款来自中国的可替换beycond compare, 免费使用的代码同步对比工具。 CCompare 是一款功…

【科研绘图】【分条热力图】:附Origin详细画图流程 + 案例分析

目录 No.1 理解分条热力图 No.2 画图流程 1 导入数据,绘制图形 2 设置绘图细节 3 色阶控制 4 设置坐标轴 5 效果图 No.3 案例分析 1 案例一 2 案例二 No.1 理解分条热力图 分条热力图,基于数据映射和颜色编码,是在热力图的基础上进…

聚星文社下载地址

聚星文社绘唐科技是一个文化传媒公司,以绘制唐朝相关的科技设备和场景为主题。该公司致力于通过插画、动画、游戏等形式,栩栩如生地展现唐朝时期的科技发展和生活场景。 聚星文社下载地址https://iimenvrieak.feishu.cn/docx/ZhRNdEWT6oGdCwxdhOPcdds7n…

unity Standard Assets资源商店无法安装解决方案

Unity游戏开发 “好读书,不求甚解;每有会意,便欣然忘食。” 本文目录: Unity游戏开发 Unity游戏开发unity中国 嗨嗨嗨,我来啦。 这几天的川渝之旅已经圆满结束了,今天开始正常给大家更新: Unity…

TiggerRamDisk绕过激活界面,支持最新iOS17.4.1绕过

iOS15等待越狱的日子实在太久了!checkra1n越狱目前还未发布iOS15系统越狱。 可很多朋友不小心或者大意已经升级到了最新iOS15系统。一般来说这并没有什么大碍,但如果是绕过激活的设备,或者忘记账户密码而刷机的设备,就会面临无法…

【计算机组成原理】强化部分笔记

第一章 计算机系统概述 考点1 计算机系统层次结构 1.计算机发展历程已从大纲中删去 2. 3.指令和数据都存放在存储器中,通过指令周期不同来区分(比如取指周期和执行周期) 现代的计算机以存储器为中心 4. 5. 6.汇编语言:STORE、L…

[云计算] 虚拟化笔记

原著: 韩冰,[云计算课程], 有删改。 目的 对 IT 资源简化,用户通过标准接口访问。 资源是提高一定功能的实现 。可以是硬件, 如CPU, 也可以是软件。 发展史 1961 IBM CPU 分时间片, 一个CPU 虚拟化为多…

数据结构: 树状数组

在OI赛事中,数据结构是非常重要的一个内容,更是有人说过,算法数据结构程序: A l g o r i t h m D a t a AlgorithmData AlgorithmData S t r u c t u r e P r o g r a m m i n g StructureProgramming StructureProgramming 接下来&#…

Python | Leetcode Python题解之第373题查找和最小的K对数字

题目: 题解: class Solution:def kSmallestPairs(self, nums1: List[int], nums2: List[int], k: int) -> List[List[int]]:m, n len(nums1), len(nums2)# 二分查找第 k 小的数对和left, right nums1[0] nums2[0], nums1[m - 1] nums2[n - 1] 1…

【大模型从入门到精通40】LLM部署运维(LLM Ops)使用Kubeflow Pipelines掌握LLM工作流2

这里写目录标题 使用Kubeflow Pipeline组件:输出与任务对象理解PipelineTask对象通过PipelineTask.output访问输出数据组件函数中的关键字参数实用贴士 在Kubeflow Pipelines中链接组件:传递输出定义依赖组件传递组件输出常见错误:传递正确的…