大模型相关细节

发布于:2025-03-01 ⋅ 阅读:(11) ⋅ 点赞:(0)

持续更新中

  1. 吞吐:
    大模型吞吐量的计算需要综合考虑模型的计算需求、硬件性能、系统架构以及软件优化等多个方面(计算量、硬件性能、并行策略、内存限制、通信开销、模型结构、软件优化、数据加载等)可能没有一个简单的公式,而是需要具体问题具体分析,结合实测和理论估算。

吞吐计算公式: B a t c h s i z e ∗ 设备数 单步时间( s / 步) \frac{Batch size * 设备数}{单步时间(s/步)} 单步时间(s/步)Batchsize设备数
训练吞吐:单位时间内处理的token数(token/s)(包含前向传播,反向传播,梯度同步等)
推理吞吐:单位时间完成的请求数或生成的token数(请求/s,token/s)

  1. FLOPs
  • FLOPs(浮点运算次数)Floating Point Operations :完成一次计算任务所需的浮点运算(加法乘法等)的总次数
  • FLOPS(每秒浮点运算次数)Floating Point Operations Per Second:硬件每秒能执行的浮点运算次数,是衡量计算设备性能的指标;
  • FLOPs是计算量,FLOPS是算力;
  1. DDP(Distributed Data Parallel):
    是 PyTorch 中用于多 GPU 训练的核心并行技术,旨在通过高效的数据并行策略加速模型训练,尤其适合大规模深度学习任务。通过多进程和 Ring-AllReduce 通信实现了高扩展性和低通信开销。其核心优势包括:
  • 模型复制:每个gpu有一个完整的模型;支持单机多卡,多机多卡。
  • 数据分片:数据均匀分配到GPU,每个GPU处理不同的数据子集;多进程(每个gpu一个进程)。
  • 梯度同步:通过高效的通信协议Ring-AllReduce同步梯度,确保所有模型副本的参数一致。

实现:

  • 初始化进程组
    设置分布式训练环境,指定通信后端(如 NCCL)和进程间通信方式

  • 封装模型:
    在这里插入图片描述

  • 数据加载器DistributedSampler确保gpu加载不同的数据分片
    在这里插入图片描述

  • 启动多进程:torch.multiprocessing.spawn
    在这里插入图片描述

  1. 参数量:在这里插入图片描述
    各个模块的参数量:
Multi-head
QKV-w D ∗ ( D n ∗ N ∗ 3 ) D*(D^n*N*3) D(DnN3)
QKV-b ( D n ∗ N ∗ 3 ) ∗ 1 (D^n*N*3)*1 (DnN3)1
dense-w ( D n ∗ N ) ∗ D (D^n*N)*D (DnN)D
dense-b ( D n ∗ N ) ∗ 1 (D^n*N)*1 (DnN)1
FFN
dense-w D ∗ D ′ D*D' DD
dense-b D ′ ∗ 1 D'*1 D1
out_dense-w D ′ ∗ D D'*D DD
out_dense-b D ∗ 1 D*1 D1
LN*2
scale 1*D
bias 1*D

transformer总参数量: L ∗ ( M H A + F F N ) + 2 ∗ L N L*(MHA + FFN) + 2*LN LMHA+FFN+2LN
位置编码: S e q l e n ∗ D Seqlen*D SeqlenD
词典: V o c a b S i z e ∗ D VocabSize*D VocabSizeD

  1. 时间复杂度:
    MHA 和 FFN是计算复杂度的主要贡献者。
  • Attention部分: O ( N 2 ∗ D ) O(N^2*D) O(N2D), 序列长度N是计算瓶颈;多头并行计算所以不增加时间复杂度。
  • FFN部分: O ( N ∗ D 2 ) O(N*D^2) O(ND2),维度D是计算瓶颈
  • 总体: L ∗ ( O ( N ∗ D 2 ) + O ( N 2 ∗ D ) ) L*(O(N*D^2) + O(N^2*D)) L(O(ND2)+O(N2D))
Multi-head 时间复杂度
嵌入层 查表操作 N D ND ND
QKV映射 N ∗ D → D*3D N ∗ 3 D N*D\xrightarrow{\text{D*3D}}N*3D NDD*3D N3D N D 2 ND^2 ND2
attention分数 N ∗ D → D*N N ∗ N N*D\xrightarrow{\text{D*N}}N*N NDD*N NN N 2 D N^2D N2D
加权和 N ∗ N → N*D N ∗ D N*N\xrightarrow{\text{N*D}}N*D NNN*D ND N 2 D N^2D N2D
FFN
第一层扩展 N ∗ D → D*4D N ∗ 4 D N*D\xrightarrow{\text{D*4D}}N*4D NDD*4D N4D N D 2 ND^2 ND2
第二层压缩 N ∗ 4 D → 4D*D N ∗ D N*4D\xrightarrow{\text{4D*D}}N*D N4D4D*D ND N D 2 ND^2 ND2
LayerNorm
均值方差 N ∗ D N*D ND
残差连接 矩阵加法 N ∗ D N*D ND

6.DeepSpeed

推理加速

  1. KV cache:推理时每一步不需要重新计算K,V,将新的输入token与之前序列返回的K,V进行拼接后得到新的K,V(空间换时间);

问题:

  • torch如何高效读取数据?

网站公告

今日签到

点亮在社区的每一天
去签到