大语言模型-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. 开源鸿蒙(OpenHarmonyOS)代码下载及编译

    开源鸿蒙的代码仓在码云上,可以通过以下命令下载源码并编译 本机安装虚拟机 如本地已经安装可以忽略此步 安装指导:https://thoughts.teambition.com/share/614c49 ...

  2. DevSecOps 中的漏洞管理(下)

    建立漏洞管理程序以支持DevSecOps 在讨论DevSecOps及DevOps模型中包含安全性的重要性时,建立有效的漏洞管理实践是非常重要的.这可以通过将漏洞管理设置为程序来实现. 我们可以开始对I ...

  3. OpenHarmony页面级UI状态存储:LocalStorage

      LocalStorage是页面级的UI状态存储,通过@Entry装饰器接收的参数可以在页面内共享同一个LocalStorage实例.LocalStorage也可以在UIAbility内,页面间共享 ...

  4. C#-GroupBox包含控件,如何获取这些控件的名称

    您可以使用 Enumerable.OfType在GroupBox中查找和投射您的RadioButtons: var radioButtons = groupBox1.Controls.OfType&l ...

  5. HarmonyOS账号服务,畅行鸿蒙生态所有应用与服务

    账号对于用户来说并不陌生,在购买新设备或者使用新应用的时候,用户常常会被引导注册或者登录账号,账号就是用户在这些设备或应用内的通行证.根据华为上半年的一项统计,整体上中国网民人均下载App量在68个, ...

  6. Python设置电脑桌面壁纸

    其实 Python 设置电脑桌面壁纸是很简单的,主要是调用 win32gui  这个库来实现的 代码如下: import win32api import win32con import win32gu ...

  7. Minio架构简介

    简介 Minio是一个go编写基于Apache License v2.0开源协议的对象存储系统,是为海量数据存储.人工智能.大数据分析而设计,它完全兼容Amazon S3接口,十分符合存储大容量的非结 ...

  8. Vim 安装与基础操作指南

    0x00 链接 Vim 官网 Vim GitHub Vim 中文文档 0x01 准备 (1)下载与安装 在官网地址找到 Download 标签,在其中根据操作系统选择相应的版本,以下以 Windows ...

  9. arp 的基础概念

    前言 打算整理网络这一块,先把概念写完. 就是有一个问题,那就是为什么有ip地址还有mac地址呢? 原因是这样子的,我们知道ip协议是第三层,那么有一个问题了,如果只有第三层的ip是否能过识别到主机? ...

  10. (react)获取json数据与传入(antd配合)

    import React from 'react'; import {fetch} from 'whatwg-fetch'; // import {HashRouter as Router,Route ...