介绍:
基于 Transformer 架构的大型语言模型 (LLM) 已变得越来越普遍。例如,Mistral AI 团队推出了Mistral 7B 模型。了解其推理、微调和训练的内存需求对于高效部署和利用至关重要。
总结:
- 推理内存估算:对于 70 亿参数模型 (7B),估计内存需求如下:
— 浮点精度 28 GB、BF16 精度 14 GB、int8 精度 7 GB。此估算可相应应用于其他版本。
- 训练所需内存:保守估计,在参数数量和类型相同的情况下,推理所需内存约为其四倍。例如,训练具有浮点精度的 7B 模型大约需要 112 GB(28 GB * 4)。
训练大型语言模型的内存要求:
- 梯度:梯度所需的内存等于参数的数量。
- 优化器状态:优化器状态所需的内存取决于所使用的优化器的类型。
— 使用 AdamW 优化器,需要两倍的参数数量。
— 使用 SGD 优化器时,需要与参数数量相当的内存。
采用 LoRA/QloRA 技术的内存使用情况,以 LoRA 为例:
- LoRA涉及在原始模型上运行推理并训练较小的模型以达到与训练原始参数几乎相同的效果。
- 例如,如果您需要微调大小为 1024×512 的参数,使用选择等级为 8 的 LoRA,您只需要微调以下数量的参数:1024×8 + 512×8。
- 此过程需要对原始参数体运行一次推理(无需梯度和优化器状态),但仍需要一些内存来存储计算过程中的数据。使用的总内存是这些要求的总和。
背景:
- 在计算机内存/磁盘存储中,基本单位是字节,系统以 1024 为基础。单位有 KB、MB、GB 和 TB。重要的是不要将它们与十进制系统混淆:1 KB = 1024 字节;1 MB = 1024 KB;1 GB = 1024 MB
参数数量:
- 以Mistral -7B 为例,“7B”表示该 LLM 有 70 亿个参数。
数据类型:
对于训练好的模型,参数类型可以包括:
- float:32 位浮点数,4 个字节
- half/BF16:16 位浮点,2 个字节
- int8:8位整数,1个字节
- int4:4位整数,0.5字节
参数类型所需的存储越少,性能往往越低。
一般情况下参数数量是首要因素,例如同架构下13B-int8模型一般会比7B-BF16模型表现更好。
估计推理的内存使用量:
虽然其他因素也使用内存,但推理过程中内存使用的主要部分是参数。
- 例如,Mistral-7B-BF16 模型所需的内存等于参数数量乘以类型大小:70 亿个参数 * 2 字节 = 140 亿字节。因此,140 亿字节 = 14 * 1,000 * 1,000 * 1,000 / 1024 / 1024 / 1024 ≈ 13 GB(考虑 1000/1024)³ ≈ 0.93。
- 注 1:(1000/1024)³ ≈ 0.93
- 注 2:出于估算目的,将此比率视为 1 更为简单。因此,对于 7B-BF16 模型,内存需求大约为 7 * 2 = 14 GB。此估算值略高于准确计算值,但这是切实可行的,因为推理需要的内存不仅仅是参数。
- 假设各种 llama2–13B 版本的预估内存需求,假设相应类型:float:13 * 4 = 52 GB;half/BF16:13 * 2 = 26 GB;int8:13 GB;int4:13 * 0.5 = 6.5 GB。
估计训练的内存使用量:
训练时为了保证模型收敛,参数类型不能为int8或者int4,一般使用float,如果性能稍差,也可以选择BF16。
- 由于反向传播、Adam 优化、Transformer 架构等因素,训练所需的内存通常是相同大小的 LLM 推理所需内存的 3 到 4 倍。保守估计是使用 4 倍来计算。
例如,训练 Qwen-7B 模型所需的估计内存为:
- 对于浮点型参数:7(十亿个参数)* 4(每个浮点型参数的字节数)* 4 = 112 GB
- 对于 half/BF16 类型参数:7(十亿个参数)* 2(每个 BF16 参数的字节数)* 4 = 56 GB
结论:
了解 Mistral-7B 等模型的内存需求对于优化其部署和使用至关重要。这些信息对于那些考虑使用云服务进行模型训练和推理的人来说尤其重要,因为它会影响硬件的选择和总体成本。
欢迎前往我们的公众号,阅读更多资讯
创作不易,觉得不错的话,点个赞吧!!!