DVC パイプライン

Machine Learning のための CI/CD

Ravi Bhadauria

Machine Learning Engineer

データパイプラインの必要性

  • データのバージョン管理だけでは十分ではありません
  • データリネージ(データの来歴)の追跡が重要です
    • フィルタリング、クレンジング、変換
    • モデルのトレーニング
  • 必要な処理のみを実行します
  • 有向非巡回グラフ(DAG)内のステップ

モデルの前処理、トレーニング、成果物の関係を示すDAGの概略図

Machine Learning のための CI/CD

DVC パイプライン

  • ML ワークフローと依存関係を定義するステージの連続

  • dvc.yaml ファイルで定義します

    • 入力データとスクリプト(deps)
    • ステージ実行コマンド(cmd)
    • 出力成果物(outs)
      • metrics や plots などの特殊なデータ
  • GitHub Actions のワークフローに類似

    • CI/CD ではなく ML タスクに特化
    • GHA のステップとして抽象化可能
Machine Learning のための 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
    
Machine Learning のための 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
Machine Learning のための 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"`
Machine Learning のための CI/CD

キャッシュされた結果の活用

  • キャッシュされた結果を使って反復を高速化します
-> dvc repro
Stage 'preprocess' didn't change, skipping
Running stage 'train' with command: ...
Machine Learning のための CI/CD

DVC パイプラインの可視化

-> dvc dag
+------------+ 
| preprocess | 
+------------+ 
       *       
       *       
       *       
  +-------+    
  | train |    
  +-------+
1 https://dvc.org/doc/command-reference/dag
Machine Learning のための CI/CD

まとめ

  • DVC パイプラインは次の点で役立ちます
    • キャッシュによる高速な反復
    • dvc.yaml と dvc.lock による再現性
    • CI/CD の実現
  • dvc stage add でパイプラインを生成します
  • dvc repro で再現・実行します
  • dvc dag で可視化します
Machine Learning のための CI/CD

練習しましょう!

Machine Learning のための CI/CD

Preparing Video For Download...