SlideShare a Scribd company logo
1 of 22
Download to read offline
機械学習のプログラムを
レビューする
2022/10/12 しぶい
自己紹介
shibui yusuke
● いろいろ → Launchable(いまここ)
● MLOpsとかいろいろエンジニア
● たまにセールスとかEMとか
● もともとクラウド基盤の開発、運用
● ここ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との闘い
○ 確率的な機械学習のプログラムをレビューする
○ まとめ
方針を合意する
● 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_and_train(self)
def 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_and_train(self)
def 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-!!

More Related Content

Similar to Reviewing_machine_learning_program.pdf

【A-L】コミュニティが成長させるマルチクラウド環境でのデータ管理の世界 ~Docker Hubで500,000ダウンロード達成、Scality S3サー...
【A-L】コミュニティが成長させるマルチクラウド環境でのデータ管理の世界 ~Docker Hubで500,000ダウンロード達成、Scality S3サー...【A-L】コミュニティが成長させるマルチクラウド環境でのデータ管理の世界 ~Docker Hubで500,000ダウンロード達成、Scality S3サー...
【A-L】コミュニティが成長させるマルチクラウド環境でのデータ管理の世界 ~Docker Hubで500,000ダウンロード達成、Scality S3サー...
Developers Summit
 

Similar to Reviewing_machine_learning_program.pdf (20)

Launchable and efficient test execution
Launchable and efficient test executionLaunchable and efficient test execution
Launchable and efficient test execution
 
Devsumi 2021 MLOps for Self-driving car
Devsumi 2021 MLOps for Self-driving carDevsumi 2021 MLOps for Self-driving car
Devsumi 2021 MLOps for Self-driving car
 
Generative AIと検索を組み合わせた新たな体験の模索
Generative AIと検索を組み合わせた新たな体験の模索Generative AIと検索を組み合わせた新たな体験の模索
Generative AIと検索を組み合わせた新たな体験の模索
 
Glide活用イメージ紹介20220421
Glide活用イメージ紹介20220421Glide活用イメージ紹介20220421
Glide活用イメージ紹介20220421
 
Google Gadgetsを看取る
Google Gadgetsを看取るGoogle Gadgetsを看取る
Google Gadgetsを看取る
 
CoderDojo ひばりヶ丘の取り組み
CoderDojo ひばりヶ丘の取り組みCoderDojo ひばりヶ丘の取り組み
CoderDojo ひばりヶ丘の取り組み
 
How to start MLOps
How to start MLOpsHow to start MLOps
How to start MLOps
 
Androidの新ビルドシステム
Androidの新ビルドシステムAndroidの新ビルドシステム
Androidの新ビルドシステム
 
Twillio deadshot made me happy
Twillio deadshot made me happyTwillio deadshot made me happy
Twillio deadshot made me happy
 
Ml system in_python
Ml system in_pythonMl system in_python
Ml system in_python
 
Quality of ml_system
Quality of ml_systemQuality of ml_system
Quality of ml_system
 
プログルを支える技術 みんなのコードmeetup for エンジニア 2018/07/24
プログルを支える技術 みんなのコードmeetup for エンジニア 2018/07/24プログルを支える技術 みんなのコードmeetup for エンジニア 2018/07/24
プログルを支える技術 みんなのコードmeetup for エンジニア 2018/07/24
 
企業主催勉強会BPStudy〜個人が輝くコミュニティを目指して
企業主催勉強会BPStudy〜個人が輝くコミュニティを目指して企業主催勉強会BPStudy〜個人が輝くコミュニティを目指して
企業主催勉強会BPStudy〜個人が輝くコミュニティを目指して
 
IT業界とソフトウェア技術者を取り巻く今日の様相と荒波の将来への船出
IT業界とソフトウェア技術者を取り巻く今日の様相と荒波の将来への船出IT業界とソフトウェア技術者を取り巻く今日の様相と荒波の将来への船出
IT業界とソフトウェア技術者を取り巻く今日の様相と荒波の将来への船出
 
CoderDojo福井の取り組み
CoderDojo福井の取り組みCoderDojo福井の取り組み
CoderDojo福井の取り組み
 
[クリエイティブハント2018]LT 道場破りしたらできちゃった/// #ゴーハント
[クリエイティブハント2018]LT 道場破りしたらできちゃった/// #ゴーハント[クリエイティブハント2018]LT 道場破りしたらできちゃった/// #ゴーハント
[クリエイティブハント2018]LT 道場破りしたらできちゃった/// #ゴーハント
 
【A-L】コミュニティが成長させるマルチクラウド環境でのデータ管理の世界 ~Docker Hubで500,000ダウンロード達成、Scality S3サー...
【A-L】コミュニティが成長させるマルチクラウド環境でのデータ管理の世界 ~Docker Hubで500,000ダウンロード達成、Scality S3サー...【A-L】コミュニティが成長させるマルチクラウド環境でのデータ管理の世界 ~Docker Hubで500,000ダウンロード達成、Scality S3サー...
【A-L】コミュニティが成長させるマルチクラウド環境でのデータ管理の世界 ~Docker Hubで500,000ダウンロード達成、Scality S3サー...
 
モブプログラミングを体験しよう at Agile Japan 2017 愛媛サテライト
モブプログラミングを体験しよう at Agile Japan 2017 愛媛サテライトモブプログラミングを体験しよう at Agile Japan 2017 愛媛サテライト
モブプログラミングを体験しよう at Agile Japan 2017 愛媛サテライト
 
GoでシュッとWebスクレイピングする
GoでシュッとWebスクレイピングするGoでシュッとWebスクレイピングする
GoでシュッとWebスクレイピングする
 
presentation.pdf
presentation.pdfpresentation.pdf
presentation.pdf
 

More from yusuke shibui

More from yusuke shibui (11)

DevSummit_2022_summer_MLOps.pdf
DevSummit_2022_summer_MLOps.pdfDevSummit_2022_summer_MLOps.pdf
DevSummit_2022_summer_MLOps.pdf
 
Machine learning CI/CD with OSS
Machine learning CI/CD with OSSMachine learning CI/CD with OSS
Machine learning CI/CD with OSS
 
Lets start mlops
Lets start mlopsLets start mlops
Lets start mlops
 
ML system design_pattern
ML system design_patternML system design_pattern
ML system design_pattern
 
Getting started with MLOps
Getting started with MLOpsGetting started with MLOps
Getting started with MLOps
 
Machine learning quality for production
Machine learning quality for productionMachine learning quality for production
Machine learning quality for production
 
TFLite_and_PyTorch_Mobile
TFLite_and_PyTorch_MobileTFLite_and_PyTorch_Mobile
TFLite_and_PyTorch_Mobile
 
Mercari Image search 1st Anniversary
Mercari Image search 1st AnniversaryMercari Image search 1st Anniversary
Mercari Image search 1st Anniversary
 
Machine learning and_system_design
Machine learning and_system_designMachine learning and_system_design
Machine learning and_system_design
 
Machine learning microservice_management
Machine learning microservice_managementMachine learning microservice_management
Machine learning microservice_management
 
Mercari ML Meetup
Mercari ML MeetupMercari ML Meetup
Mercari ML Meetup
 

Reviewing_machine_learning_program.pdf