Colab and Exploratory Benchmarking
Colab には Local Runtime という機能があり、自分のワークステーションで動いている Jupyter に Colab でアクセスできる。これを使うとアプリなどのベンチマークの実行、集計を一箇所に集約できてよい。
アプリのベンチマークは、ある程度自動化可能になっている前提。たとえ自分の場合だと Android 相手なので ADB で適当にインテントを送りつけアプリを起動したりベンチマークのスコアをどこかにダンプしたりできるようになっている。
次のステップは Python から ADB などを呼び出してベンチマークを実行し、結果をダンプしてパースしてスコアを読み出す。あとはそれを適当に複数回実行したのち Pandas とかで整形すればよい。
環境のセットアップなど Python 側でデータの解釈が必要ないコマンドの実行は shell command 記法 で書いておくと簡潔だし出力も記録できる。
またベンチマークの意図やコード上にあらわれない情報(アプリを改変してビルドしなおしたなど)はテキストとして書いておく。Diff を gist 的な場所に貼り付けて URL を記録してもいいかもしれない。
ある程度結果がでたら整形して説明を書き加え、バグトラッカーなどで関係者にシェアする。Jupyter と比べた時の Colab の利点は、Notebook が最初から URL を持っているおかげでシェアする作業が自明なところ。ipynb をバグに添付しても間違いなく読んでもらえないからね。
開発中にとるベンチマークは探索的な性格を持っており、同時に手順が繊細で自動化しないと間違いやすい。なので Jupyter と相性がよい。自分は今まで適当にシェルスクリプトとかで半自動化し、結果を Jupyter にコピペして計算と整形だけやっていた。これは間違ってたね。なんのベンチマークをしたか自動で記録がのこり、再実行はセルと叩き直すだけ。同じ場所でメモもとれる。コピペの手間もなし。全然よい。
よく考えると本質的にベンチマークの試行錯誤というのは実験という Notebook の使いみちの王道なんだから相性が良いのは当たり前。性能の仕事を主にして数年、今までこれをやってなかったのは shame と言って良い。反省。でも明日からちゃんとやる。むしろシェルスクリプトの出力をコピペするとかかったるいのによく耐えてきた。
次は Systrace を統計的に処理するとかやりたいなあ。どっかにパーサないものか。Chrome は trace 結果が JSON だったので簡単に Pandas から読めたのだが。