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. 機械学習のプログラムを
    レビューする
    2022/10/12 しぶい

    View full-size slide

  2. 自己紹介
    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

    View full-size slide

  3. ● 2022年11月14日発売予定!
    ● https://www.amazon.co.jp/dp/4798173401/
    ● 発売中!
    ● https://www.amazon.co.jp/dp/4798169447/

    View full-size slide

  4. 今日話すこと
    ● 機械学習開発におけるコードレビュー
    ○ 方針を合意する
    ○ Jupyter Notebookとの闘い
    ○ 確率的な機械学習のプログラムをレビューする
    ○ まとめ
    ● https://speakerdeck.com/shibuiwilliam/reviewing-machine-learning-program

    View full-size slide

  5. 考えてるものが違う
    ● ユーザから見たAI
    ● MLエンジニアから見たML
    ● ソフトウェアエンジニアから見た
    MLシステム
    ネコを
    描いて!

    View full-size slide

  6. 方針を合意する
    ● Jupyter Notebookの位置付け
    ● データサイエンティスト、機械学習エンジニアに求めるアウトプット
    ● 本番システムに導入するコード品質
    いきなり出
    てきたコー

    いきなり依頼された
    コードレビュー
    コード
    合意した方針
    方針に沿った開発

    View full-size slide

  7. Jupyter Notebookとの闘い

    View full-size slide

  8. Jupyter
    Notebook
    WebブラウザでPythonを
    書いて実行、可視化できる
    開発環境。

    View full-size slide

  9. Jupyter Notebook
    ● 利点
    ○ 書いてすぐ実行できる。
    ○ 部分実行や途中実行もできる。
    ○ テーブルやグラフを可視化できる。
    ○ データサイエンスや機械学習開発のデファクトスタンダードになってる。
    ● 難点
    ○ リントもフォーマットもできない。
    ○ レビューコメントを書けない。
    ○ 部分実行や途中実行されていると、プログラムの実行順序がわからない。
    ○ 適当に作って適当に放置される(レポジトリで管理されない)。
    ○ ファイルサイズが大きい。

    View full-size slide

  10. DSやMLエンジニアに求めるアウトプット
    ● 学習が正しく動き、学習の評価と推論の評価で矛盾が生じないこと。
    取得したデータが正しい→
    ←この処理が正しい
    動くモデルができてる→
    ←要件を満たす
    評価と推論が乖離しない→
    データ分析
    前処理
    学習
    評価
    推論
    ←損失関数が下がる
    ←動く
    安定して動かせる
    第3者に理解できる
    ←説明・納得できる

    View full-size slide

  11. ● 目的が大事
    ○ 多くの場合、Jupyter Notebookは中間成果物。
    ○ 分析や機械学習の正しさを証明、検証するためのツール。
    Jupyter Notebookが本番システムに組み込まれることはない。
    ○ プログラムと考えるよりもレポートやドキュメントとして扱うと精神衛生上健全。
    ● レビュー対象
    ○ データ!!!
    ○ 分析や機械学習の正しさ
    ○ 前処理、後処理、評価の正しさ
    ○ 可視化
    ○ 説明
    ● 非レビュー対象
    ○ コード品質
    Jupyter Notebookをレビューする

    View full-size slide

  12. ● レビュー会
    ○ Jupyter Notebookを通して実行した状態でレビューする。
    ■ レビュー会(30〜60分)でJupyter Notebookに書いた分析や機械学習をレビューする。
    ■ レビュー対象のJupyter NotebookはColabやクラウド(Vertex AIやSagemaker等)の
    共通開発環境にデータとともに保存する。ローカル環境禁止。
    ■ レビュー会ではJupyter Notebookを上から下まで順番に実行した結果を報告する
    (部分実行や途中実行は禁止)。
    ■ 分析・テスト結果は必ず全て可視化する。
    ○ コード品質は諦める。
    ○ ただし、最低限読めるプログラムを書く。
    Jupyter Notebookをレビューする

    View full-size slide

  13. このツールを使えばもっと便利になるかも
    ● https://github.com/marketplace/actions/diff-notebooks
    ● GitHub ActionsでJupyter Notebookの変更を可視化してレビューするツール。

    View full-size slide

  14. 確率的な機械学習の
    プログラムをレビューする

    View full-size slide

  15. .ipynb -> .py へ書き直す
    データ分析
    前処理
    学習
    評価
    推論
    ここは書き直す
    必要がある。
    ここは書き直さない
    場合もある

    View full-size slide

  16. 前処理と推論だけ書き直す場合
    ● レビュー対象
    ○ コードの可読性とメンテナンス性
    ○ データ検証で不明点を減らす
    ■ コードだけだと想定しているデータがわからないことが多い
    ■ データ検証やコメントで扱っているデータの例や構造を定義することを推奨
    ■ テーブルデータであればpanderaやTensorFlow data validationが有効
    ○ テスト
    ■ ユニットテストと結合テスト
    ■ 推論結果もテストする

    View full-size slide

  17. データ検証例
    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を活用することで
    複数カラム間の妥当性をテストすることが
    可能

    View full-size slide

  18. 学習や評価も書き直す場合
    ● レビュー対象
    ○ コードの可読性とメンテナンス性
    ○ 責任分界を明確にし、可能な限りSOLID原則を守る
    ■ 少なくとも単一責任の原則は守る
    ■ 他は努力目標
    ○ 学習と評価の結果を記録するコードを追加する
    ■ 各種機械学習サービスやライブラリ(Vertex AI、Sagemaker、MLflow等)で
    提供されているものを使う
    ○ データ検証
    ○ テスト

    View full-size slide

  19. 機械学習のフローと単一責任の原則
    データ取得
    前処理
    学習
    評価
    推論
    モデル定義
    評価指標
    データ元
    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)
    ● 機械学習のコードをまとめたクラス
    ● 一箇所の変更で他も変更する必要が
    あり、メンテナンスが難しい
    ● 可読性も低くなりがち

    View full-size slide

  20. 機械学習のフローと単一責任の原則
    データ取得
    前処理
    学習
    評価
    推論
    モデル定義
    評価指標
    データ元
    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)
    データアクセスと
    データロートを
    分ける
    前処理と学習を分ける
    定義と実行を分ける
    推論を処理含めて
    クラスにまとめる
    パイプラインにする

    View full-size slide

  21. まとめ
    ● 異なるスキルセット、異なるチームで開発することが多い機械学習プロジェクト
    ● 互いに開発とレビューの方針を合意し、その合意に沿って開発しレビューする
    ● Jupyter Notebookはレポートやドキュメントのつもりで作り、レビューする
    ● 本番コードは不明点の削減と可読性の向上を目指す

    View full-size slide

  22. ● 機械学習を実用化する方法論や事例を学ぶ勉強会
    ● 次回は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-!!

    View full-size slide