Save 37% off PRO during our Black Friday Sale! »

MLflowで実験管理してみよう / Let's use MLflow to manage experiments

Ddca38befa8dfb037884f00da72dd1f5?s=47 os1ma
October 14, 2021

MLflowで実験管理してみよう / Let's use MLflow to manage experiments

機械学習に取り組む中で、どんなコードで、どんなパラメータで、どのモデルを作って、評価はどうだったのか、しっかりトラッキングできておらず、後で同じ状態を再現できずに困ることはないでしょうか。

こういった実験管理は、機械学習を本番アプリケーションに組み込む上でも必要な要素であり、最近注目を集めている「MLOps」の一環としても重要です。

今回の講座では、機械学習のライフサイクル管理のためのOSS「MLflow」を使った実験管理を紹介します。

実際にちょっとした機械学習機能を実装するイメージで、デモンストレーションまで実施します。

https://studyco.connpass.com/event/226114/

Ddca38befa8dfb037884f00da72dd1f5?s=128

os1ma

October 14, 2021
Tweet

Transcript

  1. MLflow で実験管理してみよう

  2. ご案内事項 ➢ 質疑について ◦ ご質問は Zoom の「Q&A」からお願いします ▪ Zoom の仕様上、「チャット」は流れてしまい見逃してしまう可能性があります

    ▪ 「チャット」ではなく「Q&A」からご質問お願いします ◦ ご質問には適宜回答させていただきます。講座の最後にも質疑の時間をとらせていただきます ➢ 発表資料について ◦ 発表資料は Speaker Deck にて公開しています
  3. StudyCo について ➢ StudyCo は、IT を中心に勉強会を開催したりしている コミュニティです ➢ 過去の勉強会のテーマ ◦

    アプリケーションの設計 ◦ AWS ◦ 統計・機械学習 ◦ ブロックチェーン ◦ 電子工作 ◦ etc... ➢ 4 年半ほどクローズドな勉強会を続け、色々な知見が たまったので、connpass で公開勉強会を始めました! ➢ 特に最近は「MLOps」という分野に力を入れており、 今日もそういったテーマになります
  4. 発表者紹介 ➢ 名前:大嶋勇樹 ➢ サーバサイド・インフラ中心のエンジニア ◦ Java、AWS、GCP、Docker、Kubernetes、etc… ➢ 最近の興味 ◦

    MLOps、Linux、電子工作、VR ➢ 機械学習については、基本的な考え方を知っているくらい ◦ JDLA Deep Learning for GENERAL #2017 ➢ Twitter:@oshima_123
  5. MLflow で実験管理してみよう

  6. アジェンダ ➢ MLOps の概要 ➢ MLflow の紹介 ➢ 実装した題材説明・デモンストレーション ➢

    MLflow の良さ・課題など ※ 合計 1 時間程度の予定です
  7. MLOps の概要

  8. MLOps と言えば、まずはこの図 出典「Hidden Technical Debt in Machine Learning Systems」 https://proceedings.neurips.cc/paper/2015/file/86df7dcfd896fcaf2674f757a2463eba-Paper.pdf

  9. MLOps とは ➢ 「MLOps 」の定義は色々ありますが、ここでは GCP のドキュメントでの解説を引用します ➢ > MLOps

    は、ML システム開発(Dev )と ML シス テム オペレーション(Ops )の統合を目的とする ML エンジニアリングの文化と手法です ➢ > MLOps を実践すると、統合、テスト、リリー ス、デプロイ、インフラストラクチャ管理な ど、ML システム構築のすべてのステップで自動化 とモニタリングを推進できます GCP のドキュメントより引用 https://cloud.google.com/architecture/mlops-continuous-deliver y-and-automation-pipelines-in-machine-learning?hl=ja 出典:https://ml-ops.org/content/mlops-principles
  10. MLOps のプラクティスの例 ➢ 実験管理 ◦ 実行したコードやパラメータ、モデル、評価 などを保存して再現可能にする ➢ 各種バージョン管理 ◦

    DVC によるデータのバージョン管理や、作成 したモデルのバージョン管理を行う ➢ テスト ◦ モデルが性能を満たすかなどをテスト ➢ サービング ◦ ONNX Runtime や Tensorflow Serving などに より、モデルを本番環境にシームレスにデプ ロイする ➢ リリース ◦ カナリアリリースなどの手法で、本番トラ フィックでもモデルをテストする ➢ ワークフロー管理 ◦ データ取得・前処理・学習・評価・デプロイ のワークフローを自動化する 出典:https://martinfowler.com/articles/cd4ml.html
  11. MLOps のプラクティスの例 ➢ 実験管理 ◦ 実行したコードやパラメータ、モデル、評価 などを保存して再現可能にする ➢ 各種バージョン管理 ◦

    DVC によるデータのバージョン管理や、作成 したモデルのバージョン管理を行う ➢ テスト ◦ モデルが性能を満たすかなどをテスト ➢ サービング ◦ ONNX Runtime や Tensorflow Serving などに より、モデルを本番環境にシームレスにデプ ロイする ➢ リリース ◦ カナリアリリースなどの手法で、本番トラ フィックでもモデルをテストする ➢ ワークフロー管理 ◦ データ取得・前処理・学習・評価・デプロイ のワークフローを自動化する 出典:https://martinfowler.com/articles/cd4ml.html ←今日の主題
  12. 実験管理のよくある課題 もう一度同じモデルを作ろうとしても、再現できない 過去の実験と少しパラメータを変えて試したいと思っても、そもそも過去の実験を再現できない どのデータで、どのパラメータで、どのモデルを作ったのかトレースできない 他にも使ったコードやモデルの評価など、トレースしたい要素はたくさんあるが、手動で整理するには手間がかかる

  13. MLflow の紹介

  14. MLflow の概要 ➢ MLflow とは ◦ 公式サイト(https://mlflow.org/)によると... ◦ > An

    open source platform for the machine learning lifecycle ➢ MLflow の機能 ➢ 特に今回紹介する MLflow Tracking は非常に簡単に使い始めることもでき、高く評価されています 出典:https://mlflow.org/
  15. MLflow Tracking の機能(一部) ➢ log_param、log_metric、log_artifact ◦ パラメータなどをログ出力して保存 ➢ Tracking UI

    ◦ 保存された実行履歴を Web UI で確認可能 ➢ Automatic Logging ◦ 対応しているライブラリでは、自動でパラメータなどを保存 ◦ scikit-learn、TensorFlow など ➢ Artifact Stores ◦ Artifact をローカル以外に S3・GCS などに保存できる
  16. 実装した題材説明・デモンストレーション

  17. MLflow で実験管理してみるテーマ ➢ 個人ブログ「完全に理解した.com」 ◦ https:// .com 完全に理解した / ◦

    Gatsby 製の静的サイト ◦ 現在 100 記事程度 ➢ 機械学習でなんとかしたいこと ◦ 記事投稿時に、関連記事を手動で設定するの に手間がかかるので、自動化したい ➢ 実装方針 ◦ 自然言語処理で、関連記事を推論して表示す るようにしてみる ※ この題材は gatsby-remark-related-posts というプラグインで 簡単に解決しますが、MLflow のデモ目的で改めて実装しました https://www.gatsbyjs.com/plugins/gatsby-remark-related-posts/ ↓ここ
  18. サイトの構成 CMS 静的サイト ホスティング ビルド Gatsby React を使った 静的サイトジェネレータ Netlify

    静的サイトホスティングサービス GitHub と連携したビルドも簡単 CMS 機能も利用 ユーザ サイト 管理者 Python 機会学習の処理は Python で実施 (Python で試行錯誤したコード をそのまま使うことを重視) MLflow 機械学習の試行錯誤を実験管理 今回はローカルのみで利用 JSON .py ブログ 記事 最小限の構成とするため、Netlify と GitHub のみで完結させています
  19. アルゴリズムなど ➢ 記事データ ◦ マークダウン形式で GitHub で管理されている ◦ “ 例)

    複数のプログラミング言語の複数バージョンを...” ➢ Janome で形態素解析 ◦ Mecab よりセットアップが簡単な Janome を使って形態素解析する ◦ 例)[“ ” 複数 , “ ” の , “ ” プログラミング , “ ” 言語 , “ ” の , “ ” 複数 , “ ” バージョン , “ ” を , …] ➢ scikit-learn を使い、TF-IDF で文書をベクトル化 ◦ TF(Term Frequency):単語の出現頻度 ◦ IDF(Inverse Document Frequency):逆文書頻度 ◦ 例) [0.17544636, 0, 0, 0, 0.07192097, 0, 0, 0, ...] ➢ scikit-learn を使い、2 種類の方法で類似記事を算出 ◦ k 平均法:非階層型クラスタリングアルゴリズム ◦ コサイン類似度:ベクトルの向きの近さの指標 コサイン類似度のヒートマップ (今回の実装での出力結果) k 平均法のイメージ図 (scikit-learn のドキュメントを参考に作成 https://scikit-learn.org/stable/auto_examples/cluste r/plot_mini_batch_kmeans.html )
  20. デモンストレーション

  21. まずは k 平均法を試してみる def main() -> None: : with mlflow.start_run()

    as run: # scikit-learn のログを自動取得 mlflow.sklearn.autolog() # 現時点のソースコードを保存 mlflow.log_artifacts('./analysis', 'src') # 対象のファイルの内容を形態素解析 (省略) # TF-IDF vectorizer = TfidfVectorizer() tfidf = vectorizer.fit_transform(corpus) : # KMeans kmeans = KMeans(n_clusters=n_clusters, random_state=0).fit(tfidf) clusters = kmeans.predict(tfidf) # クラスタリングの結果を保存 clutering_output = format_clsuters_to_save_as_dict(clusters, file_names) mlflow.log_dict(clutering_output, 'clustering_output/clusters.json')
  22. 実行時のパラメータなどを mlflow ui で確認 $ poetry run python analysis/analysis.py kmeans

    5 $ poetry run mlflow ui ➢ 実行が「run」という単位で記録され、 パラメータやアーティファクトを GUI で確認可能 ➢ その時点のソースコードを記録するのも簡単
  23. パラメータを変えて実行してみる ➢ 2 つの「run」を比較して、パラメータの差分なども確認できる $ poetry run python analysis/analysis.py kmeans

    10 $ poetry run mlflow ui
  24. コサイン類似度を算出する def main() -> None: : with mlflow.start_run() as run:

    : # TF-IDF vectorizer = TfidfVectorizer() tfidf = vectorizer.fit_transform(corpus) : # コサイン類似度を算出 tfidf_array = tfidf.toarray() cos = cosine_similarity(tfidf_array, tfidf_array) # コサイン類似度を保存 : fig = plt.figure() seaborn.heatmap(cos) mlflow.log_figure(fig, 'cosine_similarity/heatmap.png') : # レコメンデーション結果を保存 : mlflow.log_dict(cos_output, output_path)
  25. mlflow ui で出力内容を確認 ➢ Matplotlib や Seaborn で作成した画像なども保存・確認可能 ➢ レコメンドされた記事を見ると、ある程度それらしくなっている!

    $ poetry run python analysis/analysis.py cosine_similarity $ poetry run mlflow ui
  26. MLflow の良さ・課題など

  27. MLflow の良さ ➢ MLflow の実験管理はとても便利!!! ◦ どんなコードで、どんなパラメータだとどうなったかなどが、しっかりトラッキングできる ◦ 試行錯誤するときに、いつどんな結果だったかが簡単に見返せる ➢

    ローカルで使うだけ、一人で使うだけでも便利 ◦ チームでデータを共有することもできるが、まずは 1 人で使い始めるだけでも非常に役立つ ➢ 最小限の導入は pip install mlflow だけで、使い方も簡単 ◦ まずは保存したいデータを log_param、log_metric、log_artifact などで記録するだけ ◦ あとは mlflow ui コマンドで Web UI を起動してトラッキングデータを見始めれば OK
  28. 今回の題材における課題 ➢ 教師なし学習でそれらしい推論結果になっただけ ◦ 本当はクリック率が高くなるようにしたりしたいが、そこは今後に期待 ➢ Python と Node.js の連携を独自形式の

    JSON で実施した ◦ ONNX Runtime などで連携するとスマートかもしれないが、今回の手法には適していなかった ➢ MLflow は手元での試行錯誤に使っただけで、実際の学習時のデータは保存していない ◦ Tracking Server を別途用意するなどして、実際の学習時のデータもトラッキングする望ましい
  29. 今回の題材における課題 ➢ 教師なし学習でそれらしい推論結果になっただけ ◦ 本当はクリック率が高くなるようにしたりしたいが、そこは今後に期待 ➢ Python と Node.js の連携を独自形式の

    JSON で実施した ◦ ONNX Runtime などで連携するとスマートかもしれないが、今回の手法には適していなかった ➢ MLflow は手元での試行錯誤に使っただけで、実際の学習時のデータは保存していない ◦ Tracking Server を別途用意するなどして、実際の学習時のデータもトラッキングする望ましい とりあえず、MLflow はとても良いものです。ぜひ使ってみてください
  30. MLflow で実験管理してみよう

  31. 告知 ➢ 今後の予定 ◦ 今後も 2 週間に 1 回程度の頻度で勉強会を開催予定です ◦

    ゆくゆくは、ハンズオンなど含めがっつり勉強する会も開催予定です ➢ 次回 ◦ 「やさしくわかるPyTorch入門」 ◦ 10/28(木)19:30〜20:30 connpass で参加受付中です ご興味・お時間あれば、お気軽にお申し込みください!
  32. アンケート + 質疑応答 ➢ Zoom のチャットに Google Form の URL

    を貼らせていただきますので、そちらからアンケートに ご回答お願いします ➢ アンケートにご記入いただいている間、追加の質問にも回答させていただきます。ご質問は Zoom の「Q&A」からお願いします アンケートにご回答いただいた方から適宜解散とさせていただきます 本日は最後までご静聴ありがとうございました