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

Reviewing_machine_learning_program.pdf

 Reviewing_machine_learning_program.pdf

機械学習のプログラムをレビューする。
https://rakus.connpass.com/event/257623/

shibuiwilliam

October 12, 2022
Tweet

More Decks by shibuiwilliam

Other Decks in Programming

Transcript

  1. 自己紹介 shibui yusuke • いろいろ → Launchable(いまここ) • MLOpsとかいろいろエンジニア •

    たまにセールスとかPRとか • もともとクラウド基盤の開発、運用 • ここ6年くらいMLOpsとバックエンドとインフラとたまに データ分析とAndroidで仕事 • Github: @shibuiwilliam • Meety: https://meety.net/matches/OPJgijxiEMHE • 最近の趣味:猫と副業と自宅勤務改善 cat : 0.55 dog: 0.45 human : 0.70 gorilla : 0.30 物体検知 2
  2. Jupyter Notebook • 利点 ◦ 書いてすぐ実行できる。 ◦ 部分実行や途中実行もできる。 ◦ テーブルやグラフを可視化できる。

    ◦ データサイエンスや機械学習開発のデファクトスタンダードになってる。 • 難点 ◦ リントもフォーマットもできない。 ◦ レビューコメントを書けない。 ◦ 部分実行や途中実行されていると、プログラムの実行順序がわからない。 ◦ 適当に作って適当に放置される(レポジトリで管理されない)。 ◦ ファイルサイズが大きい。
  3. • 目的が大事 ◦ 多くの場合、Jupyter Notebookは中間成果物。 ◦ 分析や機械学習の正しさを証明、検証するためのツール。 Jupyter Notebookが本番システムに組み込まれることはない。 ◦

    プログラムと考えるよりもレポートやドキュメントとして扱うと精神衛生上健全。 • レビュー対象 ◦ データ!!! ◦ 分析や機械学習の正しさ ◦ 前処理、後処理、評価の正しさ ◦ 可視化 ◦ 説明 • 非レビュー対象 ◦ コード品質 Jupyter Notebookをレビューする
  4. • レビュー会 ◦ Jupyter Notebookを通して実行した状態でレビューする。 ▪ レビュー会(30〜60分)でJupyter Notebookに書いた分析や機械学習をレビューする。 ▪ レビュー対象のJupyter

    NotebookはColabやクラウド(Vertex AIやSagemaker等)の 共通開発環境にデータとともに保存する。ローカル環境禁止。 ▪ レビュー会ではJupyter Notebookを上から下まで順番に実行した結果を報告する (部分実行や途中実行は禁止)。 ▪ 分析・テスト結果は必ず全て可視化する。 ◦ コード品質は諦める。 ◦ ただし、最低限読めるプログラムを書く。 Jupyter Notebookをレビューする
  5. 前処理と推論だけ書き直す場合 • レビュー対象 ◦ コードの可読性とメンテナンス性 ◦ データ検証で不明点を減らす ▪ コードだけだと想定しているデータがわからないことが多い ▪

    データ検証やコメントで扱っているデータの例や構造を定義することを推奨 ▪ テーブルデータであればpanderaやTensorFlow data validationが有効 ◦ テスト ▪ ユニットテストと結合テスト ▪ 推論結果もテストする
  6. データ検証例 import pandas as pd import pandera as pa schema

    = pa.DataFrameSchema({ "gender": pa.Column(str, checks=pa.Check(lambda x: x in _genders , element_wise=True, error=f"gender must be {_genders}"), ), "height_cm": pa.Column(float, checks=[ pa.Check(lambda x: 130 <= x <= 210 , element_wise=True, error=f"height must be between [130, 210]", ), pa.Hypothesis.two_sample_test( sample1="male", sample2="female", groupby="gender", relationship="greater_than", alpha=0.01, equal_var=True, ), ], ), }) df = pd.DataFrame(data = {"gender": genders, "height_cm": heights}) df = schema(df) • Pythonのpandasとpanderaによるデータ検証 • カラムごとにdata schemaを定義し、 チェックを挟むことで取得したデータの 正しさを検証する • Hypothesis testingを活用することで 複数カラム間の妥当性をテストすることが 可能
  7. 学習や評価も書き直す場合 • レビュー対象 ◦ コードの可読性とメンテナンス性 ◦ 責任分界を明確にし、可能な限りSOLID原則を守る ▪ 少なくとも単一責任の原則は守る ▪

    他は努力目標 ◦ 学習と評価の結果を記録するコードを追加する ▪ 各種機械学習サービスやライブラリ(Vertex AI、Sagemaker、MLflow等)で 提供されているものを使う ◦ データ検証 ◦ テスト
  8. 機械学習のフローと単一責任の原則 データ取得 前処理 学習 評価 推論 モデル定義 評価指標 データ元 class

    CoolML(): def __init__(self) def load_data(self) def __load_user_data(self) def __load_item_data(self) def preprocess_train_evaluate(self) def predict(self) def run_all(self) • 機械学習のコードをまとめたクラス • 一箇所の変更で他も変更する必要が あり、メンテナンスが難しい • 可読性も低くなりがち
  9. 機械学習のフローと単一責任の原則 データ取得 前処理 学習 評価 推論 モデル定義 評価指標 データ元 class

    CoolML(): def __init__(self) def load_data(self) def __load_user_data(self) def __load_item_data(self) def preprocess_train_evaluate(self) def predict(self) def run_all(self) class DataWarehouseAccessor() class UserDataLoader() class ItemDataLoader() class Normalize() class CoolModel() def define_model(self) class EvaluationMetrics() class ModelTrainer() def train(self) def evaluate(self) -> EvaluationMetrics class Predictor() class Pipeline() def __init__(self, data_loader:DataLoader, preprocess:Preprocess, model:CoolModel, predictor:Predictor) データアクセスと データロートを 分ける 前処理と学習を分ける 定義と実行を分ける 推論を処理含めて クラスにまとめる パイプラインにする
  10. • 機械学習を実用化する方法論や事例を学ぶ勉強会 • 次回は10/25(火)18:00開催。ぜひご参加ください! ◦ 株式会社プレイド ML Tech Lead 春日

    瑛 様 KARTEにおけるMLOpsの変遷 ◦ 株式会社DeNA データ本部副本部長 加茂 雄亮 様 DeNAにおける AI Project Management Flow and Build Trap Review • https://mlops.connpass.com/event/261097/ MLOps勉強会 第24回は10/25 (火) 18:00-!!