Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Data Version Control による 実験管理の実務での適用事例 / An exp...

Sansan DSOC
February 18, 2021

Data Version Control による 実験管理の実務での適用事例 / An experiment management example by Data Version Control

■イベント 
:第4回 MLOps 勉強会
https://mlops.connpass.com/event/202359/

■登壇概要
タイトル:Data Version Control による実験管理の実務での適用事例
発表者: 
DSOC R&D研究員 高橋 寛治

▼Twitter
https://twitter.com/SansanRandD

Sansan DSOC

February 18, 2021
Tweet

More Decks by Sansan DSOC

Other Decks in Technology

Transcript

  1. Data Strategy and Operation Center ⾃⼰紹介 • 2017年 3⽉ ⻑岡技術科学⼤学⼤学院

    修了 • 2017年 4⽉ Sansan株式会社 ⼊社 • 現在 ⾃然⾔語処理とスマブラ担当 ⾼橋 寛治 Kanji Takahashi kanji250tr kanjirz50 Sansan 株式会社 DSOC(Data Strategy & Operation Center) 研究開発部 Data Analysis Group 研究員 オンライン名刺 ディーソック
  2. Data Strategy and Operation Center Contents • MLOps と本発表で取り扱う範囲 •

    Data Version Control の簡単な紹介 • Data Version Control による実験管理の実務での適⽤事例 • まとめ
  3. Data Strategy and Operation Center MLOps とは 3 いい感じに運⽤するとは? •

    サービスが安定稼働する • 学習のパイプラインがある • ⼊⼒や出⼒が監視される Machine Learning(機械学習)+ Operations(運⽤) 機械学習システムをいい感じに運⽤する ビジネス要件を満たす • サービスがいつでも利⽤可能である • 他のメンバーも改善に⼊れる • 運⽤時の振る舞いの異常に気づける …
  4. Data Strategy and Operation Center MLOps とは 4 ML以前にそもそもソフトウェア開発は難しい •

    DevOps(開発と運⽤)として整備される MLOps は DevOps を ML 向けに改変したようなもの ⽂献「Machine Learning: The High-Interest Credit Card of Technical Debt」 • 機械学習において技術的負債になる要素を紹介 > コードの依存関係よりデータの依存関係は⼿間がかかる > グルーコードやパイプラインを始めとしたスパゲッティなシステム
  5. Data Strategy and Operation Center MLOps のよく⾒る図 5 • 機械学習システムの提供において

    ML Code は⼀部 • ML Code ⾃体の実験管理も⼤変 ※図は⽂献「Hidden Technical Debt in Machine Learning Systems」より引⽤
  6. Data Strategy and Operation Center 本発表の範囲 6 データの準備・前処理・評価をData Version Control

    により⾏う • 検証と本番でできるだけ同じコード、同じフローを使う ※図は⽂献「Hidden Technical Debt in Machine Learning Systems」より引⽤
  7. Data Strategy and Operation Center Data Version Control(DVC) 8 概要

    • 機械学習プロジェクトのためのバージョン管理ツール できること • バージョン管理におけるコミットとして、データや実験をDVCがメタファイル化 • 実体は DVC が管理 ※図はDVCの公式ドキュメントより引⽤ Data は AWS S3など柔軟に 置ける
  8. Data Strategy and Operation Center DVC によるデータのバージョン管理 9 操作 •

    dvc コマンドを通じて⾏う > dvc add train.csv > dvc repro メタファイル • dvc.yaml:パイプラインが yaml で定義される • .dvc:yaml で定義されたデータのメタファイル • .dvc/:配下にキャッシュや設定ファイルが格納される
  9. Data Strategy and Operation Center 詳しくは 10 公式リファレンスが充実しています! • Data

    Versioning:DVC と Git によるデータのバージョン管理⽅法 • Data Access:DVC によるデータの取得⽅法 • Data Pipelines:DVC によるパイプライン(yaml) • Experiments:パイプラインを使った実験管理 導⼊は pip install dvc するだけなので、ぜひ使ってみてください
  10. Data Strategy and Operation Center Data Version Control 導⼊以前の状況と課題 状況

    • あるサービスのために複数のルールベース抽出器が稼働する • 徐々に機械学習に置き換えていく段階 • メンバーは本番稼働するコードを書く • メンバーが少しずつ増えていく 課題 • データの収集、前処理、評価の⽅法が⾃動化されていない(属⼈化) • 検証とサービス稼働でデータの取得⽅法が異なる • 実験の記録が⾯倒で記⼊漏れが発⽣しうる (現在稼働中のサービスの評価結果を即答できないことがある)
  11. Data Strategy and Operation Center DVC でやりたいことを図⽰ 13 リリースタグが打たれているコミットを⾒れば •

    実験が再現できる • 本番稼働中エンジンの性能がわかる Workspace data pipeline code metric 2021.01.10
  12. Data Strategy and Operation Center DVC を使う上でのディレクトリ構成 * 14 Service

    • Dockerfile:本番稼働⽤のコンテナ • worker.py:本番稼働時のワーカ • src/extractor:抽出器パッケージ • setup.py:抽出器のsetup.py • experiment:実験管理ディレクトリ > dvc.yaml:パイプラインの定義 > dvc.lock:メタデータ > src:実験⽤コード > metrics:評価結果 狙い • 単⼀レポジトリで、実験の再現から テスト、本番稼働までできる • pip でインストールされたパッケー ジを使うことで、実験と本番でコー ドの相違が⽣まれにくいようにする *簡略化してます
  13. Data Strategy and Operation Center yaml で記述する複数の抽出器のフロー 15 • 評価は抽出器ごとに⾏うが、評価⽅法はそれぞれ異なる

    • 前処理1までは共通だが時間を要するので実⾏は⼀度だけ 前処理1 ⼊⼒ データ 抽出器1 抽出器2 抽出器3 評価尺度A 評価尺度B 評価尺度A 評価尺度B 前処理2 サービスとして稼働する箇所 記録したい 検証とサービスで 同じように アクセスしたい 取得を ⾃動化したい
  14. Data Strategy and Operation Center dvc.yaml のイメージ * 16 データの取得と評価をそれぞれステージとして定義

    stages: prepare: cmd: python src/prepare.py config/eval_indices.csv deps: - src/prepare.py - config/eval_indices.csv outs: - prepared_data evaluate_extractor1_metrics1 cmd: python src/eval_metrics1.py data/prepared config/eval_indices.csv extraction1 metrics: *簡略化してます データはDBから取得 評価項⽬ごとに定義
  15. Data Strategy and Operation Center 実験の再現と記録 17 再現は容易になった • git

    clone でレポジトリを取得 • 環境変数に DB の設定を記述 • dvc repro でデータの取得から評価まで⾏う 抽出器や前処理に変更があったら記録 • dvc repro でデータの取得から評価まで⾏う • 更新されたファイルを Git で記録 所定の⼿順で実験し記録すれば、リリース時のコミットログを⾒ることで どのような実験・評価結果だったかわかる
  16. Data Strategy and Operation Center DVCにうまく乗っかり本番との差異を無くすための⼯夫 18 ファイル⼊出⼒の基底クラスを作り、実験⽤のグルーコードを減らす • 実験と本番で同じインターフェイスでファイルを取得する

    > 例えば、S3Directory クラスと LocalDirectory クラスがあり、どちらも get_data で 同じ形式のデータが取得できる(取得元は異なる) • 抽出器のインターフェイスを揃える > 前処理済みデータを引数に取り、同名メソッドで抽出する > 抽出器への⼊出⼒はデータクラスで定義 インターフェイスを揃えることで、本番⽤・検証⽤の⼀時的なつなぎ込み コードを作らなくてよくなり、コードの差異が⽣まれにくい
  17. Data Strategy and Operation Center ここまでやってみて実際どうだったのか 19 複雑なのにデータの収集、前処理、評価の⽅法が⾃動化されていない(属⼈化) → DVC

    によりデータの収集から評価まで⾃動化できた → 新しいメンバーが⼊ってきた際に、すぐに実験や改善に取り組めた → 共通のデータで実験できる 実験の記録が不明瞭で、現在稼働しているサービスの性能を即答できない場合がある → 今動いているコードの Github のタグ時点のコミットのファイルを⾒ればわかる 機械学習ではなくルールだが、検証とサービス稼働でデータの取得⽅法が異なる → データ⼊出⼒に関してインターフェイスを定義することで、使う側からは同じに⾒える 学習コストは⼩さいと思う → 他メンバーがガンガン追記できた
  18. Data Strategy and Operation Center 改めて DVC は「コミットの概念」が⼤事だと思う 20 •

    DVC の「コミットの概念」をメンバーが把握することで、ツールが持つ⽣ 産性を引き出すことができると思う • コミットの概念 • バージョン管理においては、コードの変更を記録すること • DVC においては、データを含む実験⼀式の変更を Git で記録すること > データは DVC がメタデータ化 > ⼿順は DVC が yaml として定義 > 評価結果は DVC が記録 ※図はDVCの公式ドキュメントより引⽤
  19. Data Strategy and Operation Center 今後 DVC を機械学習で使っていく上で考えていること 21 パイプラインは引き続き

    DVC に任せる • 実験が再現できることは魅⼒ パラメータ探索はおそらく別ツールを使う • ⾒つかったパラメータを DVC で記録する? > 途中のステップまで DVC で実⾏ > パラメータ探索を再現したいか? • DVC の機能として新旧のパラメータとスコアを⽐較できるが、 使いどころがわからない
  20. Data Strategy and Operation Center まとめ • MLOps についての簡単な説明 •

    Data Version Control の管理の概念の紹介 • Data Version Control による実験管理の実務での適⽤事例について紹介 • 再現実験が容易 • 検証と本番稼働で同じコードが使える(DVCでコードとセットで データが管理できる)ようにインターフェイスを⼯夫 • 本番で動いているコードの評価結果がわかる
  21. Data Strategy and Operation Center 参考⽂献 • D. Sculley, et

    al. "Machine Learning: The High Interest Credit Card of Technical Debt." . In SE4ML: Software Engineering for Machine Learning (NIPS 2014 Workshop).2014. • D. Sculley, et al. "Hidden Technical Debt in Machine Learning Systems." . In Proceedings of the 28th International Conference on Neural Information Processing Systems - Volume 2 (pp. 2503–2511). MIT Press, 2015. • DVC. https://dvc.org/