“10b”、“13b”、"70b"等术语通常指的是大型神经网络模型的参数数量。其中的 “b” 代表 “billion”,也就是十亿。表示模型中的参数量,每个参数用来存储模型的权重和偏差等信息。例如:
“10b” 意味着模型有大约 100 亿个参数。
“13b” 意味着模型有大约 130 亿个参数。
“70b” 意味着模型有大约 700 亿个参数。
例如:Meta 开发并公开发布的 Llama 2 系列大型语言模型 (LLM),这是一组经过预训练和微调的生成文本模型,参数规模从 70 亿(7b)到 700 亿(70b)不等。经过微调的LLMs(称为 Llama-2-Chat)针对对话场景进行了优化。
meta-llama/Llama-2-7b-hf
meta-llama/Llama-2-13b-hf
meta-llama/Llama-2-70b-hf
输入:仅输入文本
输出:仅生成文本
模型架构:Llama 2 是一种使用优化的 Transformer 架构的自回归语言模型。调整后的版本使用监督微调(SFT)和带有人类反馈的强化学习(RLHF)来适应人类对有用性和安全性的偏好。
1.模型权重
模型权重是模型参数中的一部分,通常是指神经网络中连接权重(weights)。这些权重决定了输入特征与网络层之间的连接强度,以及在前向传播过程中特征的传递方式。所以模型
2.梯度
在训练过程中,计算梯度用于更新模型参数。梯度与模型参数的维度相同。
3.优化器参数
一些优化算法(如带有动量的优化器)需要保存一些状态信息,以便在每次更新时进行调整。这些状态信息也会占用一定的显存。比如:
4.输入数据和标签
训练模型需要将输入数据和相应的标签加载到显存中。这些数据的大小取决于每个批次的样本数量以及每个样本的维度。
5.中间计算
在前向传播和反向传播过程中,可能需要存储一些中间计算结果,例如激活函数的输出、损失值等。
6.临时缓冲区
在计算过程中,可能需要一些临时缓冲区来存储临时数据,例如中间梯度计算结果等。减少中间变量也可以节省显存,这就体现出函数式编程语言的优势了。
7.硬件和依赖库的开销
显卡或其他硬件设备以及使用的深度学习框架在进行计算时也会占用一些显存。
【以 Llama-2-7b-hf 为例】
数据类型:Int8
模型参数: 7B * 1 bytes = 7GB
梯度:同上7GB
优化器参数: AdamW 2倍模型参数 7GB * 2 = 14GB
LLaMA的架构(hidden_size= 4096, intermediate_size=11008, num_hidden_lavers= 32, context.length = 2048),所以每个样本大小:(4096 + 11008) * 2048 * 32 * 1byte = 990MB
A100 (80GB RAM)大概可以在int8精度下BatchSize设置为50
综上总现存大小:7GB + 7GB + 14GB + 990M * 50 ~= 77GB
Llama-2-7b-hf模型Int8推理由上个章节可得出现存大小6.5GB, 由此可见,模型训练需要的显存是至少推理的十几倍。
【背景】假设神经网络中某一层是做矩阵乘法, 其中的输入
x
x
x 的形状为
4
×
5
4 \times 5
4×5, 模型参数
w
w
w 的形状为
5
×
8
5 \times 8
5×8, 那么, 矩阵乘法输出形状为
4
×
8
4 \times 8
4×8 。如下:
W4/8A16量化方案,显著节省显存:存储时int4/8,计算时FP16
DP: Data Parallel
MP: Model Parallel
deepspeed 的参数配置可参考:
项目:https://github.com/microsoft/DeepSpeed/tree/master/blogs/deepspeed-chat
deepspeed最近推出的RLHF pipeline如下图,和之前很多LLM类似使用三部曲:sft、reward model、PPO,亮点是在第三步使用奖励模型对sft微调模型进行ppo时:
项目链接:https://github.com/NVIDIA/FasterTransformer
将张量并行 (TP) 和流水线并行 (PP) 应用于transformer模型。
使用fastertransformer运行 GPT 模型的工作流程是:
tgi项目:https://github.com/huggingface/text-generation-inference
注:text-generation-inference 这个项目里Fused qkv 以及 Fused gate and up projs的好处:可以并行计算。
注:tgi不支持量化后的模型,但是Tensort-LLM(也是微软提出的)支持。
项目:https://github.com/NVIDIA/Megatron-LM
论文:Megatron-LM: Training Multi-Billion Parameter Language Models Using
Model Parallelism
论文链接:https://arxiv.org/pdf/1909.08053.pdf
PS:codegeex就是采用的是8头TP,192头DP,共1536块GPU进行训练
采用的训练框架:Megatron + DeepSpeed ZeRO2。
项目:https://github.com/THUDM/CodeGeeX/tree/7365d9df242d87a5583d3f203e4b6c547dc6240e
codegeex paper: https://arxiv.org/abs/2303.17568
codegeex模型结构:
拿llama为例子:
上表源自《A Survey of Large Language Models》
目前企业应用大模型面临诸多难点:模型体积大,训练难度高;算力规模大,性能要求高;数据规模大,数据质量参差不齐。大模型产业化需要云计算厂商将模型开发、训练、调优、运营等复杂过程封装起来,通过低门槛、高效率的企业级服务平台深入产业,为千行百业提供服务。
【举例】(非guanggao)文心千帆大模型平台提供公有云服务、私有化部署两大交付模式。
[1] 大语言模型(LLM)分布式训练框架总结
[2] 【论文阅读】Megatron-LM要点
[3] Megatron LM 论文精读【论文精读】.李沐论文解读.b站
[4] 详谈大模型训练和推理优化技术.华师王嘉宁
[5] Finding the cause of RuntimeError: Expected to mark a variable ready only once
[6] 百度工程师首次现场演示:“文心千帆”如何可视化微调大模型
[7] 开源大模型部署及推理所需显卡成本必读:也看大模型参数与显卡大小的大致映射策略
[8] 也看大模型训练中的显存占用分析及优化方法:解析问题思路与策略的一些总结
[9] 大模型的好伙伴,浅析推理加速引擎FasterTransformer
[10] [NLP]深入理解 Megatron-LM(详解并行策略)
[11] 图解大模型训练之:Megatron源码解读2,模型并行
[12] https://github.com/NVIDIA/FasterTransformer/blob/main/docs/gpt_guide.md
[13] 一步一步理解大模型:零冗余优化器技术
[14] 阿里云. Llama2-7B基于PAI-DSW的全参数微调训练,训练参数
[15] DeepSpeed结合Megatron-LM训练GPT2模型笔记
[16] 大模型时代,是 Infra 的春天还是冬天?昆仑万维 AI-Infra 负责人
[17] https://github.com/microsoft/DeepSpeed、
[18] LLM(十八):LLM 的推理优化技术纵览