Slide 1

Slide 1 text

MLflow で実験管理してみよう

Slide 2

Slide 2 text

ご案内事項 ➢ 質疑について ○ ご質問は Zoom の「Q&A」からお願いします ■ Zoom の仕様上、「チャット」は流れてしまい見逃してしまう可能性があります ■ 「チャット」ではなく「Q&A」からご質問お願いします ○ ご質問には適宜回答させていただきます。講座の最後にも質疑の時間をとらせていただきます ➢ 発表資料について ○ 発表資料は Speaker Deck にて公開しています

Slide 3

Slide 3 text

StudyCo について ➢ StudyCo は、IT を中心に勉強会を開催したりしている コミュニティです ➢ 過去の勉強会のテーマ ○ アプリケーションの設計 ○ AWS ○ 統計・機械学習 ○ ブロックチェーン ○ 電子工作 ○ etc... ➢ 4 年半ほどクローズドな勉強会を続け、色々な知見が たまったので、connpass で公開勉強会を始めました! ➢ 特に最近は「MLOps」という分野に力を入れており、 今日もそういったテーマになります

Slide 4

Slide 4 text

発表者紹介 ➢ 名前:大嶋勇樹 ➢ サーバサイド・インフラ中心のエンジニア ○ Java、AWS、GCP、Docker、Kubernetes、etc… ➢ 最近の興味 ○ MLOps、Linux、電子工作、VR ➢ 機械学習については、基本的な考え方を知っているくらい ○ JDLA Deep Learning for GENERAL #2017 ➢ Twitter:@oshima_123

Slide 5

Slide 5 text

MLflow で実験管理してみよう

Slide 6

Slide 6 text

アジェンダ ➢ MLOps の概要 ➢ MLflow の紹介 ➢ 実装した題材説明・デモンストレーション ➢ MLflow の良さ・課題など ※ 合計 1 時間程度の予定です

Slide 7

Slide 7 text

MLOps の概要

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

実験管理のよくある課題 もう一度同じモデルを作ろうとしても、再現できない 過去の実験と少しパラメータを変えて試したいと思っても、そもそも過去の実験を再現できない どのデータで、どのパラメータで、どのモデルを作ったのかトレースできない 他にも使ったコードやモデルの評価など、トレースしたい要素はたくさんあるが、手動で整理するには手間がかかる

Slide 13

Slide 13 text

MLflow の紹介

Slide 14

Slide 14 text

MLflow の概要 ➢ MLflow とは ○ 公式サイト(https://mlflow.org/)によると... ○ > An open source platform for the machine learning lifecycle ➢ MLflow の機能 ➢ 特に今回紹介する MLflow Tracking は非常に簡単に使い始めることもでき、高く評価されています 出典:https://mlflow.org/

Slide 15

Slide 15 text

MLflow Tracking の機能(一部) ➢ log_param、log_metric、log_artifact ○ パラメータなどをログ出力して保存 ➢ Tracking UI ○ 保存された実行履歴を Web UI で確認可能 ➢ Automatic Logging ○ 対応しているライブラリでは、自動でパラメータなどを保存 ○ scikit-learn、TensorFlow など ➢ Artifact Stores ○ Artifact をローカル以外に S3・GCS などに保存できる

Slide 16

Slide 16 text

実装した題材説明・デモンストレーション

Slide 17

Slide 17 text

MLflow で実験管理してみるテーマ ➢ 個人ブログ「完全に理解した.com」 ○ https:// .com 完全に理解した / ○ Gatsby 製の静的サイト ○ 現在 100 記事程度 ➢ 機械学習でなんとかしたいこと ○ 記事投稿時に、関連記事を手動で設定するの に手間がかかるので、自動化したい ➢ 実装方針 ○ 自然言語処理で、関連記事を推論して表示す るようにしてみる ※ この題材は gatsby-remark-related-posts というプラグインで 簡単に解決しますが、MLflow のデモ目的で改めて実装しました https://www.gatsbyjs.com/plugins/gatsby-remark-related-posts/ ↓ここ

Slide 18

Slide 18 text

サイトの構成 CMS 静的サイト ホスティング ビルド Gatsby React を使った 静的サイトジェネレータ Netlify 静的サイトホスティングサービス GitHub と連携したビルドも簡単 CMS 機能も利用 ユーザ サイト 管理者 Python 機会学習の処理は Python で実施 (Python で試行錯誤したコード をそのまま使うことを重視) MLflow 機械学習の試行錯誤を実験管理 今回はローカルのみで利用 JSON .py ブログ 記事 最小限の構成とするため、Netlify と GitHub のみで完結させています

Slide 19

Slide 19 text

アルゴリズムなど ➢ 記事データ ○ マークダウン形式で 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 )

Slide 20

Slide 20 text

デモンストレーション

Slide 21

Slide 21 text

まずは 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')

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

パラメータを変えて実行してみる ➢ 2 つの「run」を比較して、パラメータの差分なども確認できる $ poetry run python analysis/analysis.py kmeans 10 $ poetry run mlflow ui

Slide 24

Slide 24 text

コサイン類似度を算出する 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)

Slide 25

Slide 25 text

mlflow ui で出力内容を確認 ➢ Matplotlib や Seaborn で作成した画像なども保存・確認可能 ➢ レコメンドされた記事を見ると、ある程度それらしくなっている! $ poetry run python analysis/analysis.py cosine_similarity $ poetry run mlflow ui

Slide 26

Slide 26 text

MLflow の良さ・課題など

Slide 27

Slide 27 text

MLflow の良さ ➢ MLflow の実験管理はとても便利!!! ○ どんなコードで、どんなパラメータだとどうなったかなどが、しっかりトラッキングできる ○ 試行錯誤するときに、いつどんな結果だったかが簡単に見返せる ➢ ローカルで使うだけ、一人で使うだけでも便利 ○ チームでデータを共有することもできるが、まずは 1 人で使い始めるだけでも非常に役立つ ➢ 最小限の導入は pip install mlflow だけで、使い方も簡単 ○ まずは保存したいデータを log_param、log_metric、log_artifact などで記録するだけ ○ あとは mlflow ui コマンドで Web UI を起動してトラッキングデータを見始めれば OK

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

MLflow で実験管理してみよう

Slide 31

Slide 31 text

告知 ➢ 今後の予定 ○ 今後も 2 週間に 1 回程度の頻度で勉強会を開催予定です ○ ゆくゆくは、ハンズオンなど含めがっつり勉強する会も開催予定です ➢ 次回 ○ 「やさしくわかるPyTorch入門」 ○ 10/28(木)19:30〜20:30 connpass で参加受付中です ご興味・お時間あれば、お気軽にお申し込みください!

Slide 32

Slide 32 text

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