Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Unit testしてますか?

tsho
July 12, 2023

Unit testしてますか?

2023/7/12 MLOps 勉強会 LT 発表

tsho

July 12, 2023
Tweet

Other Decks in Programming

Transcript

  1. Unit testしてますか?

    View Slide

  2. 自己紹介
    名前:tsho (Sho Tanaka)
    都内の IT 会社で日本や APAC を中心に ML のコンサル
    タントやソリューションを提供。MLOps 勉強会の運営の1
    人。
    本発表は所属する組織とは関係なく、
    個人の見解と調べたことを発表いたします。

    View Slide

  3. 話すこと & 対象
    初心者 中級者 上級者
    データサイエンティスト ◯ ◯ ✕
    MLエンジニア/ ソフトウェアエンジニア ◯ △ ✕
    エンジニア中級者などは退屈かもしれません。
    最近 Python で unittest 書き始めた人の簡単な紹介 (Rspec で test 書い
    たことあるマン)
    最新の話とかではない古くからある話をします。

    View Slide

  4. なんでこの話をするのか?
    テストの話が本勉強会で少ないな
    懇親会とかで話していてテストの話を知らない人が意外といるかな
    と思ったから

    View Slide

  5. ML Systemsにおけるテスト
    Figure 1. Elements for ML systems. Adapted from Hidden Technical Debt in Machine Learning Systems.
    https://cloud.google.com/architecture/mlops-continuous-delivery-and-automation-pipelines-in-machine-learning

    View Slide

  6. テストのおおまかな種類
    継続的にモデルを作り、デプロイしてビジネスに使うためにもテストは必要
    大まかなテストの種類
    - 単体テスト(Unit test)
    - 結合テスト(統合テスト)
    - E2Eテスト
    *テストの分け方は人や定義によって多少ことなることが多いです。今回は分け方の議論はしないのでここでこれ以上の話はい
    たしません

    View Slide

  7. 単体テスト(Unit Test)
    クラスや関数などのプログラムの単位ごとにテストのこと
    ML systemでいうと
    - 前処理
    - モデリング
    - 予測
    など
    上記部分で機能テストをすることに該当します。
    テストの種類と技法 - Qiita

    View Slide

  8. Python における Unit Test
    標準 library に unittest が入っている
    - Pytest など 3rd party の library もありますがここでは触れません。
    ● Test 用の Python ファイルを作る
    ● Test の関数は ‘test_’ で始める
    参考 https://docs.python.org/ja/3/library/unittest.html

    View Slide



  9. 実際の例(githubのコードより)
    参考
    https://github.com/google/gps_building_blocks/blob/master/py/gps_building_blocks/ml/preprocessing/vif_test.py

    View Slide

  10. 数ヶ月実施してみて
    世間で言われているとおり導入コストは高い
    ただ、コードが増えていくにつれ、Unite testがあるときにありがたみを感じる(ないとつ
    らい....)。
    テストするためにコードをまとめる癖がつくので可読性もあがる(気がしている)。

    View Slide

  11. 補足
    同じデータでも必ずしもアウトプットが一致する場合でないケースがあります。
    例:モデルの byte データが変わる etc.
    そういった場合は、mock などを使って、該当の関数、method が呼び出されたか確認
    することもできます。
    もちろんアウトプットの確認よりゆるいテストになるので、アウトプットの確認ができるなら
    されたほうがよいと思います。

    View Slide

  12. さいごに
    MLに限らず、大規模なプロダクトや改善が多いプロダクトで品質を保証するためにUnit
    testは重要です。
    しかし、実装コストは高いのですべての人に薦めるやり方ではありません。
    もし興味があれば、すでにつかっているライブラリの単体テストに使えるメソッドなどを確
    認して使うのをおすすめします(例、pandas や numpy などの assert など)。

    View Slide

  13. 参考
    第21回 MLOps 勉強会 普通のプロダクトのテストと機械学習を含んだプロダクトのテス
    トの違い
    Python pandas テストの書き方についてメモ - c-bata web

    View Slide