Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Reviewing_machine_learning_program.pdf
Search
shibuiwilliam
October 12, 2022
Programming
2.4k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Reviewing_machine_learning_program.pdf
機械学習のプログラムをレビューする。
https://rakus.connpass.com/event/257623/
shibuiwilliam
October 12, 2022
More Decks by shibuiwilliam
See All by shibuiwilliam
OntologyとLLMOps
shibuiwilliam
2
49
Rule repository
shibuiwilliam
3
51
LLM時代の検索アーキテクチャと技術的意思決定
shibuiwilliam
4
2.4k
Why Open Dataspacesのまとめ
shibuiwilliam
2
60
マルチモーダル非構造データとの闘い
shibuiwilliam
2
600
飽くなき自動生成への挑戦
shibuiwilliam
1
85
AIエージェントのメモリについて
shibuiwilliam
1
730
画像生成AIについて
shibuiwilliam
1
68
2026年はチャンキングを極める!
shibuiwilliam
9
2.3k
Other Decks in Programming
See All in Programming
C# and C++ Interoperability - cho-dotnetnew
harukasao
0
160
Make SRE Operations Easier with Azure SRE Agent
kkamegawa
0
6.6k
Contextとはなにか
chiroruxx
1
330
AI時代のUIはどこへ行く?その2!
yusukebe
21
7.3k
Hunting Vulnerabilities in Symfony with LLMs
vinceamstoutz
0
550
フロントエンドとバックエンドで「1文字」を揃えよう
youkidearitai
PRO
0
710
その問い、本当に正しいですか?AI時代のエンジニアに必要な哲学と認知科学 / ai-philosophy-cognitive-science
minodriven
11
5.8k
エージェンティックRAGにAWSで入門しよう!
har1101
8
1.6k
Performance Engineering for Everyone
elenatanasoiu
0
160
ローカルLLMでどこまでコードが書けるか -拡張版 / How much code can be written on a local LLM Extended
kishida
11
4.2k
LLMによるContent Moderationの本番運用の裏側と品質担保への挑戦
suikabar
3
700
LLM本来の能力を解き放つサンドボックス技術とAI民主化への適用
yukukotani
3
4.3k
Featured
See All Featured
Become a Pro
speakerdeck
PRO
31
6k
From π to Pie charts
rasagy
0
210
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
590
Visualization
eitanlees
152
17k
Designing for Performance
lara
611
70k
BBQ
matthewcrist
89
10k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
160
Leo the Paperboy
mayatellez
7
1.8k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
390
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
KATA
mclloyd
PRO
35
15k
Transcript
機械学習のプログラムを レビューする 2022/10/12 しぶい
自己紹介 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
• 2022年11月14日発売予定! • https://www.amazon.co.jp/dp/4798173401/ • 発売中! • https://www.amazon.co.jp/dp/4798169447/
今日話すこと • 機械学習開発におけるコードレビュー ◦ 方針を合意する ◦ Jupyter Notebookとの闘い ◦ 確率的な機械学習のプログラムをレビューする
◦ まとめ • https://speakerdeck.com/shibuiwilliam/reviewing-machine-learning-program
考えてるものが違う • ユーザから見たAI • MLエンジニアから見たML • ソフトウェアエンジニアから見た MLシステム ネコを 描いて!
方針を合意する • Jupyter Notebookの位置付け • データサイエンティスト、機械学習エンジニアに求めるアウトプット • 本番システムに導入するコード品質 いきなり出 てきたコー
ド いきなり依頼された コードレビュー コード 合意した方針 方針に沿った開発
Jupyter Notebookとの闘い
Jupyter Notebook WebブラウザでPythonを 書いて実行、可視化できる 開発環境。
Jupyter Notebook • 利点 ◦ 書いてすぐ実行できる。 ◦ 部分実行や途中実行もできる。 ◦ テーブルやグラフを可視化できる。
◦ データサイエンスや機械学習開発のデファクトスタンダードになってる。 • 難点 ◦ リントもフォーマットもできない。 ◦ レビューコメントを書けない。 ◦ 部分実行や途中実行されていると、プログラムの実行順序がわからない。 ◦ 適当に作って適当に放置される(レポジトリで管理されない)。 ◦ ファイルサイズが大きい。
DSやMLエンジニアに求めるアウトプット • 学習が正しく動き、学習の評価と推論の評価で矛盾が生じないこと。 取得したデータが正しい→ ←この処理が正しい 動くモデルができてる→ ←要件を満たす 評価と推論が乖離しない→ データ分析 前処理
学習 評価 推論 ←損失関数が下がる ←動く 安定して動かせる 第3者に理解できる ←説明・納得できる
• 目的が大事 ◦ 多くの場合、Jupyter Notebookは中間成果物。 ◦ 分析や機械学習の正しさを証明、検証するためのツール。 Jupyter Notebookが本番システムに組み込まれることはない。 ◦
プログラムと考えるよりもレポートやドキュメントとして扱うと精神衛生上健全。 • レビュー対象 ◦ データ!!! ◦ 分析や機械学習の正しさ ◦ 前処理、後処理、評価の正しさ ◦ 可視化 ◦ 説明 • 非レビュー対象 ◦ コード品質 Jupyter Notebookをレビューする
• レビュー会 ◦ Jupyter Notebookを通して実行した状態でレビューする。 ▪ レビュー会(30〜60分)でJupyter Notebookに書いた分析や機械学習をレビューする。 ▪ レビュー対象のJupyter
NotebookはColabやクラウド(Vertex AIやSagemaker等)の 共通開発環境にデータとともに保存する。ローカル環境禁止。 ▪ レビュー会ではJupyter Notebookを上から下まで順番に実行した結果を報告する (部分実行や途中実行は禁止)。 ▪ 分析・テスト結果は必ず全て可視化する。 ◦ コード品質は諦める。 ◦ ただし、最低限読めるプログラムを書く。 Jupyter Notebookをレビューする
このツールを使えばもっと便利になるかも • https://github.com/marketplace/actions/diff-notebooks • GitHub ActionsでJupyter Notebookの変更を可視化してレビューするツール。
確率的な機械学習の プログラムをレビューする
.ipynb -> .py へ書き直す データ分析 前処理 学習 評価 推論 ここは書き直す
必要がある。 ここは書き直さない 場合もある
前処理と推論だけ書き直す場合 • レビュー対象 ◦ コードの可読性とメンテナンス性 ◦ データ検証で不明点を減らす ▪ コードだけだと想定しているデータがわからないことが多い ▪
データ検証やコメントで扱っているデータの例や構造を定義することを推奨 ▪ テーブルデータであればpanderaやTensorFlow data validationが有効 ◦ テスト ▪ ユニットテストと結合テスト ▪ 推論結果もテストする
データ検証例 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を活用することで 複数カラム間の妥当性をテストすることが 可能
学習や評価も書き直す場合 • レビュー対象 ◦ コードの可読性とメンテナンス性 ◦ 責任分界を明確にし、可能な限りSOLID原則を守る ▪ 少なくとも単一責任の原則は守る ▪
他は努力目標 ◦ 学習と評価の結果を記録するコードを追加する ▪ 各種機械学習サービスやライブラリ(Vertex AI、Sagemaker、MLflow等)で 提供されているものを使う ◦ データ検証 ◦ テスト
機械学習のフローと単一責任の原則 データ取得 前処理 学習 評価 推論 モデル定義 評価指標 データ元 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
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) データアクセスと データロートを 分ける 前処理と学習を分ける 定義と実行を分ける 推論を処理含めて クラスにまとめる パイプラインにする
まとめ
まとめ • 異なるスキルセット、異なるチームで開発することが多い機械学習プロジェクト • 互いに開発とレビューの方針を合意し、その合意に沿って開発しレビューする • Jupyter Notebookはレポートやドキュメントのつもりで作り、レビューする • 本番コードは不明点の削減と可読性の向上を目指す
• 機械学習を実用化する方法論や事例を学ぶ勉強会 • 次回は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-!!