配音

Course 3:ML 基础设施

课程简介

分布式训练、GPU 管理、训练平台选型。

🎬 本课程视频:MLOps Production — 机器学习工程生产实践


一、ML 基础设施概览

1.1 基础设施的角色

ML 基础设施支撑着从数据到模型的完整生命周期。没有可靠的基础设施,再好的算法也无法转化为生产价值。

ML 基础设施的核心组件:
1. 计算资源:CPU、GPU、TPU 集群
2. 存储系统:数据湖、特征存储、模型注册表
3. 编排系统:工作流调度、资源管理
4. 网络系统:数据传输、API 网关、负载均衡
5. 监控系统:日志收集、指标监控、告警

1.2 基础设施架构演进

阶段一:单机时代
- 单台机器训练和推理
- Jupyter Notebook + 本地存储
- 适合原型开发和少量数据

阶段二:集群时代
- 多台机器组成计算集群
- 分布式存储(HDFS、S3)
- 任务调度(YARN、Kubernetes)

阶段三:云原生时代
- 容器化和微服务
- 弹性伸缩
- 托管服务(SageMaker、Vertex AI)
- MLOps 平台

二、分布式训练

2.1 为什么需要分布式训练

随着模型和数据规模的增大,单机训练变得不可行:
- 数据并行:数据太大无法装入单机内存
- 模型并行:模型太大无法装入单机显存
- 加速需求:缩短训练时间(从数周到数小时)

2.2 数据并行(Data Parallelism)

数据并行是最常见的分布式训练方式。核心思想:

  1. 将训练数据划分为 $N$ 份,每份分配给一个 worker
  2. 每个 worker 拥有完整的模型副本
  3. 每个 worker 独立计算梯度
  4. 通过梯度同步更新模型参数

同步 SGD:所有 worker 计算完梯度后同步更新
- 优点:训练稳定,与单机 SGD 行为一致
- 缺点:慢 worker(Straggler)拖慢整体速度

异步 SGD:每个 worker 独立更新参数(无需等待)
- 优点:训练速度快
- 缺点:梯度"过时"问题——一个 worker 的梯度可能基于过时的参数计算

# PyTorch 数据并行示例
import torch.nn as nn

model = nn.Linear(100, 10)
model = nn.DataParallel(model)  # 自动数据并行
output = model(input_data)  # 自动分割数据

2.3 模型并行(Model Parallelism)

当模型太大无法装入单个 GPU 时,需要模型并行:

2.4 混合并行

现代大规模训练通常同时使用数据并行和模型并行:

2.5 分布式训练框架

三、GPU 管理

3.1 GPU 资源特性

GPU 在 ML 训练和推理中有不可替代的地位,但 GPU 资源管理面临挑战:

3.2 GPU 利用率优化

显存优化
- 梯度累积:累积多个 batch 的梯度后统一更新
- 混合精度训练(AMP):FP16 训练减少显存一半
- 梯度检查点:牺牲计算换取显存
- offload:将部分参数卸载到 CPU 内存

计算优化
- 选择合适的 batch size(通常 2 的幂次效率最高)
- 使用 DataLoader 的多进程加载
- 将数据预处理与 GPU 计算流水线化

# PyTorch 混合精度训练
from torch.cuda.amp import autocast, GradScaler

scaler = GradScaler()
for data, target in dataloader:
    optimizer.zero_grad()
    with autocast():  # 自动混合精度
        output = model(data)
        loss = loss_fn(output, target)
    scaler.scale(loss).backward()
    scaler.step(optimizer)
    scaler.update()

3.3 GPU 调度

3.4 成本管理

四、ML 平台

4.1 平台功能

一个完整的 ML 平台应该提供:

数据层
- 数据湖/数据仓库
- 特征存储
- 数据版本控制

训练层
- 训练任务调度
- 超参数调优
- 实验追踪

部署层
- 模型注册表
- 推理服务
- 在线实验平台

监控层
- 指标收集
- 漂移检测
- 性能监控

4.2 平台架构

典型的 ML 平台架构:

┌─────────────────────────────────┐
│         用户界面/CLI/API         │
├─────────────────────────────────┤
│  Pipeline  Orchestration(Airflow)│
├──────────┬──────────┬───────────┤
│ Data     │  Training│ Serving   │
│ Pipeline │  Pipeline│ Pipeline  │
├──────────┴──────────┴───────────┤
│     Feature Store   │  Model    │
│ (Redis / Feast)     │  Registry│
├─────────────────────────────────┤
│  Compute(K8s/Slurm) │ Storage   │
│  GPU / CPU Cluster  │ S3/HDFS  │
└─────────────────────────────────┘

4.3 平台选型

开源方案
- MLflow:实验追踪 + 模型注册
- Kubeflow:Kubernetes 上的 ML 工作流
- Airflow:工作流编排
- Feast:特征存储

商业方案
- AWS SageMaker:全托管 ML 平台
- GCP Vertex AI:Google 的 ML 平台
- Azure ML:微软的 ML 平台
- Databricks:数据+AI 统一平台

4.4 基础设施即代码(IaC)

使用代码管理基础设施是现代 ML 平台的最佳实践:

# Terraform 示例 - 创建 ML 基础设施
resource "aws_sagemaker_notebook_instance" "ml_dev" {
  name          = "ml-development"
  role_arn      = aws_iam_role.sagemaker.arn
  instance_type = "ml.t3.medium"
}

resource "aws_sagemaker_model" "prod_model" {
  name               = "prod-model-v1"
  execution_role_arn = aws_iam_role.sagemaker.arn
  primary_container {
    image = "${aws_ecr_repository.ml_model.repository_url}:latest"
  }
}

五、总结

  1. ML 基础设施支撑从数据到模型的完整生命周期
  2. 分布式训练通过数据并行和模型并行加速训练
  3. GPU 管理包括显存优化、利用率优化、成本控制
  4. ML 平台整合数据、训练、部署、监控的全链路能力
  5. 基础设施即代码保证环境的一致性和可复现性

五、云原生 ML 基础设施

5.1 Kubernetes 与 ML

Kubernetes(K8s)已经成为现代 ML 基础设施的核心。它为 ML 工作负载提供:

资源管理:自动调度 GPU/CPU 资源
弹性伸缩:根据负载自动调整计算资源
滚动更新:无宕机地更新服务
服务发现:自动负载均衡

Kubernetes 的关键 ML 组件:
- Kubeflow:Kubernetes 上的 ML 工作流平台
- KServe:模型推理服务
- Volcano:批处理调度器(适合分布式训练)

5.2 存储选型

对象存储(S3、GCS、MinIO):
- 存储训练数据、模型文件、日志
- 高持久性、无限扩展
- 适合数据的长期存储

文件存储(NFS、EFS):
- 多节点共享文件系统
- 适合分布式训练中共享数据
- 性能和扩展性受限于单个文件系统

块存储(EBS、Persistent Disk):
- 高性能单节点挂载
- 适合数据库等需要低延迟的存储
- 不能跨节点共享

5.3 网络架构

ML 系统的网络架构需要考虑:
- 数据上传/下载带宽:训练数据量大,需要高带宽网络
- 节点间通信:分布式训练中高频率梯度同步,需要低延迟的 InfiniBand 或 RoCE
- 推理服务延迟:在线推理需要在几十到几百毫秒内返回结果

5.4 成本优化策略

计算成本优化
- 使用预留实例或承诺使用折扣
- 利用 Spot/Preemptible 实例做容错性强的训练任务
- 使用 Auto Scaling 根据负载自动调整资源

存储成本优化
- 生命周期管理:热数据存高性能存储、冷数据存档
- 数据压缩:列式存储格式(Parquet、ORC)降低存储成本
- 定期清理:删除无用的中间数据和模型

GPU 成本优化
- 使用 GPU 共享和分时调度
- 对小模型使用 CPU 推理
- 模型量化减少 GPU 计算量

延伸阅读