大语言模型-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 集群运维案例 -- 磁盘空间问题导致集群故障

    某商业银行生产系统KingbaseES读写分离集群主库出现故障,导致集群主备发生切换.客户要求说明具体的原因. KingbaseES读写分离集群基本信息: KingbaseES集群信息   操作系统 ...

  2. #对顶堆#nssl 1477 赛

    分析 首先按小到大排序,考虑枚举两个都喜欢的个数\(i\) 那么只喜欢一个的个数各需要\(k-i\),剩下要补充到\(m-k*2+i\)个, 考虑用对顶堆维护大根堆大小仅有\(m-k*2+i\)即可 ...

  3. #背包#nssl 1488 上升子序列

    题目 给一个长度为\(n\)的数组\(a\).试将其划分为两个严格上升子序列,并使其长度差最小. 分析 当\(max([1,i])<min([i+1,n])\)时显然两个区间互不影响,把\(i\ ...

  4. OpenHarmony Meetup 2023 广州站圆满举办,城市巡回全面启航

      "OpenHarmony正当时--技术开源"OpenHarmony Meetup 2023城市巡回活动,旨在通过meetup线下交流形式,解读OpenHarmony作为下一代智 ...

  5. CMake vs Makefile 如何选择适合你的项目构建工具

    CMake vs Makefile: 如何选择适合你的项目构建工具 在软件开发中,构建(build)是一个非常重要的过程.我们需要将源代码转换为可执行文件或库文件.为了完成此过程,我们通常使用构建工具 ...

  6. Qt 5.12.10 国际化

    网上有资料但是不全,所以这里记录一份比较全的 1.创建项目 2.编辑 demo.cpp 这里写button用来做国际化示例,运行软件后是这个样子 #include "demo.h" ...

  7. 痞子衡嵌入式:使能i.MXRT1050,1060 Hab签名或加密启动时App链接在片内SRAM的限制

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是使能i.MXRT1050, 1060 Hab签名或加密启动时App链接在片内SRAM的限制. 最近有客户反馈,在 RT1060 上测试 ...

  8. Tomcat启动闪退的10个解决小技巧

    引言 大家好!在我们日常开发中,使用Tomcat作为Web服务器是相当常见的. 然而,遇到Tomcat启动后立即闪退的问题也不是什么稀罕事. 这种情况可能会让人感到困惑和沮丧,特别是当你急需完成一个项 ...

  9. linux 性能自我学习 ———— 不可中断进程和僵尸进程 [四]

    前言 简单介绍一下不可中断进程和僵尸进程. 正文 先来看下进程的状态: 那么这一列的状态是什么呢? R 是Running 或 Runnable 的缩写, 表示进程在cpu 的就绪队列中,正在运行或者正 ...

  10. docker 应用篇————docker开篇[一]

    前言 因为最近看了一些docker 底层,然后希望把docker应用先编写出来,然后进行细节篇讲解,比如说docker 的底层是如何实现的之类的话题. 正文 docker 这东西怎么说呢?有一些东西需 ...