DVC 流水线

面向机器学习的 CI/CD

Ravi Bhadauria

Machine Learning Engineer

为何需要数据流水线

  • 仅对数据做版本控制作用有限
  • 跟踪数据血缘很重要
    • 筛选、清洗与转换
    • 模型训练
  • 只运行必要步骤
  • 以有向无环图(DAG)组织步骤

概述预处理、训练与产物关系的 DAG 示意图

面向机器学习的 CI/CD

DVC 流水线

  • 定义 ML 工作流及依赖的阶段序列

  • 定义于 dvc.yaml 文件

    • 输入数据与脚本(deps
    • 阶段执行命令(cmd
    • 输出产物(outs
      • 特殊数据,如 metricsplots
  • 类似 GitHub Actions 工作流

    • 聚焦 ML 任务而非 CI/CD
    • 可抽象为 GHA 中的一步
面向机器学习的 CI/CD

定义流水线阶段

  • 使用 dvc stage add 创建阶段
dvc stage add \
-n preprocess \
-d raw_data.csv -d preprocess.py \
-o processed_data.csv \
python preprocess.py
  • dvc.yaml 内容
    stages:
    preprocess:
      cmd: python preprocess.py
      deps:
      - preprocess.py
      - raw_data.csv
      outs:
      - processed_data.csv
    
面向机器学习的 CI/CD

依赖图

  • 添加训练步骤,使用上一步的输出
    dvc stage add \
    -n train \
    -d train.py -d processed_data.csv \
    -o plots.png -o metrics.txt \
    python train.py
    
stages:
  preprocess:
    cmd: python preprocess.py
    deps:
    - preprocess.py
    - raw_data.csv
    outs:
    - processed_data.csv

train: cmd: python train.py deps: - processed_data.csv - train.py outs: - plots.png
面向机器学习的 CI/CD

复现流水线

  • 使用 dvc repro 复现流水线
-> dvc repro
Running stage 'preprocess':                                      
> python preprocess.py

Running stage 'train': > python train.py Updating lock file 'dvc.lock'
  • 会生成状态文件 dvc.lock
    • 类似 .dvc 文件,记录 MD5 哈希
    • 立刻提交到 Git 以记录状态 git add dvc.lock && git commit -m "first pipeline repro"`
面向机器学习的 CI/CD

使用缓存结果

  • 利用缓存加速迭代
-> dvc repro
Stage 'preprocess' didn't change, skipping
Running stage 'train' with command: ...
面向机器学习的 CI/CD

可视化 DVC 流水线

-> dvc dag
+------------+ 
| preprocess | 
+------------+ 
       *       
       *       
       *       
  +-------+    
  | train |    
  +-------+
1 https://dvc.org/doc/command-reference/dag
面向机器学习的 CI/CD

小结

  • DVC 流水线的用途
    • 依靠缓存快速迭代
    • 通过 dvc.yamldvc.lock 保证可复现
    • 支持 CI/CD
  • dvc stage add 生成流水线
  • dvc repro 复现/执行
  • dvc dag 可视化
面向机器学习的 CI/CD

Passons à la pratique !

面向机器学习的 CI/CD

Preparing Video For Download...