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

機械学習ライブラリのPython API作成方法(発表時:Pythonラッパー作成で伝えたい2つのこと)

機械学習ライブラリのPython API作成方法(発表時:Pythonラッパー作成で伝えたい2つのこと)

This deck was used at PyConJP 2019.

When you develop python wrapper for non-python library, you might face some problem.
In this deck, I would talk about 2 theme for reference to develop python wrapper.

Takahiro Yamanoha

September 17, 2019
Tweet

Other Decks in Technology

Transcript

  1. 2 © NEC Corporation 2019 Python APIで 使いやすく 背景 ▌Pythonの実行環境でPython以外の機械学習

    ライブラリは使いにくい →Pythonラッパーによって改善可能 $ fit train_data.csv config.json score: 1.23456 ... score: 0.56789 [end] >>> from python_api import fit >>> fit(train_data.csv, config.json) score: 1.23456 ... score: 0.56789 [end] Python実行環境 その他機械学習ライブラリ scikit-learn PyTorch Python APIを 持たないので 使いにくい Python ラッパー作成
  2. 3 © NEC Corporation 2019 背景 ▌いざ、Pythonラッパー開発に着手! →思ったよりも悩みどころがある 実装する方法が 複数あるけど

    どれを使えば… 仕様設計やテストを どう行うのだろう。 実装や実行方法の例は あるのだけど…
  3. 5 © NEC Corporation 2019 本日お伝えしたいこと 1. 世間にあるPythonラッパーの作成手段 2. 失敗談から学んだこと

    ※本発表のPythonラッパーは、Python APIで ライブラリの各機能を呼び出すものとします
  4. 6 © NEC Corporation 2019 自己紹介 ▌山入端 孝浩(やまのは たかひろ) ▌NECソリューションイノベータ株式会社

    ▌分析プラットフォーム”NEC Advanced Analytics Platform”の開発に従事 ▌沖縄県出身(県外出身と良く間違われます) ▌TGS楽しかったです
  5. 7 © NEC Corporation 2019 世間にあるPythonラッパーの作成手段 ▌開発者の要求に応じて技術の選択基準を決定 ラッピング対象 使用する技術 コマンド

    subprocess C/C++ライブラリ Python.h、SWIG、boost.Python、Ctypes、Pyrex、CFFI Javaライブラリ Py4J、Jpype、Jython、jpy 開発者の要求 選択基準 現状主流な技術を使いたい GitHubなどで多くの人に注目されているか メンテナンス性を高めたい ラッピング対象とラッパーのコードが独立しているか 継続して開発したい 更新が最近まで行われているか プロトタイピングをしたい 実装までの工程や準備が少ないか
  6. 10 © NEC Corporation 2019 失敗談から学んだこと(外部仕様設計編) ▌外部仕様が大きく変わり、既存ユーザー が使いにくい仕様になったのが原因 python_api.fit(data_file_path, algorithm,

    hparam_info) Parameters: data_file_path: str Input CSV data file path. algorithm: str Algorithm name. hparam_info: dict Hyperparameter information. fit [DATA FILE] [CONFIG FILE] DATA FILE : Input CSV data file path. CONFIG FILE: Config data file path. ※CONFIG FILEで設定するパラメータ algorithm preprocess_info max_iter tolerance 機械学習ライブラリ Pythonラッパー Pythonラッパーで 設定できなくなる 引数の種類と 名前が異なる
  7. 12 © NEC Corporation 2019 失敗談から学んだこと(テスト編) Pytestの特性で メモリ使用量に差が出ている Pytestで Pythonラッパーを実行

    Pythonコマンドで Pythonラッパーを実行 Pytestの特性を知らなかったために、 原因が特定できるまで2週間ほどかかった 実行方法の違いによるPythonラッパーのメモリ使用量の差異