SlideShare a Scribd company logo
1 of 20
Download to read offline
機械学習の開発を
テストする
2021/06/26 shibui yusuke
自己紹介
shibui yusuke
● 自動運転スタートアップのティアフォー所属
● MLOpsエンジニア &
インフラエンジニア &
データエンジニア
● もともとクラウド基盤の開発、運用。
● ここ5年くらいMLOpsで仕事。
● Github: @shibuiwilliam
● Qiita: @cvusk
● FB: yusuke.shibui
● 最近やってること: IstioとGoとデータ分析
cat : 0.55
dog: 0.45
human : 0.70
gorilla : 0.30
物体検知
本を出版しました!
● AIエンジニアのための
機械学習システムデザインパターン
● 2021年5月17日発売
● https://www.amazon.co.jp/dp/4798169447/
● 機械学習と銘打ってるのに KubernetesとIstioに
詳しくなれる一冊です!
● Amazon.co.jp
情報学・情報科学部門  1位!
人工知能部門 1位!
● 増刷決定!
● 韓国語版と中国語版(台湾)も出るらしい!
今日話すこと
● 機械学習の開発をテストする
機械学習のプログラミングの課題
● 機械学習はプログラミングとデータによって開発する。
● つまりプログラミングとデータが正しくないと機械学習のモデルも正しくなくなる。
● しかし機械学習のモデルの正確さを開発中に評価することは難しい。
データ分析、取得
前処理
学習
評価
リリース 例:リリース後にデータが間違っていることが判明
データまで戻る
「学習を自動化したい」は簡単ではない
● 研究、開発中のコード
=毎日読んで書くコード。
=一箇所修正して依存箇所を直すことは容易。
● 自動実行するコード
=毎日実行するけど、毎日読まないし書かないコードになる。
=忘れてしまうコードになる。
=開発時に記録されていない情報は失われる。
○ 失われるものの例:学習時に使ったデータ。特に中間データ
モデル開発のテスト
● ソフトウェア開発ではプログラムを通してロジックをテストする
● 機械学習ではコードを通してデータで確率をテストする
YES or NO 0 ~ 1
ソフトウェア開発のテスト 機械学習のテスト
入力
正解
出力
assert
関数
指標
推論
evaluate
モデル
関数
テスト通過率:95/100
Accuracy:99%
Precision:95%
Recall:60%
7
データ
モデル開発のテスト
● ソフトウェア開発ではプログラムを通してロジックをテストする
● 機械学習ではコードを通してデータで確率をテストする
YES or NO 0 ~ 1
ソフトウェア開発のテスト 機械学習のテスト
入力
正解
出力
assert
関数
指標
推論
evaluate
モデル
関数
テスト通過率:95/100
Accuracy:99%
Precision:95%
Recall:60%
8
データ
「学習が正しく動いている」
取得したデータが正しい →
←この処理が正しい
動くモデルができてる →
←基準以上の評価
評価と実用が乖離しない →
止めずに安定して
動かせる
データ分析、取得
前処理
学習
評価
リリース
←損失関数が下がる
動く→
汎用的っぽい関数が汎用的とは限らない
● 前処理は扱うデータに応じて書く必要がある。
○ 例:細長い画像が入る可能性のある
データをどうリサイズ、クロップ
する?
■ パディングしてからリサイズ
■ 最初にリサイズ
■ クロップしたリサイズ
■ ある程度リサイズして
パディングしてリサイズ
● Utilityとして作った前処理関数が汎用的に
使えるとは限らない。
● Utilityの変更→他のモデル開発に影響。
データ取得
テンソル化
リサイズ
クロップ
標準化
学習
このあたりを
汎用的に使う
共通の関数に
することは多い
いろいろなリサイズ
リサイズ
リサイズ
リサイズ
リサイズ
パディング
パディング
データに依存するならデータとともにテスト
● ユニットテスト:
個々のタスクをテストする
○ 対象:コード品質やロジック
● 接続テスト:
少量データを用いた短い Epochで
学習パイプラインをテストする
○ 対象:学習パイプラインとモデル開発
● 機械学習としてのテスト:
テストデータでモデルを評価する
○ 対象:モデルの品質
● 受け入れテスト:
推論器の稼働をテストする
○ 対象:本番システム
データ取得
前処理
学習
評価
リリース
少量データ
データに依存するならデータとともにテスト
● 接続テスト:
少量データを用いた短い Epochで
学習パイプラインをテストする
○ 対象:学習パイプラインとモデル開発
○ サンプルデータでコードが動くことを E2E
にテストする
○ 学習が進むこと(損失関数が下がる
こと)を確認する
○ 学習済みモデルを読み込んで
評価コードが動くことをテストする
○ 大量のGPUを使う前にコードをテストし
たい
データ取得
前処理
学習
評価
リリース
少量データ
ユニットテストの例
def resize_image(
img: np.ndarray,
width: int,
height: int,
) -> np.ndarray:
resize_img = cv2.resize(img, (width, height))
return resize_img
a = np.random.randint(0, 255, (2, 4, 3))
@pytest.mark.parametrize(
("img", "width", "height"),
[(a, 20, 30)],
)
def test_resize_image(
img: np.ndarray,
width: int,
height: int,
):
resize_img = resize_image(img, width, height)
assert resize_img.shape = (width, height, 3)
● 普通のユニットテストを書く。
接続テストの例
# 仮のコードです
def make_dataloader(data_path: str) -> DataLoader:
return dataloader(data_path)
def train(model: nn.Module, epochs: int, trainloader:
DataLoader) -> List[float]:
losses = []
for epoch in range(epochs):
average_loss = train_once(model, trainloader)
losses.append(average_loss)
model.save()
return losses
def evaluate(model_path: str, testloader: DataLoader)
-> List[float]:
predictor = Model(model_path)
evaluations = predictor.evaluate(testloader)
return evaluations
● 少量データで動かす。
@pytest.mark.parametrize(
(“model”, "train_path", “test_path” “epochs”),
[(model, “/tmp/small_train/”, “/tmp/small_test/”, 10)],
)
def test_train(
model: nn.Module,
train_path: str,
test_path: str,
epochs: int,
):
trainloader = make_dataloader(train_path)
testloader = make_dataloader(test_path)
init_accuracy = evaluate(model, testloader)
losses = train(model, epochs, trainloader)
assert losses[0] > losses[-1]
trained_accuracy = evaluate(model, testdata)
assert init_accuracy < trained_accuracy
データの正しさを残す
● 非構造化データの前処理や
Augmentationが
想定通りのアウトプットを出していることを
網羅的にテストすることは難しいが、
想定外のデータが混入することは避けたい。
● ランダムサンプリングになるが、
1st epochで
前処理された学習データだけ保存しておいて
学習が異常なときに確認できるようにしておく
だけでもトラブルシューティングに役立つ。
前処理
学習
1st epochのみ保存
DVCとCML
● Data Version Control
● データ分析や機械学習で使ったデータを
バージョン管理する
● Gitみたいに使う
● https://dvc.org/doc
● Continuous Machine Learning
● 機械学習のためのCI/CD
● GitHub ActionとDVCと組み合わせて
データを管理したCI/CDが可能
● https://github.com/iterative/cml
DVCとCML
データ取得
前処理
学習
評価
リリース
少量データ
コード
CI/CD
まとめ
● 機械学習はデータに依存するため、データとともにテストする
● 機械学習とプログラム両方のテストを書く
● データの正しさを残す
宣伝
● MLOpsコミュニティを運営してます。
○ https://mlops.connpass.com/
● 毎月勉強会開催中!
○ 7/14はメルカリUSがKubeflow + Polyaxonによる
機械学習基盤を説明!
○ https://mlops.connpass.com/event/215133/
● MLOpsコミュニティ公式ツイッター
○ @MlopsJ
○ https://twitter.com/MlopsJ

More Related Content

What's hot

機械学習モデルのサービングとは?
機械学習モデルのサービングとは?機械学習モデルのサービングとは?
機械学習モデルのサービングとは?Sho Tanaka
 
AIのラボからロボティクスへ --- 東大松尾研究室のWRS2020パートナーロボットチャレンジへの挑戦
AIのラボからロボティクスへ --- 東大松尾研究室のWRS2020パートナーロボットチャレンジへの挑戦AIのラボからロボティクスへ --- 東大松尾研究室のWRS2020パートナーロボットチャレンジへの挑戦
AIのラボからロボティクスへ --- 東大松尾研究室のWRS2020パートナーロボットチャレンジへの挑戦Tatsuya Matsushima
 
実社会・実環境におけるロボットの機械学習 ver. 2
実社会・実環境におけるロボットの機械学習 ver. 2実社会・実環境におけるロボットの機械学習 ver. 2
実社会・実環境におけるロボットの機械学習 ver. 2Kuniyuki Takahashi
 
最適化超入門
最適化超入門最適化超入門
最適化超入門Takami Sato
 
近年のHierarchical Vision Transformer
近年のHierarchical Vision Transformer近年のHierarchical Vision Transformer
近年のHierarchical Vision TransformerYusuke Uchida
 
LiDAR点群と画像とのマッピング
LiDAR点群と画像とのマッピングLiDAR点群と画像とのマッピング
LiDAR点群と画像とのマッピングTakuya Minagawa
 
[DL輪読会]data2vec: A General Framework for Self-supervised Learning in Speech,...
[DL輪読会]data2vec: A General Framework for  Self-supervised Learning in Speech,...[DL輪読会]data2vec: A General Framework for  Self-supervised Learning in Speech,...
[DL輪読会]data2vec: A General Framework for Self-supervised Learning in Speech,...Deep Learning JP
 
深層生成モデルと世界モデル(2020/11/20版)
深層生成モデルと世界モデル(2020/11/20版)深層生成モデルと世界モデル(2020/11/20版)
深層生成モデルと世界モデル(2020/11/20版)Masahiro Suzuki
 
MoveItの新機能、 pilz industrial motion を試してみた
MoveItの新機能、 pilz industrial motion を試してみたMoveItの新機能、 pilz industrial motion を試してみた
MoveItの新機能、 pilz industrial motion を試してみたRyo Kabutan
 
2023-03-23_Spiral.AI
2023-03-23_Spiral.AI2023-03-23_Spiral.AI
2023-03-23_Spiral.AISasakiYuichi1
 
Go-ICP: グローバル最適(Globally optimal) なICPの解説
Go-ICP: グローバル最適(Globally optimal) なICPの解説Go-ICP: グローバル最適(Globally optimal) なICPの解説
Go-ICP: グローバル最適(Globally optimal) なICPの解説Yusuke Sekikawa
 
Data-centricなML開発
Data-centricなML開発Data-centricなML開発
Data-centricなML開発Takeshi Suzuki
 
機械学習で泣かないためのコード設計
機械学習で泣かないためのコード設計機械学習で泣かないためのコード設計
機械学習で泣かないためのコード設計Takahiro Kubo
 
深層生成モデルと世界モデル
深層生成モデルと世界モデル深層生成モデルと世界モデル
深層生成モデルと世界モデルMasahiro Suzuki
 
【DL輪読会】Visual Classification via Description from Large Language Models (ICLR...
【DL輪読会】Visual Classification via Description from Large Language Models (ICLR...【DL輪読会】Visual Classification via Description from Large Language Models (ICLR...
【DL輪読会】Visual Classification via Description from Large Language Models (ICLR...Deep Learning JP
 
【DL輪読会】High-Resolution Image Synthesis with Latent Diffusion Models
【DL輪読会】High-Resolution Image Synthesis with Latent Diffusion Models【DL輪読会】High-Resolution Image Synthesis with Latent Diffusion Models
【DL輪読会】High-Resolution Image Synthesis with Latent Diffusion ModelsDeep Learning JP
 
報酬設計と逆強化学習
報酬設計と逆強化学習報酬設計と逆強化学習
報酬設計と逆強化学習Yusuke Nakata
 
最近強化学習の良記事がたくさん出てきたので勉強しながらまとめた
最近強化学習の良記事がたくさん出てきたので勉強しながらまとめた最近強化学習の良記事がたくさん出てきたので勉強しながらまとめた
最近強化学習の良記事がたくさん出てきたので勉強しながらまとめたKatsuya Ito
 

What's hot (20)

機械学習モデルのサービングとは?
機械学習モデルのサービングとは?機械学習モデルのサービングとは?
機械学習モデルのサービングとは?
 
UnityとROSの連携について
UnityとROSの連携についてUnityとROSの連携について
UnityとROSの連携について
 
AIのラボからロボティクスへ --- 東大松尾研究室のWRS2020パートナーロボットチャレンジへの挑戦
AIのラボからロボティクスへ --- 東大松尾研究室のWRS2020パートナーロボットチャレンジへの挑戦AIのラボからロボティクスへ --- 東大松尾研究室のWRS2020パートナーロボットチャレンジへの挑戦
AIのラボからロボティクスへ --- 東大松尾研究室のWRS2020パートナーロボットチャレンジへの挑戦
 
実社会・実環境におけるロボットの機械学習 ver. 2
実社会・実環境におけるロボットの機械学習 ver. 2実社会・実環境におけるロボットの機械学習 ver. 2
実社会・実環境におけるロボットの機械学習 ver. 2
 
最適化超入門
最適化超入門最適化超入門
最適化超入門
 
近年のHierarchical Vision Transformer
近年のHierarchical Vision Transformer近年のHierarchical Vision Transformer
近年のHierarchical Vision Transformer
 
LiDAR点群と画像とのマッピング
LiDAR点群と画像とのマッピングLiDAR点群と画像とのマッピング
LiDAR点群と画像とのマッピング
 
[DL輪読会]data2vec: A General Framework for Self-supervised Learning in Speech,...
[DL輪読会]data2vec: A General Framework for  Self-supervised Learning in Speech,...[DL輪読会]data2vec: A General Framework for  Self-supervised Learning in Speech,...
[DL輪読会]data2vec: A General Framework for Self-supervised Learning in Speech,...
 
深層生成モデルと世界モデル(2020/11/20版)
深層生成モデルと世界モデル(2020/11/20版)深層生成モデルと世界モデル(2020/11/20版)
深層生成モデルと世界モデル(2020/11/20版)
 
MoveItの新機能、 pilz industrial motion を試してみた
MoveItの新機能、 pilz industrial motion を試してみたMoveItの新機能、 pilz industrial motion を試してみた
MoveItの新機能、 pilz industrial motion を試してみた
 
20190825 vins mono
20190825 vins mono20190825 vins mono
20190825 vins mono
 
2023-03-23_Spiral.AI
2023-03-23_Spiral.AI2023-03-23_Spiral.AI
2023-03-23_Spiral.AI
 
Go-ICP: グローバル最適(Globally optimal) なICPの解説
Go-ICP: グローバル最適(Globally optimal) なICPの解説Go-ICP: グローバル最適(Globally optimal) なICPの解説
Go-ICP: グローバル最適(Globally optimal) なICPの解説
 
Data-centricなML開発
Data-centricなML開発Data-centricなML開発
Data-centricなML開発
 
機械学習で泣かないためのコード設計
機械学習で泣かないためのコード設計機械学習で泣かないためのコード設計
機械学習で泣かないためのコード設計
 
深層生成モデルと世界モデル
深層生成モデルと世界モデル深層生成モデルと世界モデル
深層生成モデルと世界モデル
 
【DL輪読会】Visual Classification via Description from Large Language Models (ICLR...
【DL輪読会】Visual Classification via Description from Large Language Models (ICLR...【DL輪読会】Visual Classification via Description from Large Language Models (ICLR...
【DL輪読会】Visual Classification via Description from Large Language Models (ICLR...
 
【DL輪読会】High-Resolution Image Synthesis with Latent Diffusion Models
【DL輪読会】High-Resolution Image Synthesis with Latent Diffusion Models【DL輪読会】High-Resolution Image Synthesis with Latent Diffusion Models
【DL輪読会】High-Resolution Image Synthesis with Latent Diffusion Models
 
報酬設計と逆強化学習
報酬設計と逆強化学習報酬設計と逆強化学習
報酬設計と逆強化学習
 
最近強化学習の良記事がたくさん出てきたので勉強しながらまとめた
最近強化学習の良記事がたくさん出てきたので勉強しながらまとめた最近強化学習の良記事がたくさん出てきたので勉強しながらまとめた
最近強化学習の良記事がたくさん出てきたので勉強しながらまとめた
 

Similar to Testing machine learning development

機械学習システム構築実践ガイド
機械学習システム構築実践ガイド機械学習システム構築実践ガイド
機械学習システム構築実践ガイドyusuke shibui
 
Creative as Software Engineering for GenAI LT
Creative as Software Engineering for GenAI LTCreative as Software Engineering for GenAI LT
Creative as Software Engineering for GenAI LTyusuke shibui
 
Twillio deadshot made me happy
Twillio deadshot made me happyTwillio deadshot made me happy
Twillio deadshot made me happyyusuke shibui
 
機械学習でテスト実行を効率化するLaunchable.pdf
機械学習でテスト実行を効率化するLaunchable.pdf機械学習でテスト実行を効率化するLaunchable.pdf
機械学習でテスト実行を効率化するLaunchable.pdfyusuke shibui
 
Reviewing_machine_learning_program.pdf
Reviewing_machine_learning_program.pdfReviewing_machine_learning_program.pdf
Reviewing_machine_learning_program.pdfyusuke shibui
 
Quality of ml_system
Quality of ml_systemQuality of ml_system
Quality of ml_systemyusuke shibui
 
Generative AIと検索を組み合わせた新たな体験の模索
Generative AIと検索を組み合わせた新たな体験の模索Generative AIと検索を組み合わせた新たな体験の模索
Generative AIと検索を組み合わせた新たな体験の模索yusuke shibui
 
machine_learning_failure_apocalypse.pdf
machine_learning_failure_apocalypse.pdfmachine_learning_failure_apocalypse.pdf
machine_learning_failure_apocalypse.pdfyusuke shibui
 
Mercari Image search 1st Anniversary
Mercari Image search 1st AnniversaryMercari Image search 1st Anniversary
Mercari Image search 1st Anniversaryyusuke shibui
 
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 caryusuke shibui
 
Pythonで自動化した話1
Pythonで自動化した話1Pythonで自動化した話1
Pythonで自動化した話1Masato Fujitake
 
スタートアップツールチラ見せ
スタートアップツールチラ見せスタートアップツールチラ見せ
スタートアップツールチラ見せHisatoshi Kikumoto
 
Jupyterで手順再現!Elasticsearch構築・運用を実行可能ドキュメントで機械化してみた
Jupyterで手順再現!Elasticsearch構築・運用を実行可能ドキュメントで機械化してみたJupyterで手順再現!Elasticsearch構築・運用を実行可能ドキュメントで機械化してみた
Jupyterで手順再現!Elasticsearch構築・運用を実行可能ドキュメントで機械化してみたSatoshi Yazawa
 
Launchable and efficient test execution
Launchable and efficient test executionLaunchable and efficient test execution
Launchable and efficient test executionyusuke shibui
 
MLOps failure(1_108)
MLOps failure(1_108)MLOps failure(1_108)
MLOps failure(1_108)yusuke shibui
 
Traffic light detection for self driving car
Traffic light detection for self driving carTraffic light detection for self driving car
Traffic light detection for self driving caryusuke shibui
 
Machine learning and_system_design
Machine learning and_system_designMachine learning and_system_design
Machine learning and_system_designyusuke shibui
 

Similar to Testing machine learning development (20)

機械学習システム構築実践ガイド
機械学習システム構築実践ガイド機械学習システム構築実践ガイド
機械学習システム構築実践ガイド
 
Creative as Software Engineering for GenAI LT
Creative as Software Engineering for GenAI LTCreative as Software Engineering for GenAI LT
Creative as Software Engineering for GenAI LT
 
Twillio deadshot made me happy
Twillio deadshot made me happyTwillio deadshot made me happy
Twillio deadshot made me happy
 
How to start MLOps
How to start MLOpsHow to start MLOps
How to start MLOps
 
機械学習でテスト実行を効率化するLaunchable.pdf
機械学習でテスト実行を効率化するLaunchable.pdf機械学習でテスト実行を効率化するLaunchable.pdf
機械学習でテスト実行を効率化するLaunchable.pdf
 
Ml system in_python
Ml system in_pythonMl system in_python
Ml system in_python
 
Reviewing_machine_learning_program.pdf
Reviewing_machine_learning_program.pdfReviewing_machine_learning_program.pdf
Reviewing_machine_learning_program.pdf
 
Quality of ml_system
Quality of ml_systemQuality of ml_system
Quality of ml_system
 
Generative AIと検索を組み合わせた新たな体験の模索
Generative AIと検索を組み合わせた新たな体験の模索Generative AIと検索を組み合わせた新たな体験の模索
Generative AIと検索を組み合わせた新たな体験の模索
 
machine_learning_failure_apocalypse.pdf
machine_learning_failure_apocalypse.pdfmachine_learning_failure_apocalypse.pdf
machine_learning_failure_apocalypse.pdf
 
Mercari Image search 1st Anniversary
Mercari Image search 1st AnniversaryMercari Image search 1st Anniversary
Mercari Image search 1st Anniversary
 
Lets start mlops
Lets start mlopsLets start mlops
Lets start mlops
 
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
 
Pythonで自動化した話1
Pythonで自動化した話1Pythonで自動化した話1
Pythonで自動化した話1
 
スタートアップツールチラ見せ
スタートアップツールチラ見せスタートアップツールチラ見せ
スタートアップツールチラ見せ
 
Jupyterで手順再現!Elasticsearch構築・運用を実行可能ドキュメントで機械化してみた
Jupyterで手順再現!Elasticsearch構築・運用を実行可能ドキュメントで機械化してみたJupyterで手順再現!Elasticsearch構築・運用を実行可能ドキュメントで機械化してみた
Jupyterで手順再現!Elasticsearch構築・運用を実行可能ドキュメントで機械化してみた
 
Launchable and efficient test execution
Launchable and efficient test executionLaunchable and efficient test execution
Launchable and efficient test execution
 
MLOps failure(1_108)
MLOps failure(1_108)MLOps failure(1_108)
MLOps failure(1_108)
 
Traffic light detection for self driving car
Traffic light detection for self driving carTraffic light detection for self driving car
Traffic light detection for self driving car
 
Machine learning and_system_design
Machine learning and_system_designMachine learning and_system_design
Machine learning and_system_design
 

Testing machine learning development