← 返回 Day 123 正文

Day 123 · 图解

Day 123 — 模型部署 — 图解

1. 模型部署架构

┌─────────────────────────────────────────────────────────────────┐
│                    ML 模型部署架构                               │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  训练阶段                          部署阶段                      │
│  ┌─────────────┐                  ┌─────────────┐              │
│  │ Jupyter     │    导出模型      │ API 服务    │              │
│  │ 训练代码    │───────────────▶  │ (FastAPI)   │              │
│  └─────────────┘                  └──────┬──────┘              │
│                                          │                      │
│                              ┌───────────┼───────────┐         │
│                              ▼           ▼           ▼         │
│                         ┌────────┐  ┌────────┐  ┌────────┐    │
│                         │ Docker │  │K8s集群 │  │Serverless│   │
│                         │ 容器   │  │        │  │        │    │
│                         └────────┘  └────────┘  └────────┘    │
│                                                                 │
│  监控: Prometheus + Grafana                                    │
│  日志: ELK Stack                                               │
│  告警: AlertManager                                           │
└─────────────────────────────────────────────────────────────────┘

2. Flask vs FastAPI 对比

    Flask 模型服务                    FastAPI 模型服务
    
    ┌──────────────────┐            ┌──────────────────┐
    │  同步处理         │            │  异步处理         │
    │  ────────────    │            │  ────────────    │
    │  请求 → 阻塞等待 │            │  请求 → 非阻塞   │
    │  → 返回响应      │            │  → 返回响应      │
    └──────────────────┘            └──────────────────┘
    
    优点:                           优点:
    ✅ 简单易学                      ✅ 高性能
    ✅ 生态成熟                      ✅ 自动 API 文档
    ✅ 文档丰富                      ✅ 类型安全
                                    ✅ 异步支持
    
    缺点:                           缺点:
    ❌ 同步阻塞                      ❌ 学习曲线略高
    ❌ 无自动文档                    ❌ 生态较新
    ❌ 不支持异步
    
    适用: 原型验证                   适用: 生产环境

3. 模型格式对比

    Pickle 格式                      ONNX 格式
    
    ┌──────────────────┐            ┌──────────────────┐
    │  Python 对象      │            │  计算图           │
    │  ────────────    │            │  ────────────    │
    │  pickle.dump()   │            │  标准化算子       │
    │  pickle.load()   │            │  跨语言推理       │
    └──────────────────┘            └──────────────────┘
    
    特点:                           特点:
    🔒 Python only                   🌍 多语言支持
    📦 模型较大                      📦 模型较小
    🐢 推理较慢                      🚀 推理更快
    ⚠️ 安全风险                      🔒 安全
    
    兼容:                           兼容:
    sklearn, pytorch                sklearn → onnx
    (通过 torch.jit)                pytorch → onnx
                                   tensorflow → onnx

4. Docker 容器化流程

    开发环境                        生产环境
    ┌─────────────┐                ┌─────────────┐
    │  代码       │                │  Docker     │
    │  + 模型     │  ──build──▶   │  镜像       │
    │  + 依赖     │                │  (自包含)   │
    └─────────────┘                └──────┬──────┘
                                          │
                              ┌───────────┼───────────┐
                              ▼           ▼           ▼
                         ┌────────┐  ┌────────┐  ┌────────┐
                         │容器 1  │  │容器 2  │  │容器 3  │
                         │:8000   │  │:8001   │  │:8002   │
                         └────────┘  └────────┘  └────────┘
                              │           │           │
                              ▼           ▼           ▼
                         ┌─────────────────────────────────┐
                         │       Nginx 负载均衡            │
                         │       (轮询/加权/IP Hash)       │
                         └─────────────────────────────────┘

5. 模型版本管理

    models/
    ├── v1/
    │   ├── model.onnx          # ONNX 模型文件
    │   ├── model.pkl           # Pickle 备份
    │   ├── metadata.json       # 模型元数据
    │   └── metrics.json        # 评估指标
    ├── v2/
    │   ├── model.onnx
    │   ├── model.pkl
    │   ├── metadata.json
    │   └── metrics.json
    ├── current → v2/           # 符号链接指向当前版本
    └── rollback → v1/          # 符号链接指向上一版本
    
    灰度发布流程:
    ┌──────┐     ┌──────┐     ┌──────┐
    │ v1   │────▶│ v1+v2│────▶│ v2   │
    │ 100% │     │ 50/50│     │ 100% │
    └──────┘     └──────┘     └──────┘