2021/06/18 分析コンペLT会#2 での発表資料です。
pythonで気軽にパッケージを作るのは良いという話。2021/06/18 分析コンペLT会nyk510
View Slide
Hello!山口貴大 twitter @nyker_gotoatma(アートマ)株式会社 取締役atmaCupというデータコンペを開催している会社です。京都大学大学院 最適化数理卒 SGDが好き😆Kaggle Master kaggle.com/nyk5102
みなさんは、自分でパッケージを作成したことがありますか?3
意外と無い人が多い? 気がします。4
話は変わりますが…複数コンペをやると「前と似たこと、やりたいな」ってなりますよね5
それ毎回コピペで済ませていませんか?6
そして、こういう経験はありませんか?7
● 前のプロジェクトの似たような部分をコピペしたけど依存部分があって動かない● One-Dayコンペで前のコードをコピペしたらバグがでて動かず時間をロスした● コピペを編集をコピペして…使った結果なにやってるかよくわからなくなった8
つらいですね…9
悲しい事件をへらすため自分のパッケージを作りましょう!10
パッケージがあると嬉しいこと● つよくてニューゲーム○ 最初からつよい武器がある○ 特にスタートダッシュが大事な某atmaCupなどで便利● 引き継がれること前提の行動を取りやすい○ 汎用的になりそうな部分を最初から切り分けて実装 → 可読性向上○ ドキュメント記述など使いやすさを高めるモチベーションが湧きやすい● かっこいい○ pip install おシャイ (感じ方は個人差があります)11
最小構成のパッケージは、意外と簡単さっくり始めるパッケージ開発● パッケージ用のリポジトリを作成● setup.py を作成して各種のプロジェクト情報を記入○ setup.py の構成の例 →● おわり!12
最小構成のパッケージは、意外と簡単setup.py さえあれば pip install できるしバージョン管理も出来る!● pip install [email protected]○ gitのtagでinstallするversionを指定できる○ tagがないときは最新version(master)でinstallされる例: pip install git+https://github.com/nyk510/[email protected]これをスタートにして、気が向けばいろいろ追加すればいい● CI / テストなどなど● 長ったらしいのは面倒な人は pypi に登録することも出来ます。13
最小限の構成を作ってみましたhttps://github.com/nyk510/my-awesome-package に作りました。14
分析用パッケージは、結構作っている人がいます● nyanpさん: nyaggle (Code for Kaggle and Offline Competitions)○ https://github.com/nyanp/nyaggle● u++さん: ayniy (Ayniy, All You Need is YAML)○ https://github.com/upura/ayniy● Ynakatsukaさん: kaggle_utils (My utility scripts for Kaggle Competitions)○ https://github.com/Ynakatsuka/kaggle_utils僕も前の分析コンペLT会では自分の分析パッケージのお話をしました。1
ふむふむ、2
あれ、もうあるならなぜいまさら自分でパッケージを作るの?3
すごい人が作ってる奴があるし、自分で作らなくても十分じゃない?車輪の再発明っていうやつだ!4
再発明をやってみてわかった、よいこと1. 機械学習を抽象化して考えられる2. 抽象化の失敗の体験をできる3. 一般的な開発に必要なものの必要性がわかる4. 機械学習以外でも使える5
機械学習を抽象化して考える私のコードは何をしているのか、を改めて考えられる● ただ個別の事案をコピーするだけではパッケージには成り得ない● 共通部分は何か・個別の事案への対応性・拡張性はあるか etc…全部0から考える必要はないし、答えはない● 人のパッケージ構造を読んでいいところを考えるのもコードを理解する力がつく● 自分なりの答えを出して実装することで思考・実装力がつく● atmaCupで僕が多用する BaseBlock とかもその一つ6
抽象化を失敗する体験ができる抽象化は、失敗する。● 直したい処理を直せず結局パッケージの該当部分全部コピペして修正する失敗は成功の母● 失敗すること自体はそんなに悪いことでもない(と思う)● どの構造の仮定がまずかったのかを考えて手直しする→ 論理構造を考える訓練になる● 人はどうやってるのか調べる→ 人のコード・抽象化理解の訓練になる● 壊れてから初めてデザインパターン等の有り難みを知れる7
一般的な開発周りの体験ができる / テスト書き方がわからない? 最初から書けなくっても大丈夫!● 先人のリポジトリを参考にして、コピーしつつ。無理ないところから。テストコードを書くようになると有り難みを感じられる● テストで確認されたコード群のみを持っていけるのはとても安心● 分析当日にバグ見つけた!が減る残念ながらテストを書いたって、バグはある● テストの何がまずかったか、振り返ることができる● 自分の思考の何がまずかったのか考えるきっかけになるhttps://github.com/nyk510/vivid/pull/47/files: numpy.inf が None 扱いにならないこと起因のバグ8
一般的な開発周りの体験ができる / CI人は怠惰● テスト手動でするのだるい: master merge するときに自動でテストしたい● pypi upload だるい: バージョンを作成したら自動的に pypi へ登録したい自ずとCIが欲しくなる● CIツールの使い方を学習するきっかけになる● CIでのテストでバグが見つかるとえもいわれぬ快感がある(個人差があります)書き方がわからない? 最初から書けなくっても大丈夫!● そもそも別になくても困りはしない(ちょっと面倒なだけ)● 必要だと思ったら先人のリポジトリを参考にして、無理ないところから。9
機械学習以外でも使える機械学習以外のプロジェクトでもパッケージをつかえると便利なことは多いです● web application の共通部分管理○ 機械学習のツール○ Djangoでよく出てくる処理の管理● CLI ツールの作成○ guruguru cli● などなど10
まとめ!パッケージ開発は、共通部分の管理以外にも、良いことがいっぱいあります。さっくり始めるのは、意外と簡単です。みなさん、気軽に自分のパッケージを作ってみるのは如何でしょうか。11
さいごにおしらせ12
直近atmaCupやります!詳細決まり次第connpassで告知します ;)13
EOC14