Create lightweight learning contents about PyTorch Lightning
先日、社内での小規模な勉強会にて、 PyTorch Lightning について発表を行いました。そして、その時に使用した資料をベースに、簡単な学習用コンテンツを起こし、Creative Commons Zero v1.0 Universal ライセンスで GitHub に公開しました。
ねらい
社内勉強会での資料を再利用し、より広くノウハウを共有することを目的としています。
工夫したこと
学習の順序を工夫しました。
- PyTorch Lightning の公式説明(和訳)と、それに対する解説を読む
- PyTorch Lightning による MNIST のコードを読む
- PyTorch, Keras, Chainer の MNIST のコードを読んで、従来の Deep Learning ライブラリとの違いを把握する
- インストール方法を知り、自分で書いて動かせるようにする
- パブリッククラウドサービス (Microsoft Azure) を利用し、より大きな計算リソースで PyTorch Lightning のコードを実行できるようにする
つまり、まずは自然言語とコードで読み物を読んで PyTorch Lightning を知り、その後に手を動かして実行できるようにし、そしてクラウドでの応用を図るという順序です。一般的な技術系コンテンツと比較すると、インストールに至るまでのプロセスにウェイトを置いていると言えます。読み手のモチベーションを高め、 PyTorch Lightning の利用につなげるために、このような構成にしてみました。
どれくらい軽量(lightweight)なコンテンツなのか
社内勉強会では、コードの部分はポイントを絞って説明したため、解説自体は45分程度で終わりました。
結局 PyTorch Lightning を使うメリットは何なのか
それは各自が見いだすものであると考えているため、当該コンテンツ内では触れていないテーマです。勉強会では私見を口頭で述べました。
データサイエンティストにとってのメリット
機械学習の本質ではない処理の記述(epochをforループで回すなど、当該コンテンツ内では「エンジニアリングのためのコード」と呼んでいる)を減らし、アルゴリズム実装により集中できるのがメリットであると考えます。
データサイエンスチームにとってのメリット
データサイエンティストとソフトウェア開発者とのコラボレーションがより簡単になります。まず、データサイエンティストは LightningModule
を継承したクラス内だけを実装すればよく、当該クラス以外の実装をソフトウェア開発者に委ねることができます。
一方、ソフトウェア開発者はそのクラスをインスタンス化して Trainer
クラスのメソッドに与えるだけなので、Deep Learning アルゴリズム実装を想定通りに動作させるためにどのようなプログラムを書けば良いか、深く考える必要はありません。つまり、ソフトウェア開発者もまたプログラムやシステムとしての実装に集中できるのです。ハイパーパラメータについてはデータサイエンティストとソフトウェア開発者との間のコミュニケーションで上手く扱えるでしょう。
このように、コードの中でそれぞれが担当する箇所が明確に分かれるため、並行で作業をしつつもコンフリクトを避けることができ、Git 等でのソースコード管理が容易になります。
また、 LightningModule
によるカプセル化のおかげで、ソフトウェアテストもやりやすくなります。Python なので DI (Dependency Injection) をするには少し工夫が必要ではありますが、この形であればテストは本当に書きやすいと思います。テストを充実させることができれば、ソフトウェアとしての信頼性も高まりますし、リファクタリングも格段にやりやすくなります。
そして、PyTorch Lightning を使うことで、複数の Deep Learning プロジェクト間でのコードの一貫性を高めることができます。何をどのような順序で実行するか、従来はその部分のコードがプロジェクトごとに個別最適化されていた、あるいは属人化していたのではないでしょうか。PyTorch Lightning ではそういった部分を Trainer
が隠蔽しているため、個別最適化を解消し、コードに一貫性を持たせることができます。一貫性のあるコードは保守や引き継ぎを楽にしてくれます。
Deep Learning 初学者にとってのメリット
Deep Learning のプログラムを書くには、データサイエンスの経験とソフトウェア開発の経験の両方が必要です。初学者にとって、学ぶべきものに集中できるという点で、より明確な道筋を示してくれる、あるいはガイドを行ってくれる PyTorch Lightning は、Deep Learning 実装の学習時間を短縮してくれる存在であると言えるのではないでしょうか。
デメリットは?
現状は PyTorch ほどには普及しておらず、どの環境でもすぐに使えるというわけではないということだと思います。とはいえ、 PyTorch との互換性が高く、現時点で直近2年間の Google トレンドも明確に右肩上がりとなっているため、今後普及していくポテンシャルはあると考えられます。
まとめ
LearningPyTorchLightning: Lightweight learning contents about PyTorch Lightning written in Japanese and Python というコンテンツを公開しました。社内勉強会ベースの資料で、あまり手間暇をかけていられず、不完全な部分も多いと思いますが、 Done is better than perfect ということで、ひとまず公開した次第です。
PyTorch Lightning は個人やチームに様々なベネフィットを与えてくれます。そしてその性質上、多くのプロジェクトに適用可能であると思われますので、当該コンテンツが普及の一助になれば幸いです。