大语言模型-11.模型压缩与部署

书生浦语大模型实战营学习笔记4-模型压缩与部署

本文包括第二期实战营的第5课内容,介绍关于模型压缩的相关内容,主要包括、模型量化和模型部署的相关内容。

模型部署

定义:在软件工程中,部署通常指的是将开发完毕的软件投入使用的过程。在人工智能领域,模型部署是实现深度学习算法落地应用的关键步骤。简单来说,模型部署就是将训练好的深度学习模型在

特定环境中运行的过程。

场景

  • 服务器端:CPU部署,单GPU/TPU/NPU部署,多卡/集群部署等
  • 移动端/边缘端:移动机器人,手机等

模型部署的挑战

前向推理计算量大

大模型参数量巨大,前向推理时需要进行大量计算。

这里给出大模型前向推理所需计算量计算公式:

Kaplan J, McCandlish S, Henighan T, et al. Scaling laws for neural language models[J]. arXiv preprint arXiv:2001.08361, 2020.

\[C_{forward} = 2N + 2n_{layer}n_{ctx}d_{attn}
\]

其中,\(N\)为模型参数量,\(n_{layer}\)为模型层数,\(n_{ctx}\)为上下文长度(默认1024),d_{attn}为注意力输出维度。单位:FLOPs per Token

根据OpenAl团队提供的计算量估算方法,20B模型每生成1个token,就要进行约406亿次浮点运算;照此计算,若生成128个token,就要进行5.2万亿次运算。若模型参数规模达到175B(GPT-3),Batch-Size(Bs)再大一点,每次推理计算量将达到千万亿量级。

以NVIDIA A100为例,单张理论FP16运算性能为每秒77.97 TFLOPS(77万亿),性能捉紧。

内存(显存)开销大

\[\text{内存开销 = 模型权重加载 + KV cache}
\]

模型权重加载开销

以FP16为例,20B模型仅加载参数就需40G+显存。

目前,以NVIDIA RTX 4060消费级显卡为例(参考零售价¥2399),单卡显存仅有8GB;NVIDIA A100单卡显存仅有80GB。

KV cache

这里的KV指的就是Transformer执行注意力时的key和value。kv缓存是为了避免每次采样token时重新计算键值向量。利用预先计算好的k值和v值,可以节省大量计算时间,尽管这会占用一定的存储空间。

同样地,这里给出 KV cache 显存占用估算公式:

https://zhuanlan.zhihu.com/p/624740065

\[M_{kvcache} = 4b \times n_{layer} \times d_{attn} \times (s+n)
\]

其中,\(b\)为batch-size,\(n_{layer}\)为模型层数,d_{attn}为注意力输出维度,\(s\)为输入序列长度,\(n\)为输出序列长度。单位:字节(B)。这前面的系数“4”是因为有k和v这两个向量,而一个fp16向量就占2个字节,并且网络每一层都要缓存这么多个向量,每个向量大小都为\(d_{attn} \times (s+n)\)

以FP16为例,在batch-size为16、输入512 tokens、输出32 tokens的情境下,仅20B模型就会产生10.3GB的缓存。

访存瓶颈

大模型推理是“访存密集”型任务。目前硬件计算速度“远快于”显存带宽,存在严重的访存性能瓶颈,。

以RTX 4090推理175B大模型为例,BS为1时计算量为6.83TFLOPS,远低于82.58 TFLOPs的FP16计算能力:但访存量为32.62 TB,是显存带宽每秒处理能力的30倍。

动态请求

  • 请求量不确定;
  • 请求时间不确定;
  • Token逐个生成,生成数量不确定

这会导致GPU资源利用率下降,导致资源浪费

模型剪枝

知识蒸馏

模型量化

模型量化的加速原理并非利用了计算整数比浮点数快,因为实际上量化是以“浮点数量化、整数存储”的方式进行的。这种方式虽然增加了整数反量化到浮点数时的计算量,但是减小了内存的访存量,降低了数据传输所需时间,提升了计算效率。

模型压缩与部署-书生浦语大模型实战营学习笔记5&大语言模型11的更多相关文章

  1. C语言中setjmp与longjmp学习笔记

    C语言中setjmp与longjmp学习笔记 一.基础介绍 头文件:#include<setjmp.h> 原型:  int setjmp(jmp_buf envbuf) ,然而longjm ...

  2. 【学习笔记】大数据技术原理与应用(MOOC视频、厦门大学林子雨)

    1 大数据概述 大数据特性:4v volume velocity variety value 即大量化.快速化.多样化.价值密度低 数据量大:大数据摩尔定律 快速化:从数据的生成到消耗,时间窗口小,可 ...

  3. 【大数据】Sqoop学习笔记

    第1章 Sqoop简介 Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql.postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MyS ...

  4. Coursera台大机器学习基础课程学习笔记1 -- 机器学习定义及PLA算法

    最近在跟台大的这个课程,觉得不错,想把学习笔记发出来跟大家分享下,有错误希望大家指正. 一机器学习是什么? 感觉和 Tom M. Mitchell的定义几乎一致, A computer program ...

  5. Oracle大数据解决方案》学习笔记5——Oracle大数据机的配置、部署架构和监控-1(BDA Config, Deployment Arch, and Monitoring)

    原创预见未来to50 发布于2018-12-05 16:18:48 阅读数 146  收藏 展开 这章的内容很多,有的学了. 1. Oracle大数据机——灵活和可扩展的架构 2. Hadoop集群的 ...

  6. 【大数据】Hive学习笔记

    第1章 Hive基本概念 1.1 什么是Hive Hive:由Facebook开源用于解决海量结构化日志的数据统计. Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表, ...

  7. 【大数据】Kafka学习笔记

    第1章 Kafka概述 1.1 消息队列 (1)点对点模式(一对一,消费者主动拉取数据,消息收到后消息清除) 点对点模型通常是一个基于拉取或者轮询的消息传送模型,这种模型从队列中请求信息,而不是将消息 ...

  8. 【大数据】Scala学习笔记

    第 1 章 scala的概述1 1.1 学习sdala的原因 1 1.2 Scala语言诞生小故事 1 1.3 Scala 和 Java  以及 jvm 的关系分析图 2 1.4 Scala语言的特点 ...

  9. 【大数据】SparkSql学习笔记

    第1章 Spark SQL概述 1.1 什么是Spark SQL Spark SQL是Spark用来处理结构化数据的一个模块,它提供了2个编程抽象:DataFrame和 DataSet,并且作为分布式 ...

  10. 【大数据】SparkCore学习笔记

    第1章 RDD概述 1.1 什么是RDD RDD(Resilient Distributed Dataset)叫做分布式数据集,是Spark中最基本的数据抽象.代码中是一个抽象类,它代表一个不可变.可 ...

随机推荐

  1. KingbaseES V8R6 sys_squeeze 使用

    sys_squeeze介绍 sys_squeeze是KingbaseES的一个扩展插件,该组件将提供人工调用命令实现对表dead tuple的清理工作.该组件在清理表空间的过程中,不会全程加排他锁,能 ...

  2. 如何使用Java代码混淆技术保护您的应用程序

    摘要 本文探讨了代码混淆在保护Java代码安全性和知识产权方面的重要意义.通过混淆技术,可以有效防止代码被反编译.逆向工程或恶意篡改,提高代码的安全性.常见的Java代码混淆工具如IPAGuard.A ...

  3. idea创建一个干净的SpringMVC项目

    一.创建普通的maven项目 二.右键添加web支持 三.pom.xml配置maven环境 1 <!--导入依赖--> 2 <dependencies> 3 <depen ...

  4. Python---time对象的使用获取时间

    https://www.jb51.net/article/49326.htm 1.time.time() 它返回当前时间的时间戳(1970纪元后经过的浮点秒数). 如果调用这个函数,如:  print ...

  5. AJAX 前端开发利器:实现网页动态更新的核心技术

    AJAX AJAX是开发者的梦想,因为你可以: 在不重新加载页面的情况下更新网页 在页面加载后请求来自服务器的数据 在页面加载后接收来自服务器的数据 在后台向服务器发送数据 HTML页面 <!D ...

  6. 三七互娱《斗罗大陆:魂师对决》上线,Network Kit助力玩家即刻畅玩

    三七游戏旗下的年度旗舰大作<斗罗大陆:魂师对决>现已开启全平台公测.8月1日,三七互娱技术副总监出席了HMS Core.Sparkle游戏应用创新沙龙,展示了在HMS Core Netwo ...

  7. vs报错:RC1004 unexpected end of file found

    如图,在编译代码时,出现报错:RC1004  unexpected end of file found 原因是,cpp最后要多一行才行,不然就会报这个错误 错误示例: int main() { ret ...

  8. Mac 修改版本号

    修改版本号 在安装某些软件(XCode)的过程中, 系统会提示版本低,需要升级到高版本, 而很多人不想升级而需要安装这些软件, 此时只需将版本号修改成软件安装要求的版本号就可以了. 由于SystemV ...

  9. redis 简单整理——HyperLogLog[十三]

    前言 简单介绍一下HyperLogLog. 正文 HyperLogLog并不是一种新的数据结构(实际类型为字符串类型),而 是一种基数算法,通过HyperLogLog可以利用极小的内存空间完成独立总数 ...

  10. c# MVC BundleConfig详解

    前言 因为有很多库在.net core还没有实现迁移,所以呢,我们有时候还是需要的. 这些事什么意思呢? 举一个例子: bundles.Add(new StyleBundle("~/Cont ...