Slide 1

Slide 1 text

1 © NEC Corporation 2019 Pythonラッパー作成で伝えたい2つのこと PyCon JP 2019 NECソリューションイノベータ 山入端 孝浩

Slide 2

Slide 2 text

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 ラッパー作成

Slide 3

Slide 3 text

3 © NEC Corporation 2019 背景 ▌いざ、Pythonラッパー開発に着手! →思ったよりも悩みどころがある 実装する方法が 複数あるけど どれを使えば… 仕様設計やテストを どう行うのだろう。 実装や実行方法の例は あるのだけど…

Slide 4

Slide 4 text

4 © NEC Corporation 2019 なるほどわからん。

Slide 5

Slide 5 text

5 © NEC Corporation 2019 本日お伝えしたいこと 1. 世間にあるPythonラッパーの作成手段 2. 失敗談から学んだこと ※本発表のPythonラッパーは、Python APIで ライブラリの各機能を呼び出すものとします

Slide 6

Slide 6 text

6 © NEC Corporation 2019 自己紹介 ▌山入端 孝浩(やまのは たかひろ) ▌NECソリューションイノベータ株式会社 ▌分析プラットフォーム”NEC Advanced Analytics Platform”の開発に従事 ▌沖縄県出身(県外出身と良く間違われます) ▌TGS楽しかったです

Slide 7

Slide 7 text

7 © NEC Corporation 2019 世間にあるPythonラッパーの作成手段 ▌開発者の要求に応じて技術の選択基準を決定 ラッピング対象 使用する技術 コマンド subprocess C/C++ライブラリ Python.h、SWIG、boost.Python、Ctypes、Pyrex、CFFI Javaライブラリ Py4J、Jpype、Jython、jpy 開発者の要求 選択基準 現状主流な技術を使いたい GitHubなどで多くの人に注目されているか メンテナンス性を高めたい ラッピング対象とラッパーのコードが独立しているか 継続して開発したい 更新が最近まで行われているか プロトタイピングをしたい 実装までの工程や準備が少ないか

Slide 8

Slide 8 text

8 © NEC Corporation 2019 失敗談でお話するPythonラッパーの概要 ▌Jupyter Notebook上で実行 ▌subprocess.Popen()を使用してラッピング Pythonラッパー 機械学習ライブラリ Jupyter Notebook Python API実行 コマンド実行 実装イメージ

Slide 9

Slide 9 text

9 © NEC Corporation 2019 失敗談から学んだこと(外部仕様設計編) Python APIとしてベストを尽くす前に ユーザーに対してベストを尽したか自分に問う ▌ユーザーが引数やパラメータをnotebook 1ファイルで設定できるように外部仕様を設計 ▌開発チームとしては満足の仕様だったが… レビューの結果ボツに!

Slide 10

Slide 10 text

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ラッパーで 設定できなくなる 引数の種類と 名前が異なる

Slide 11

Slide 11 text

11 © NEC Corporation 2019 失敗談から学んだこと(テスト編) ▌Pythonラッパーが機械学習ライブラリ単体よ りメモリ使用量が少ないという結果に ▌Pytestの特性で見かけのメモリ使用量が少な くなることに気づかず、結果を誤認したのが 原因 テストで使用するツールの特性はあらかじめ 調査しテスト結果への影響を把握する

Slide 12

Slide 12 text

12 © NEC Corporation 2019 失敗談から学んだこと(テスト編) Pytestの特性で メモリ使用量に差が出ている Pytestで Pythonラッパーを実行 Pythonコマンドで Pythonラッパーを実行 Pytestの特性を知らなかったために、 原因が特定できるまで2週間ほどかかった 実行方法の違いによるPythonラッパーのメモリ使用量の差異

Slide 13

Slide 13 text

13 © NEC Corporation 2019 まとめ ▌お話したこと 世間にあるPythonラッパーの作成手段 失敗談から学んだこと ▌お話した内容より良い方法などがあれば 後ほどお聞きしたいです

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

No content