Submit Search
Upload
Testing machine learning development
•
2 likes
•
2,060 views
Y
yusuke shibui
Follow
code testing for machine learning development
Read less
Read more
Software
Report
Share
Report
Share
1 of 20
Download now
Download to read offline
Recommended
Rosbag search system
Rosbag search system
yusuke shibui
Machine learning CI/CD with OSS
Machine learning CI/CD with OSS
yusuke shibui
Getting started with MLOps
Getting started with MLOps
yusuke shibui
ML system design_pattern
ML system design_pattern
yusuke shibui
[DL輪読会]画像を使ったSim2Realの現況
[DL輪読会]画像を使ったSim2Realの現況
Deep Learning JP
NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日
NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日
Kitsukawa Yuki
PyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミング
Ransui Iso
tf,tf2完全理解
tf,tf2完全理解
Koji Terada
Recommended
Rosbag search system
Rosbag search system
yusuke shibui
Machine learning CI/CD with OSS
Machine learning CI/CD with OSS
yusuke shibui
Getting started with MLOps
Getting started with MLOps
yusuke shibui
ML system design_pattern
ML system design_pattern
yusuke shibui
[DL輪読会]画像を使ったSim2Realの現況
[DL輪読会]画像を使ったSim2Realの現況
Deep Learning JP
NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日
NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日
Kitsukawa Yuki
PyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミング
Ransui Iso
tf,tf2完全理解
tf,tf2完全理解
Koji Terada
機械学習モデルのサービングとは?
機械学習モデルのサービングとは?
Sho Tanaka
UnityとROSの連携について
UnityとROSの連携について
UnityTechnologiesJapan002
AIのラボからロボティクスへ --- 東大松尾研究室のWRS2020パートナーロボットチャレンジへの挑戦
AIのラボからロボティクスへ --- 東大松尾研究室のWRS2020パートナーロボットチャレンジへの挑戦
Tatsuya Matsushima
実社会・実環境におけるロボットの機械学習 ver. 2
実社会・実環境におけるロボットの機械学習 ver. 2
Kuniyuki Takahashi
最適化超入門
最適化超入門
Takami Sato
近年のHierarchical Vision Transformer
近年のHierarchical Vision Transformer
Yusuke Uchida
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,...
Deep Learning JP
深層生成モデルと世界モデル(2020/11/20版)
深層生成モデルと世界モデル(2020/11/20版)
Masahiro Suzuki
MoveItの新機能、 pilz industrial motion を試してみた
MoveItの新機能、 pilz industrial motion を試してみた
Ryo Kabutan
20190825 vins mono
20190825 vins mono
Takuya Minagawa
2023-03-23_Spiral.AI
2023-03-23_Spiral.AI
SasakiYuichi1
Go-ICP: グローバル最適(Globally optimal) なICPの解説
Go-ICP: グローバル最適(Globally optimal) なICPの解説
Yusuke Sekikawa
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...
Deep Learning JP
【DL輪読会】High-Resolution Image Synthesis with Latent Diffusion Models
【DL輪読会】High-Resolution Image Synthesis with Latent Diffusion Models
Deep Learning JP
報酬設計と逆強化学習
報酬設計と逆強化学習
Yusuke Nakata
最近強化学習の良記事がたくさん出てきたので勉強しながらまとめた
最近強化学習の良記事がたくさん出てきたので勉強しながらまとめた
Katsuya Ito
機械学習システム構築実践ガイド
機械学習システム構築実践ガイド
yusuke shibui
Creative as Software Engineering for GenAI LT
Creative as Software Engineering for GenAI LT
yusuke shibui
More Related Content
What's hot
機械学習モデルのサービングとは?
機械学習モデルのサービングとは?
Sho Tanaka
UnityとROSの連携について
UnityとROSの連携について
UnityTechnologiesJapan002
AIのラボからロボティクスへ --- 東大松尾研究室のWRS2020パートナーロボットチャレンジへの挑戦
AIのラボからロボティクスへ --- 東大松尾研究室のWRS2020パートナーロボットチャレンジへの挑戦
Tatsuya Matsushima
実社会・実環境におけるロボットの機械学習 ver. 2
実社会・実環境におけるロボットの機械学習 ver. 2
Kuniyuki Takahashi
最適化超入門
最適化超入門
Takami Sato
近年のHierarchical Vision Transformer
近年のHierarchical Vision Transformer
Yusuke Uchida
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,...
Deep Learning JP
深層生成モデルと世界モデル(2020/11/20版)
深層生成モデルと世界モデル(2020/11/20版)
Masahiro Suzuki
MoveItの新機能、 pilz industrial motion を試してみた
MoveItの新機能、 pilz industrial motion を試してみた
Ryo Kabutan
20190825 vins mono
20190825 vins mono
Takuya Minagawa
2023-03-23_Spiral.AI
2023-03-23_Spiral.AI
SasakiYuichi1
Go-ICP: グローバル最適(Globally optimal) なICPの解説
Go-ICP: グローバル最適(Globally optimal) なICPの解説
Yusuke Sekikawa
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...
Deep Learning JP
【DL輪読会】High-Resolution Image Synthesis with Latent Diffusion Models
【DL輪読会】High-Resolution Image Synthesis with Latent Diffusion Models
Deep Learning JP
報酬設計と逆強化学習
報酬設計と逆強化学習
Yusuke Nakata
最近強化学習の良記事がたくさん出てきたので勉強しながらまとめた
最近強化学習の良記事がたくさん出てきたので勉強しながらまとめた
Katsuya Ito
What's hot
(20)
機械学習モデルのサービングとは?
機械学習モデルのサービングとは?
UnityとROSの連携について
UnityとROSの連携について
AIのラボからロボティクスへ --- 東大松尾研究室のWRS2020パートナーロボットチャレンジへの挑戦
AIのラボからロボティクスへ --- 東大松尾研究室のWRS2020パートナーロボットチャレンジへの挑戦
実社会・実環境におけるロボットの機械学習 ver. 2
実社会・実環境におけるロボットの機械学習 ver. 2
最適化超入門
最適化超入門
近年のHierarchical Vision Transformer
近年のHierarchical Vision Transformer
LiDAR点群と画像とのマッピング
LiDAR点群と画像とのマッピング
[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版)
MoveItの新機能、 pilz industrial motion を試してみた
MoveItの新機能、 pilz industrial motion を試してみた
20190825 vins mono
20190825 vins mono
2023-03-23_Spiral.AI
2023-03-23_Spiral.AI
Go-ICP: グローバル最適(Globally optimal) なICPの解説
Go-ICP: グローバル最適(Globally optimal) なICPの解説
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輪読会】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 LT
yusuke shibui
Twillio deadshot made me happy
Twillio deadshot made me happy
yusuke shibui
How to start MLOps
How to start MLOps
yusuke shibui
機械学習でテスト実行を効率化するLaunchable.pdf
機械学習でテスト実行を効率化するLaunchable.pdf
yusuke shibui
Ml system in_python
Ml system in_python
yusuke shibui
Reviewing_machine_learning_program.pdf
Reviewing_machine_learning_program.pdf
yusuke shibui
Quality of ml_system
Quality of ml_system
yusuke shibui
Generative AIと検索を組み合わせた新たな体験の模索
Generative AIと検索を組み合わせた新たな体験の模索
yusuke shibui
machine_learning_failure_apocalypse.pdf
machine_learning_failure_apocalypse.pdf
yusuke shibui
Mercari Image search 1st Anniversary
Mercari Image search 1st Anniversary
yusuke shibui
Lets start mlops
Lets start mlops
yusuke shibui
Devsumi 2021 MLOps for Self-driving car
Devsumi 2021 MLOps for Self-driving car
yusuke shibui
Pythonで自動化した話1
Pythonで自動化した話1
Masato Fujitake
スタートアップツールチラ見せ
スタートアップツールチラ見せ
Hisatoshi Kikumoto
Jupyterで手順再現!Elasticsearch構築・運用を実行可能ドキュメントで機械化してみた
Jupyterで手順再現!Elasticsearch構築・運用を実行可能ドキュメントで機械化してみた
Satoshi Yazawa
Launchable and efficient test execution
Launchable and efficient test execution
yusuke shibui
MLOps failure(1_108)
MLOps failure(1_108)
yusuke shibui
Traffic light detection for self driving car
Traffic light detection for self driving car
yusuke shibui
Machine learning and_system_design
Machine learning and_system_design
yusuke shibui
Similar to Testing machine learning development
(20)
機械学習システム構築実践ガイド
機械学習システム構築実践ガイド
Creative as Software Engineering for GenAI LT
Creative as Software Engineering for GenAI LT
Twillio deadshot made me happy
Twillio deadshot made me happy
How to start MLOps
How to start MLOps
機械学習でテスト実行を効率化するLaunchable.pdf
機械学習でテスト実行を効率化するLaunchable.pdf
Ml system in_python
Ml system in_python
Reviewing_machine_learning_program.pdf
Reviewing_machine_learning_program.pdf
Quality of ml_system
Quality of ml_system
Generative AIと検索を組み合わせた新たな体験の模索
Generative AIと検索を組み合わせた新たな体験の模索
machine_learning_failure_apocalypse.pdf
machine_learning_failure_apocalypse.pdf
Mercari Image search 1st Anniversary
Mercari Image search 1st Anniversary
Lets start mlops
Lets start mlops
Devsumi 2021 MLOps for Self-driving car
Devsumi 2021 MLOps for Self-driving car
Pythonで自動化した話1
Pythonで自動化した話1
スタートアップツールチラ見せ
スタートアップツールチラ見せ
Jupyterで手順再現!Elasticsearch構築・運用を実行可能ドキュメントで機械化してみた
Jupyterで手順再現!Elasticsearch構築・運用を実行可能ドキュメントで機械化してみた
Launchable and efficient test execution
Launchable and efficient test execution
MLOps failure(1_108)
MLOps failure(1_108)
Traffic light detection for self driving car
Traffic light detection for self driving car
Machine learning and_system_design
Machine learning and_system_design
Testing machine learning development
1.
機械学習の開発を テストする 2021/06/26 shibui yusuke
2.
自己紹介 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 物体検知
3.
本を出版しました! ● AIエンジニアのための 機械学習システムデザインパターン ● 2021年5月17日発売 ●
https://www.amazon.co.jp/dp/4798169447/ ● 機械学習と銘打ってるのに KubernetesとIstioに 詳しくなれる一冊です! ● Amazon.co.jp 情報学・情報科学部門 1位! 人工知能部門 1位! ● 増刷決定! ● 韓国語版と中国語版(台湾)も出るらしい!
4.
今日話すこと ● 機械学習の開発をテストする
5.
機械学習のプログラミングの課題 ● 機械学習はプログラミングとデータによって開発する。 ● つまりプログラミングとデータが正しくないと機械学習のモデルも正しくなくなる。 ●
しかし機械学習のモデルの正確さを開発中に評価することは難しい。 データ分析、取得 前処理 学習 評価 リリース 例:リリース後にデータが間違っていることが判明 データまで戻る
6.
「学習を自動化したい」は簡単ではない ● 研究、開発中のコード =毎日読んで書くコード。 =一箇所修正して依存箇所を直すことは容易。 ● 自動実行するコード =毎日実行するけど、毎日読まないし書かないコードになる。 =忘れてしまうコードになる。 =開発時に記録されていない情報は失われる。 ○
失われるものの例:学習時に使ったデータ。特に中間データ
7.
モデル開発のテスト ● ソフトウェア開発ではプログラムを通してロジックをテストする ● 機械学習ではコードを通してデータで確率をテストする YES
or NO 0 ~ 1 ソフトウェア開発のテスト 機械学習のテスト 入力 正解 出力 assert 関数 指標 推論 evaluate モデル 関数 テスト通過率:95/100 Accuracy:99% Precision:95% Recall:60% 7 データ
8.
モデル開発のテスト ● ソフトウェア開発ではプログラムを通してロジックをテストする ● 機械学習ではコードを通してデータで確率をテストする YES
or NO 0 ~ 1 ソフトウェア開発のテスト 機械学習のテスト 入力 正解 出力 assert 関数 指標 推論 evaluate モデル 関数 テスト通過率:95/100 Accuracy:99% Precision:95% Recall:60% 8 データ
9.
「学習が正しく動いている」 取得したデータが正しい → ←この処理が正しい 動くモデルができてる → ←基準以上の評価 評価と実用が乖離しない
→ 止めずに安定して 動かせる データ分析、取得 前処理 学習 評価 リリース ←損失関数が下がる 動く→
10.
汎用的っぽい関数が汎用的とは限らない ● 前処理は扱うデータに応じて書く必要がある。 ○ 例:細長い画像が入る可能性のある データをどうリサイズ、クロップ する? ■
パディングしてからリサイズ ■ 最初にリサイズ ■ クロップしたリサイズ ■ ある程度リサイズして パディングしてリサイズ ● Utilityとして作った前処理関数が汎用的に 使えるとは限らない。 ● Utilityの変更→他のモデル開発に影響。 データ取得 テンソル化 リサイズ クロップ 標準化 学習 このあたりを 汎用的に使う 共通の関数に することは多い
11.
いろいろなリサイズ リサイズ リサイズ リサイズ リサイズ パディング パディング
12.
データに依存するならデータとともにテスト ● ユニットテスト: 個々のタスクをテストする ○ 対象:コード品質やロジック ●
接続テスト: 少量データを用いた短い Epochで 学習パイプラインをテストする ○ 対象:学習パイプラインとモデル開発 ● 機械学習としてのテスト: テストデータでモデルを評価する ○ 対象:モデルの品質 ● 受け入れテスト: 推論器の稼働をテストする ○ 対象:本番システム データ取得 前処理 学習 評価 リリース 少量データ
13.
データに依存するならデータとともにテスト ● 接続テスト: 少量データを用いた短い Epochで 学習パイプラインをテストする ○
対象:学習パイプラインとモデル開発 ○ サンプルデータでコードが動くことを E2E にテストする ○ 学習が進むこと(損失関数が下がる こと)を確認する ○ 学習済みモデルを読み込んで 評価コードが動くことをテストする ○ 大量のGPUを使う前にコードをテストし たい データ取得 前処理 学習 評価 リリース 少量データ
14.
ユニットテストの例 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) ● 普通のユニットテストを書く。
15.
接続テストの例 # 仮のコードです 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
16.
データの正しさを残す ● 非構造化データの前処理や Augmentationが 想定通りのアウトプットを出していることを 網羅的にテストすることは難しいが、 想定外のデータが混入することは避けたい。 ● ランダムサンプリングになるが、 1st
epochで 前処理された学習データだけ保存しておいて 学習が異常なときに確認できるようにしておく だけでもトラブルシューティングに役立つ。 前処理 学習 1st epochのみ保存
17.
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
18.
DVCとCML データ取得 前処理 学習 評価 リリース 少量データ コード CI/CD
19.
まとめ ● 機械学習はデータに依存するため、データとともにテストする ● 機械学習とプログラム両方のテストを書く ●
データの正しさを残す
20.
宣伝 ● MLOpsコミュニティを運営してます。 ○ https://mlops.connpass.com/ ●
毎月勉強会開催中! ○ 7/14はメルカリUSがKubeflow + Polyaxonによる 機械学習基盤を説明! ○ https://mlops.connpass.com/event/215133/ ● MLOpsコミュニティ公式ツイッター ○ @MlopsJ ○ https://twitter.com/MlopsJ
Download now