第五节课 LMDeploy 大模型量化部署实践(笔记)_github llm_deply-程序员宅基地

技术标签: python  笔记  书生·浦语大模型实战营(笔记  

来源:(5)LMDeploy 大模型量化部署实践_哔哩哔哩_bilibili

课程文档:https://github.com/InternLM/tutorial/blob/main/lmdeploy/lmdeploy.md

1.大模型部署背景

(1)模型部署

定义

  • 将训练好的模型在特定软硬件环境中启动的过程,使模型能够接收输入并返回预测结果
  • 为了满足性能和效率的要求,常常对需要对模型进行优化,例如模型压缩和硬件加速

产品形态

  • 云端、边缘计算端、移动端

计算设备

  • CPU、GPU、NPU、TPU等

(2)大模型特点

内存开销巨大

  • 庞大的参数量。7B模型仅权重就需要14+G内存
  • 采用自回归生成token,需要缓存Attention的k/v,带来巨大的内存开销

动态shape

  • 请求数不固定
  • Token逐个生成,且数量不定

相对视觉模型,LLM结构简单

  • Transformers结构,大部分使decoder-only 

(3)大模型部署挑战

设备

  • 如何应对巨大的存储问题?低存储设备(消费级显卡、手机等)如何部署?

推理

  • 如何加速token的生成速度
  • 如何解决动态shape,让推理可以不间断
  • 如何有效管理和利用内存

服务

  • 如何提升系统整体吞吐量?
  • 对于个体用户,如何降低响应时间?

(4)大模型部署方案

技术点

  • 模型并行
  • 低比特量化
  • Page Attention
  • transformer计算和访存优化
  • Continuous Batch
  • ...

方案

  • huggingface transformers
  • 专门的推理加速框架

云端

  • Imdeploy
  • vllm
  • tensorrt-llm
  • deepspeed
  • ...

移动端

  • llama.cpp
  • mlc-llm
  • ...

2.LMDeploy简介

使LLM在英伟达设备上部署的全流程解决方案。包括轻量化、推理和服务。

推理性能

(1)静态推理性能

固定batch,输入/输出token数量

(2)动态推理性能

真实对话,不定长的输入/输出

核心功能-量化

(1)为什么要做量化?

(2)为什么要做Weight Only的量化?

两个基本概念
  • 计算密集:推理的绝大部分时间消耗在数值计算上;针对计算密集场景,可以通过使用更快的硬件计算单元来提升计算速度。
  • 访存密集:推理时,绝大部分时间小号在数据读取上;针对访存密集型场景,一般通过提高计算访存比来提升性能。
Weight Only量化一举多得
  • 4bit Weight Only量化,将FP16的模型权重量化为INT4,访存量直接将为FP16模型的1/4,大幅降低了访存成本,提高了Decoding的速度。
  • 加速的同时还节省了显存,同样的设备能够支持更大的模型及更长的对话长度。
LLM是典型的访存密集型任务

(3)如何做Weight Only的量化?

  • LMDeploy使用MIT HAN LAB开源的AWQ算法,量化为4bit模型
  • 推理时,先把4bit权重,反量化回FP16(在Kernel内部进行,从G咯罢了Memory读取时仍是4bit),依旧使用的时FP16计算
  • 相较于社区使用比较多的GPTQ算法,AWQ的推理速度更快,量化的时间更短

核心功能-推理引擎TurboMind

持续批处理

请求队列
  • 推理请求首先先加入到请求队列中

 Persistent线程

  1. 若batch中有空闲槽位,从队列拉取请求,尽量填满空闲槽位。若无,继续对当前batch中的请求进行forward。
  2. Batch每forward完一次。
  3. 转步骤1。

有状态的推理

Blocked k/v cache

支持Paged Attention、支撑有状态推理。

block状态

  • Free未被任何序列占用
  • Activate被正在推理的序列占用
  • Cache被缓存中的序列占用

block状态迁移

高性能的cuda kernel

核心功能-推理服务 api server

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/2301_80618119/article/details/135563114

智能推荐

Android开发之打包APK详解_安卓打包apk-程序员宅基地

文章浏览阅读1.6w次,点赞23次,收藏141次。Android开发之打包APK详解_安卓打包apk

springcloudgateway踩过404的坑笔记整理_gateway 404-程序员宅基地

文章浏览阅读3.7k次,点赞2次,收藏6次。错误回顾网关的配置server: port: 80spring: application: name: api-gateway#springCloudgateway配置项对相应 GatewayPropweties cloud: # 网关配置 gateway: # 路由配置:对应RouteDefinition数组 routes: - id: desk-route #路由的编号,保证是唯一的 # _gateway 404

c++备战CCF之力扣简单题(数组中两元素的最大乘积)_c++实现一行数中任意两个乘积最大-程序员宅基地

文章浏览阅读87次。例如nth_element(arr, arr+5, arr+10);是将从小到大排序后应该在arr[5]的元素放在arr[5]这个位置上。若要寻找第k大的数,nth_element(数组名,数组名+元素个数-k,数组名+元素个数)其用法为:函数语句:nth_element(数组名,数组名+第k个元素,数组名+元素个数)冒泡是每次将0~n-i范围内的最大数放在arr[n-1-i]位置,i代表了冒泡的次数。c++的STL里也有快速选择的函数nth_element()快速选择是用于分开较大的数和较小的数。_c++实现一行数中任意两个乘积最大

113-Linux_安装c/c++开发库及连接mysql数据库_linux安装c++ mysql库-程序员宅基地

文章浏览阅读786次。安装开发c/c++的库,命令:==apt install _linux安装c++ mysql库

tar --exclude用法-程序员宅基地

文章浏览阅读1.5w次,点赞5次,收藏13次。有时候我们压缩文件时,不希望把该文件下的某个文件夹或文件压缩进去,我们可以使用tar --exclude命令。可是该命令文件夹路径写法需要特别注意,明明加了--exclude,可是还是把不想压缩的压缩进去了。1、我们以一个文件夹为例,如下结构[pc@localhost tar_test]$ ls -a. .. 1.txt 2.txt 3.txt 4.txt .svn[pc..._tar --exclude

五个步骤完成windows安装nginx并代理本地前端项目静态文件_windows nginx代理前端静态文件-程序员宅基地

文章浏览阅读1.7k次。后端开发经常遇到需要自己启动前后端项目的问题,这时候如果你的工作电脑比较垃圾,那么同时启动前后端就会变得特别卡。可以在电脑上放一个nginx,代理前端项目的静态文件夹,这样就省去了启动前端项目的开销。一、下载nginx链接:http://nginx.org/en/download.html二、解压nginx解压后目录结构如下:三、修改conf文件夹中的nginx.con..._windows nginx代理前端静态文件

随便推点

yum报:[Errno 14] curl#6 - “Could not resolve host: mirrors.cqu.edu.cn;Unknown error“未知的错误,正在尝试其他镜像类错误_could not resolve host: mirrors.cqu.edu.cn; unknow-程序员宅基地

文章浏览阅读1.1w次,点赞9次,收藏15次。报错信息:[root@localhost ~]# yum install bind bind-utils.x86_64 -y已加载插件:fastestmirror, langpacksCould not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stock error was14: curl#6 - "Could not resolve hos_could not resolve host: mirrors.cqu.edu.cn; unknown error

自动驾驶简介 转自: 智车科技_智能驾驶-程序员宅基地

文章浏览阅读484次。技术分级自动驾驶技术分为多个等级,目前国内外产业界采用较多的为美国汽车工程师协会(SAE)和美国高速公路安全管理局(NHTSA)推出的分类标准。按照SAE的标准,自动驾驶汽车视智能化、自动化程度水平分为6个等级:无自动化(L0)、驾驶支援(L1)、部分自动化(L2)、有条件自动化(L3)、高度自动化(L4)和完全自动化(L5)。两种不同分类标准的主要区别在于完全自动驾驶场景下,SAE更加细分了自动..._智能驾驶

【jQuery】调用show()和hide()方法显示和隐藏元素_调用 控件名.hide( ); 和 控件名.show( )-程序员宅基地

文章浏览阅读2.3k次。show()和hide()方法用于显示或隐藏页面中的元素,它的调用格式分别为:$(selector).hide(speed,[callback])和$(selector).show(speed,[callback])参数speed设置隐藏或显示时的速度值,可为“slow”、“fast”或毫秒数值,可选项参数callback为隐藏或显示动作执行完成后调用的函数名。例如,在页面_调用 控件名.hide( ); 和 控件名.show( )

J2EE开发系列视频教程_j2ee基础免费教学视频-程序员宅基地

文章浏览阅读1.2k次。BF-TECH3.0 J2EE软件工程师高薪就业品牌课程适合人群:初级课时数量:900课时用到技术:J2EE涉及项目:权限管理通用模块、易买网、CRM客户关系管理系统等咨询qq:1840215592J2EE开发视频教程结合项目,进行实战图书馆信息管理系统、QQ聊天室、B2C网上书店网、论坛短消息、基于JSP B/S架构的企业门户网、租房网管理系统、个人博客系统、宠物商店_j2ee基础免费教学视频

Java开发从入门到精通(一):Java的基础环境知识入门:java概述、jdk安装,idea安装,环境变量配置、jdk组成、程序原理_idea和jdk环境变量配置-程序员宅基地

文章浏览阅读409次,点赞9次,收藏7次。Java开发从入门到精通(一):Java的基础环境 知识入门:java概述、jdk安装,idea安装,环境变量配置、jdk组成、程序原理一个java程序的完整的运行过程是先使用开发工具javac来编译代码,再使用java将class程序送进jvm虚拟机中运行,代码中涉及到的程序例如system.out.println就是java的程序,jvm通过核心类库来调用这个程序完成输出打印功能,JVM和核心类库统称为JRE,也就是java的运行环境,而JVM、核心类库和开发工具java,javac统称为JDK。_idea和jdk环境变量配置

HTML5基础知识-程序员宅基地

文章浏览阅读4k次,点赞20次,收藏90次。一、初识HTMLHTML:Hyper Text Markup Language(超文本标记语言)超文本包括:文字、图片、音频、视频、动画等HTML5的优势: 跨平台、 W3C标准 World Wide Web Consortium(万维网联盟) 成立于1994年,Web及时领域最权威和具影响力的国际中立性技术标准机..._html5基础知识

推荐文章

热门文章

相关标签