总结:大模型技术栈---算法与原理

原文地址:大模型技术栈-算法与原理 

  • 1. tokenizer方法
    • word-level
    • char-level
    • subword-level
      • BPE
      • WordPiece
      • UniLM
      • SentencePiece
      • ByteBPE
  • 2. position encoding
    • 绝对位置编码
      • ROPE
      • AliBi
    • 相对位置编码
      • Transformer-XL
      • T5/TUPE
      • DeBERTa
  • 3. 注意力机制
    • Mamba,H3,Hyena,RetNet,RWKV,Linear attention, Sparse attention
  • 4. 分布式训练
    • 数据并行
      • FSDP
      • DDP
      • ZeRO
        • Model state
          • Optimizer->ZeRO1
            • 将optimizer state分成若干份,每块GPU上各自维护一份
            • 每块GPU上存一份完整的参数W,做完一轮foward和backward后,各得一份梯度,对梯度做一次AllReduce(reduce-scatter + all-gather),得到完整的梯度G,由于每块GPU上只保管部分optimizer states,因此只能将相应的W进行更新,对W做一次All-Gather
          • Gradient+Optimzer->ZeRO2
            • 每个GPU维护一块梯度
            • 每块GPU上存一份完整的参数W,做完一轮foward和backward后,算得一份完整的梯度,对梯度做一次Reduce-Scatter,保证每个GPU上所维持的那块梯度是聚合梯度,每块GPU用自己对应的O和G去更新相应的W。更新完毕后,每块GPU维持了一块更新完毕的W。同理,对W做一次All-Gather,将别的GPU算好的W同步到自己这来
          • Parameter+Gradient+Optimizer->ZeRO3
            • 每个GPU维护一块模型状态
            • 每块GPU上只保存部分参数W,做forward时,对W做一次All-Gather,取回分布在别的GPU上的W,得到一份完整的W,forward做完,立刻把不是自己维护的W抛弃,做backward时,对W做一次All-Gather,取回完整的W,backward做完,立刻把不是自己维护的W抛弃. 做完backward,算得一份完整的梯度G,对G做一次Reduce-Scatter,从别的GPU上聚合自己维护的那部分梯度,聚合操作结束后,立刻把不是自己维护的G抛弃。用自己维护的O和G,更新W。由于只维护部分W,因此无需再对W做任何AllReduce操作
        • Residual state
          • activation->Partitioned Activation Checkpointing
            • 每块GPU上只维护部分的activation,需要时再从别的地方聚合过来就行。需要注意的是,activation对显存的占用一般会远高于模型本身,通讯量也是巨大的
          • temporary buffer->Constant Size Buffer
            • 提升带宽利用率。当GPU数量上升,GPU间的通讯次数也上升,每次的通讯量可能下降(但总通讯量不会变)。数据切片小了,就不能很好利用带宽了。所以这个buffer起到了积攒数据的作用:等数据积攒到一定大小,再进行通讯。
            • 使得存储大小可控。在每次通讯前,积攒的存储大小是常量,是已知可控的。更方便使用者对训练中的存储消耗和通讯时间进行预估
          • unusable fragment->Memory Defragmentation
            • 对碎片化的存储空间进行重新整合,整出连续的存储空间。防止出现总存储足够,但连续存储不够而引起的存储请求fail
        • offload
          • ZeRO-Offload
            • forward和backward计算量高,因此和它们相关的部分,例如参数W(fp16),activation,就全放入GPU
            • update的部分计算量低,因此和它相关的部分,全部放入CPU中。例如W(fp32),optimizer states(fp32)和gradients(fp16)等
            • ZeRO-Offload 分为 Offload Strategy 和 Offload Schedule 两部分,前者解决如何在 GPU 和 CPU 间划分模型的问题,后者解决如何调度计算和通信的问题
          • ZeRO-Infinity
            • 一是将offload和 ZeRO 的结合从 ZeRO-2 延伸到了 ZeRO-3,解决了模型参数受限于单张 GPU 内存的问题
            • 二是解决了 ZeRO-Offload 在训练 batch size 较小的时候效率较低的问题
            • 三是除 CPU 内存外,进一步尝试利用 NVMe 的空间
    • 模型并行
      • tensor-wise parallelism
      • pipeline parallelism: GPipe,1F1B,interleaved 1F1B
      • sequence p

你可能感兴趣的:(LLM零碎知识,人工智能,自然语言处理,算法)