HiHuo
首页
博客
手册
工具
关于
首页
博客
手册
工具
关于
  • AI 基础设施深度教程

    • AI Infra 深度教程
    • GPU容器化

      • 01-GPU 架构基础
      • NVIDIA 容器运行时
      • GPU 共享与隔离
      • GPU 监控与调试
    • Kubernetes GPU调度

      • Device Plugin 机制深度解析
      • GPU 调度器实现
      • 拓扑感知调度
      • 弹性 GPU 调度
    • AI训练平台

      • 分布式训练框架
      • 训练任务调度
      • 模型存储与管理
      • 实验管理
      • 超参数优化
    • 推理服务

      • 推理引擎原理
      • 模型服务框架
      • 动态批处理
      • 推理优化技术
      • 多模型服务
    • 异构计算

      • 05-异构计算
      • 异构计算概述
      • GPU 虚拟化技术
      • NPU 与专用 AI 芯片
      • 设备拓扑感知调度
      • 算力池化与弹性调度
    • AI工作流引擎

      • 06-AI工作流引擎
      • AI 工作流引擎概述
      • Kubeflow Pipelines 深度实践
      • 03-Argo Workflows 深度实践
      • 04-数据版本管理
      • 05-实验跟踪与模型注册
    • MLOps实践

      • 07-MLOps实践
      • 01-MLOps 成熟度模型
      • 02-数据集工程
      • 03-Feature Store 特征存储
      • 04-模型评测体系
      • 05-模型安全与治理
    • AIOps实践

      • 08-AIOps实践
      • 01-AIOps概述与架构
      • 02-异常检测算法
      • 03-根因分析与告警聚合
      • 04-智能运维决策
      • 05-AIOps平台实战
    • 面试专题

      • 09-面试专题
      • 01-AI基础设施核心面试题
      • 02-大模型面试题
      • 03-系统设计面试题
    • CUDA编程与算子开发

      • 10-CUDA 编程与算子开发
      • 01-CUDA编程模型与内存层次
      • 02-高性能 Kernel 开发实战
      • 03-Tensor Core 与矩阵运算
      • 04-算子融合与优化技术
      • 05-Triton 编程入门
    • 通信与网络底层

      • 11-通信与网络底层
      • 01-NCCL 源码深度解析
      • 02-AllReduce 算法实现
      • 03-RDMA与InfiniBand原理
      • 04-网络拓扑与通信优化
      • 05-大规模集群网络架构
    • 框架源码解析

      • 12-框架源码解析
      • 01-PyTorch分布式源码解析
      • 02-DeepSpeed源码深度解析
      • 03-Megatron-LM源码解析
      • 04-vLLM推理引擎源码解析
      • 05-HuggingFace Transformers源码解析
    • 编译优化与图优化

      • 13-编译优化与图优化
      • 01-深度学习编译器概述
      • 02-TorchDynamo与torch.compile
      • 03-XLA编译器深度解析
      • 04-算子融合与Kernel优化
      • 05-自动调度与代码生成

12-框架源码解析

章节概述

本章深入解析主流AI训练和推理框架的源码实现,包括PyTorch分布式、DeepSpeed、Megatron-LM、vLLM和HuggingFace Transformers,帮助AI Infra工程师理解框架内部机制,为性能调优和二次开发奠定基础。

知识体系

┌─────────────────────────────────────────────────────────────────────────────┐
│                        框架源码解析知识体系                                   │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                              │
│  ┌────────────────────────────────────────────────────────────────────┐     │
│  │                    PyTorch 分布式                                   │     │
│  │                                                                     │     │
│  │   ProcessGroup    │   DDP实现        │   FSDP实现     │   RPC框架  │     │
│  │   ├─ NCCL        │   ├─ Reducer     │   ├─ 分片策略  │   ├─ Agent │     │
│  │   ├─ Gloo        │   ├─ Bucket      │   ├─ 全收集    │   ├─ RRef  │     │
│  │   └─ MPI         │   └─ Hook机制    │   └─ 混合精度  │   └─ Future│     │
│  └────────────────────────────────────────────────────────────────────┘     │
│                                │                                             │
│  ┌────────────────────────────────────────────────────────────────────┐     │
│  │                      DeepSpeed                                      │     │
│  │                                                                     │     │
│  │   ZeRO Stage 1-3  │   Pipeline引擎  │   CPU Offload  │   Activation│     │
│  │   ├─ 优化器分片   │   ├─ 1F1B调度   │   ├─ 参数卸载  │   ├─ 检查点 │     │
│  │   ├─ 梯度分片     │   ├─ 微批次     │   ├─ Adam卸载  │   └─ 分区   │     │
│  │   └─ 参数分片     │   └─ 梯度累积   │   └─ NVMe卸载  │            │     │
│  └────────────────────────────────────────────────────────────────────┘     │
│                                │                                             │
│  ┌────────────────────────────────────────────────────────────────────┐     │
│  │                      Megatron-LM                                    │     │
│  │                                                                     │     │
│  │   MPU并行组       │   张量并行       │   序列并行     │   混合并行  │     │
│  │   ├─ 初始化      │   ├─ Column     │   ├─ QKV分片   │   ├─ 3D并行 │     │
│  │   ├─ 组管理      │   ├─ Row        │   ├─ Dropout   │   ├─ 通信组 │     │
│  │   └─ 进程映射    │   └─ All-Reduce │   └─ LayerNorm │   └─ 调度   │     │
│  └────────────────────────────────────────────────────────────────────┘     │
│                                │                                             │
│  ┌────────────────────────────────────────────────────────────────────┐     │
│  │                        vLLM                                         │     │
│  │                                                                     │     │
│  │   PagedAttention  │   Block管理     │   调度器       │   Continuous│     │
│  │   ├─ 分页机制    │   ├─ BlockTable │   ├─ FCFS      │   Batching  │     │
│  │   ├─ KV缓存      │   ├─ 分配器     │   ├─ 抢占策略  │   ├─ 动态   │     │
│  │   └─ 内存池      │   └─ 碎片管理   │   └─ Swap管理  │   └─ 迭代级 │     │
│  └────────────────────────────────────────────────────────────────────┘     │
│                                │                                             │
│  ┌────────────────────────────────────────────────────────────────────┐     │
│  │                   HuggingFace Transformers                          │     │
│  │                                                                     │     │
│  │   模型抽象层      │   Tokenizer     │   Trainer      │   Generation│     │
│  │   ├─ PreTrained  │   ├─ BPE        │   ├─ 训练循环  │   ├─ Greedy │     │
│  │   ├─ Auto类      │   ├─ Fast       │   ├─ 回调系统  │   ├─ Beam   │     │
│  │   └─ Config      │   └─ 编解码     │   └─ 集成      │   └─ Sample │     │
│  └────────────────────────────────────────────────────────────────────┘     │
│                                                                              │
└─────────────────────────────────────────────────────────────────────────────┘

章节内容

01-PyTorch分布式源码解析

torch.distributed核心

  • ProcessGroup抽象与实现
  • 通信后端: NCCL, Gloo, MPI
  • 初始化与进程组管理

DistributedDataParallel (DDP)

  • Reducer梯度归约
  • Bucket分桶策略
  • 梯度同步Hook机制
  • find_unused_parameters原理

FullyShardedDataParallel (FSDP)

  • 参数分片策略
  • 全收集与分散归约
  • 混合精度与梯度检查点
  • 与DDP对比

RPC框架

  • 分布式自动求导
  • Remote Reference (RRef)
  • Future异步执行

02-DeepSpeed源码深度解析

ZeRO优化器

  • Stage 1: 优化器状态分片
  • Stage 2: 梯度分片
  • Stage 3: 参数分片
  • 通信优化与融合

Pipeline并行引擎

  • 1F1B调度算法
  • 微批次管理
  • 梯度累积与同步
  • 流水线气泡分析

CPU/NVMe Offload

  • 参数卸载机制
  • Adam状态卸载
  • 异步数据传输
  • 分级存储策略

Activation Checkpointing

  • 分区激活检查点
  • CPU激活卸载
  • 内存与计算权衡

03-Megatron-LM源码解析

MPU (Model Parallel Unit)

  • 并行组初始化
  • 进程组管理
  • 全局状态管理

张量并行实现

  • ColumnParallelLinear
  • RowParallelLinear
  • 跨设备All-Reduce

序列并行

  • QKV投影分片
  • Dropout序列分片
  • LayerNorm序列分片
  • 通信优化

3D混合并行

  • TP + PP + DP组合
  • 通信组划分
  • 调度策略

04-vLLM推理引擎源码解析

PagedAttention

  • 分页KV缓存机制
  • Block与BlockTable
  • 内存碎片消除
  • CUDA内核实现

BlockManager

  • 物理块分配
  • 虚拟到物理映射
  • Copy-on-Write优化
  • 内存池管理

Scheduler调度器

  • 请求状态机
  • FCFS调度
  • 抢占与恢复
  • Swap管理

Continuous Batching

  • 迭代级批处理
  • 动态序列加入/退出
  • 吞吐量优化

05-HuggingFace Transformers源码解析

模型抽象层

  • PreTrainedModel基类
  • PretrainedConfig配置
  • Auto类自动推断
  • 权重加载与保存

Tokenizer实现

  • PreTrainedTokenizer
  • Fast Tokenizer (Rust)
  • BPE编解码
  • 批量处理优化

Trainer训练框架

  • 训练循环封装
  • TrainingArguments配置
  • 回调系统设计
  • 分布式训练集成

Generation生成系统

  • GenerationMixin
  • 采样策略: Greedy, Beam, Sampling
  • LogitsProcessor链
  • Top-K/Top-P实现

核心代码示例

PyTorch DDP Reducer

# torch/nn/parallel/distributed.py
class Reducer:
    def __init__(self, params, process_group, bucket_bytes_cap):
        self.process_group = process_group
        self.buckets = self._build_buckets(params, bucket_bytes_cap)

    def _build_buckets(self, params, cap):
        """构建梯度桶,按大小分组"""
        buckets = []
        current_bucket = []
        current_size = 0

        for param in reversed(params):
            param_size = param.numel() * param.element_size()
            if current_size + param_size > cap and current_bucket:
                buckets.append(current_bucket)
                current_bucket = []
                current_size = 0
            current_bucket.append(param)
            current_size += param_size

        if current_bucket:
            buckets.append(current_bucket)
        return buckets

    def reduce_bucket(self, bucket_idx):
        """异步归约一个桶"""
        bucket = self.buckets[bucket_idx]
        flat_grads = torch.cat([p.grad.view(-1) for p in bucket])
        dist.all_reduce(flat_grads, group=self.process_group, async_op=True)

DeepSpeed ZeRO Stage 3

# deepspeed/runtime/zero/stage3.py
class DeepSpeedZeroOptimizer_Stage3:
    def __init__(self, module, optimizer, param_names):
        self.module = module
        self.optimizer = optimizer
        self.world_size = dist.get_world_size()

        # 参数分片
        self.param_partitions = self._partition_parameters()

        # 注册钩子
        self._register_hooks()

    def _partition_parameters(self):
        """将参数分片到各rank"""
        partitions = {}
        for name, param in self.module.named_parameters():
            partition_size = param.numel() // self.world_size
            partitions[name] = partition_size
        return partitions

    def step(self):
        """优化器步骤"""
        # 收集完整梯度
        self._allgather_gradients()
        # 本地更新分片参数
        self.optimizer.step()
        # 广播更新后的参数
        self._allgather_parameters()

vLLM PagedAttention

# vllm/attention/backends/flash_attn.py
def paged_attention_forward(
    query: torch.Tensor,      # [num_tokens, num_heads, head_size]
    key_cache: torch.Tensor,  # [num_blocks, num_heads, head_size, block_size]
    value_cache: torch.Tensor,
    block_tables: torch.Tensor,  # [num_seqs, max_num_blocks]
    context_lens: torch.Tensor,  # [num_seqs]
):
    """分页注意力前向传播"""
    output = torch.empty_like(query)

    # 调用CUDA内核
    paged_attention_v1(
        output,
        query,
        key_cache,
        value_cache,
        block_tables,
        context_lens,
        block_size=16,
        max_context_len=max(context_lens),
    )

    return output

性能对比参考

分布式训练框架对比

特性PyTorch DDPDeepSpeed ZeRO-3Megatron-LM TP
参数规模~10B~1T~1T
通信开销低中高
内存效率低高中
实现复杂度低中高
适用场景中小模型超大模型超大模型

推理引擎对比

特性vLLMTensorRT-LLMText Generation Inference
内存效率高 (PagedAttention)中中
吞吐量高很高中
易用性高中高
定制性高低中

学习路径

Week 1-2: PyTorch分布式基础
├── 阅读 01-PyTorch分布式源码解析
├── 理解ProcessGroup和通信原语
├── 深入DDP Reducer实现
└── 实践FSDP训练

Week 3-4: DeepSpeed深入
├── 阅读 02-DeepSpeed源码深度解析
├── 理解ZeRO三个阶段
├── 分析Pipeline引擎调度
└── 实践ZeRO-Offload

Week 5-6: Megatron-LM
├── 阅读 03-Megatron-LM源码解析
├── 理解MPU设计
├── 实现简单张量并行
└── 配置3D混合并行

Week 7-8: 推理优化
├── 阅读 04-vLLM推理引擎源码解析
├── 理解PagedAttention
├── 分析Continuous Batching
└── 性能调优实践

Week 9-10: 框架集成
├── 阅读 05-HuggingFace Transformers源码解析
├── 理解Auto类和模型加载
├── 深入Trainer实现
└── 定制训练流程

推荐资源

官方文档

  • PyTorch Distributed
  • DeepSpeed Documentation
  • Megatron-LM
  • vLLM Documentation
  • HuggingFace Transformers

源码仓库

  • PyTorch - torch/distributed/, torch/nn/parallel/
  • DeepSpeed - deepspeed/runtime/
  • Megatron-LM - megatron/core/
  • vLLM - vllm/

经典论文

  • "PyTorch Distributed: Experiences on Accelerating Data Parallel Training"
  • "ZeRO: Memory Optimizations Toward Training Trillion Parameter Models"
  • "Megatron-LM: Training Multi-Billion Parameter Language Models"
  • "Efficient Memory Management for Large Language Model Serving with PagedAttention"

下一步学习

完成本章后,建议继续学习:

  1. 13-编译优化与图优化 - XLA、TorchDynamo、算子融合
  2. 11-通信与网络底层 - 如果需要补充通信基础
  3. 10-CUDA编程与算子开发 - 如果需要补充CUDA基础
Next
01-PyTorch分布式源码解析