文章目录
- 部署相关
- 数据并行
- 模型并行
- 张量并行
- 管道并行(流水线并行)
- 混合并行(数据并行+模型并行)
- 显存优化技术
- InfiniBand
- 去中心化的All-Reduce操作
- 软件
- 大模型命名
- **1. 模型架构相关**
- **2. 模型用途相关**
- **3. 训练方法相关**
- **4. 多模态相关**
- **5. 规模相关**
- **6. 其他常见关键词**
- 模型参数
- 单位
- FP16和BF16对比
- 常见存储格式
- ONNX
- GGUF
- safetensor
- 主要区别
部署相关
数据并行
每个GPU保存完整模型副本,处理不同数据批次,通过All-Reduce同步梯度(需结合显存优化)
模型并行
张量并行
在单节点内使用Megatron-LM拆分Transformer层的矩阵运算
管道并行(流水线并行)
将模型层拆分到不同节点(如Layer 0-10在Node 1,Layer 11-20在Node 2)
混合并行(数据并行+模型并行)
使用PyTorch的torch.distributed和RPC框架将模型分割。然后,在每个模型并行组内部,可能还可以使用数据并行,复制多个这样的模型并行组,每个组处理不同的数据子集。这样既分散了模型参数,又增加了数据处理量。
尽可能减少数据传输量,或者使用梯度累积、异步更新等技术来缓解通信压力。
用FP16或BF16来减少内存占用
优化库如DeepSpeed的ZeRO
显存优化技术
激活检查点(梯度检查点)、混合精度训练(FP16/BP16)、卸载参数到CPU(如ZeRO-Offload)等。
InfiniBand
去中心化的All-Reduce操作
软件
框架/库 | 功能 |
---|---|
PyTorch | 支持分布式训练(DistributedDataParallel、RPC)、模型并行API |
DeepSpeed | 提供ZeRO优化(显存分级分区)、3D并行、梯度累积等 |
Megatron-LM | NVIDIA开发的 Transformer 模型并行库,支持高效张量拆分 |
NCCL | NVIDIA 集体通信库,优化多 GPU 通信效率 |
组件 | 说明 |
---|---|
通信库 | NCCL(单机多卡)、MPI(跨节点通信)、AWS Elastic Fabric Adapter(EFA)等 |
分布式训练框架 | Horovod(基于MPI)、PyTorch Elastic、DeepSpeed(支持跨节点3D并行) |
监控与日志 | Prometheus+Grafana监控GPU利用率、通信延迟;日志集中存储(如ELK) |
大模型命名
1. 模型架构相关
关键词 | 说明 |
---|---|
Transformer | 基于Transformer架构的模型(如GPT、BERT)。 |
GPT | Generative Pre-trained Transformer,生成式预训练模型(如GPT-3、GPT-4)。 |
BERT | Bidirectional Encoder Representations from Transformers,双向编码模型。 |
T5 | Text-To-Text Transfer Transformer,文本到文本的统一框架。 |
LLaMA | Large Language Model Meta AI,Meta开源的轻量级大模型。 |
PaLM | Pathways Language Model,Google开发的大规模语言模型。 |
MoE | Mixture of Experts,专家混合模型(如Switch Transformer)。 |
2. 模型用途相关
关键词 | 说明 |
---|---|
Instruct | 经过指令微调的模型,适合任务型对话或指令执行(如InstructGPT)。 |
Chat | 面向对话场景优化的模型(如ChatGPT、ChatGLM)。 |
Code | 面向代码生成或理解的模型(如Codex、CodeLlama)。 |
Math | 面向数学问题求解的模型(如Minerva、MathGPT)。 |
Medical | 面向医疗领域的模型(如Med-PaLM、BioGPT)。 |
Legal | 面向法律领域的模型(如LawGPT)。 |
Finance | 面向金融领域的模型(如FinGPT)。 |
3. 训练方法相关
关键词 | 说明 |
---|---|
Pre-trained | 预训练模型,通常需要进一步微调(如Pre-trained BERT)。 |
Fine-tuned | 经过微调的模型(如Fine-tuned GPT-3)。 |
Distill | 通过知识蒸馏得到的轻量级模型(如DistilBERT、DistilGPT)。 |
SFT | Supervised Fine-Tuning,监督微调模型。 |
RLHF | Reinforcement Learning from Human Feedback,基于人类反馈的强化学习(如ChatGPT)。 |
LoRA | Low-Rank Adaptation,低秩适配微调方法。 |
Adapter | 使用适配器模块微调的模型。 |
4. 多模态相关
关键词 | 说明 |
---|---|
VL | Vision-Language,视觉-语言多模态模型(如VL-BERT、VL-T5)。 |
CLIP | Contrastive Language–Image Pretraining,图文对比预训练模型。 |
Flamingo | 多模态对话模型(如DeepMind Flamingo)。 |
DALL·E | 文本生成图像的模型(如DALL·E 2)。 |
Stable Diffusion | 文本生成图像的扩散模型。 |
5. 规模相关
关键词 | 说明 |
---|---|
Large | 强调模型规模较大(如Large Language Model, LLM)。 |
Small | 强调模型规模较小(如Small GPT)。 |
Mini | 更小规模的模型(如MiniGPT)。 |
Tiny | 极小型模型(如TinyBERT)。 |
7B/13B/70B | 模型参数量(如LLaMA-7B、DeepSeek-70B)。 |
6. 其他常见关键词
关键词 | 说明 |
---|---|
Embedding | 嵌入模型,用于生成向量表示(如Sentence-BERT)。 |
Zero-shot | 零样本学习能力(如GPT-3 Zero-shot)。 |
Few-shot | 少样本学习能力(如GPT-3 Few-shot)。 |
Multilingual | 多语言支持的模型(如mBERT、XLM-R)。 |
Open | 开源模型(如OpenLLaMA)。 |
Ultra | 强调性能或规模的极致(如UltraGPT)。 |
Neo | 新一代模型(如GPT-Neo)。 |
X | 强调扩展性或通用性(如T5-XL、GPT-X)。 |
模型参数
单位
单位 | 说明 |
---|---|
FP32(单精度浮点数) | 这是最常见的浮点数格式之一,每个数值占用32位(4字节)。它提供了一个较好的平衡,既能保证数值的精确度又能保持计算效率。在深度学习领域,FP32通常用于确保训练过程中的数值稳定性和模型的准确性。 |
FP16(半精度浮点数) | 每个数值占用16位(2字节),相比FP32,它可以减少一半的显存使用量,并且由于数据量减小,可以加快计算速度和提升硬件利用率。尽管它的数值范围和精度都比FP32低,但在很多情况下,特别是在深度学习推理阶段,使用FP16可以在几乎不损失模型准确性的前提下显著提高性能。 |
BF16(Brain Floating - Point 16) | 是Google提出的一种16位浮点数格式,旨在加速机器学习模型的训练和推理过程。BF16保留了与FP32相同的指数位宽,但减少了尾数的位宽,从而将数值表示压缩到16位。这使得BF16比FP32占用更少的存储空间和带宽,同时在许多情况下仍能保持相近的数值稳定性和准确性。 |
F8_E4M3(8位浮点数的一种) | 这是一个较为新颖的浮点数表示形式,其中“F8”代表8位浮点数,“E4M3”指的是这种格式的具体分配方式——指数部分占4位,尾数(也称作有效数字)部分占3位。相比于传统的FP32或FP16,F8_E4M3提供了更低的精度和更小的数值范围,但它极大地减少了存储需求和内存带宽消耗,这使得它在特定应用场景中非常有用,如在边缘设备上部署轻量级的神经网络模型或者进行大规模数据处理时优化性能和效率。不过,使用这种低精度格式可能会导致数值稳定性问题和精度下降,因此它的应用需要根据具体情况仔细评估。 |
FP16和BF16对比
在深度学习和机器学习领域,FP16(Half-precision floating-point format)和BF16(Brain Floating Point 16-bit)是两种常用的16位浮点数格式,它们各自有着不同的特性和应用场景。以下是对这两种数据类型的详细对比:
数值表示
单位 | 说明 |
---|---|
FP16 | 这种格式使用5位表示指数,10位表示尾数(加上隐含的前导1位),因此它可以提供更高的精度,尤其是在表示较小数值时。然而,由于其指数部分较少,数值范围相对有限。 |
BF16 | 相比之下,BF16保留了与FP32相同的8位指数宽度,但只有7位用于尾数(不包括隐含的前导1)。这意味着它能够表示更大范围的数值,但在精度上有所牺牲,特别是在小数值方面。 |
精度和数值范围
单位 | 说明 |
---|---|
FP16 | 提供了较高的精度,特别是对于较小的数值。它的最小正数大约为 |
6.1×10−5 ,最大正数约为65,5049。 | |
BF16 | 虽然在小数值上的精度不如FP16,但它能表示比FP16更广范围的数值。BF16的动态范围与FP32相同,这使得它非常适合处理需要大范围数值的任务,例如神经网络中的梯度更新。 |
应用场景
单位 | 说明 |
---|---|
FP16 | 适用于对精度要求较高的任务,尤其是那些涉及较小数值的操作。例如,在图像处理、科学计算以及某些深度学习模型中,FP16可以用来提高效率同时保持必要的精度。 |
BF16 | 因其较大的数值范围,特别适合于大规模神经网络的训练,特别是在Google TPU和其他支持BF16的硬件上。BF16在这些环境下不仅能节省存储空间,还能提高计算速度。 |
硬件支持
|FP16|广泛支持,并已在大多数现代GPU上得到优化,特别是NVIDIA的Volta、Turing、Ampere系列GPU。|
|BF16|主要由Google的TPU提出并优化,并且在NVIDIA的A100 GPU中也提供了对BF16的支持。许多深度学习框架如TensorFlow和PyTorch也开始支持BF16格式。|
性能
单位 | 说明 |
---|---|
FP16 | 通过混合精度训练可以在显存较小的GPU上训练更大的模型或在同一显存的GPU上运行更多的模型,同时提升训练速度。 |
BF16 | 因为其较大的指数范围,BF16更适合深度学习中的大范围梯度计算,尤其在训练大规模神经网络时,性能可能优于FP16,特别是在使用专门优化BF16的硬件时。 |
综上所述,尽管FP16和BF16都是16位浮点数格式,它们在精度、数值范围和应用场景上有所不同。选择哪种格式取决于具体的应用需求、硬件支持以及对精度和数值范围的要求。对于大多数深度学习训练任务,尤其是大规模神经网络的训练,BF16由于其更大的数值范围和对硬件优化的优势,越来越成为主流选择8。而对于需要较高精度的小范围数值计算的任务,FP16可能是更好的选择。
常见存储格式
ONNX
Open Neural Network Exchange (ONNX) 是一种开放式的文件格式,用于表示机器学习模型。通过ONNX,模型可以在不同的框架之间进行转换和共享,提高了模型的可移植性和灵活性。
是一种中间表示格式,它的设计目的是为了促进不同框架之间的互操作性,允许开发者在不同的工具链之间共享和部署模型。
GGUF
是一种专为大规模语言模型设计的二进制格式,旨在提高加载效率和降低资源消耗,特别适合于边缘计算环境下的模型部署。
safetensor
SafeTensors 是由Hugging Face推出的一种安全、可靠且高效的机器学习模型存储格式。它的设计旨在简化和精简大型复杂张量的存储和加载过程,同时确保安全性。与传统的模型存储格式相比,SafeTensors不包含执行代码,因此在加载模型时无需进行反序列化操作,减少了潜在的安全风险
主要区别
用途: 虽然两者都可以用来存储模型参数,但GGUF更多地关注于大规模语言模型的优化存储和高效加载,而SafeTensors则更侧重于提供一个安全且高效的通用模型存储解决方案。
安全性: SafeTensors强调的是防止恶意代码执行的安全性,而GGUF虽然也考虑到了一些安全性问题,但其重点在于优化性能和易用性。
适用场景: GGUF更适合需要频繁加载不同模型的场景,特别是在边缘计算环境中;SafeTensors则适用于任何需要高性能和高安全性的深度学习模型部署场合。