k0tk267.github.io

はじめに

年末に何か書こうかなぁ~と思っていたら、あと数時間で2022年が終わってしまうことが発覚した。 そこで、ここ一年研究室で機械学習周りの実験を回す時のTipsが溜まってきたので、超特急でまとめてみる。

対象者

ホントのほんとに基本の「キ」の字ぐらいの内容なので、ある程度諸々の管理に慣れている人はそのままスルーしてもらった方がよい気がする。研究室に入って初めてプログラムを書いたり、実験を回したりする人向けの内容。

MLOpsとタイトルに名前がついているが、Airflow使ってパイプライン作って、MLFlowとか導入しちゃって学習済みモデルとハイパラ管理でわっしょいみたいな内容ではないのでご注意を(この手大規模なやつは企業のTechブログの方が詳しいはず)。あと一部宗教色が強いかもしれないのでお気をつけて。

事の発端というかぼやきというか…

学部で研究室とやらに配属されたことがなかったので、大学院入学後にはじめて研究室に配属された。 ミーハーなので機械学習系の研究室を選択し、「大学の研究ってどんな感じなんだろう~、やっぱりクールでかっこいいシステムの上で効率的に実験回したりしてるのかしら(アーニャワクワク!)」と思っていたら、各々が我流を極めてとっちらかった感じの実験環境になっていてちょっとびっくりした。

今考えるとインダストリ側とアカデミック側では人の新陳代謝が異なるのと、継続的な改修が必要かどうかや、営利目的かどうかといった点で状態が異なるので、まぁそんなもんといえばそんかなぁ~と思うようにはなってきた。とはいえ、雑に実験を回すのは気に入らないので、最低限の実験管理方法を確立して、細々と改良して現在に至る。

大まかな説明

Mustで行うべき事は以下の3つ

  • とにかくプログラムはGitの管理下に置くべし
  • 使っている言語やライブラリのバージョンはしっかり固定するべし
  • 実験ログが確実に残るようにするべし

余力があれば行うべき事は以下のn個(適宜追加するつもり)

  • よく使うコマンドは固めるべし

といった形で大きく2つに分けて書いていく。

とにかくプログラムはGitの管理下に置くべし

当たり前ではあるが、意外と当たり前では無い選手権ランキング一位だと思っている。
当初自分が触り始めた時も、Gitの操作に慣れるまでは時間がかかった覚えがあるので、意外と導入コストが高いというのは理解している。なのでとりあえず以下の3コマンドだけ覚えるべし。

git add
git commit
git push

とりあえずこれだけ覚えていればなんとかなる。
細かい説明ここ(GitHub演習)に掲載されているので、適宜参照しながら頑張るべし。

使っている言語やライブラリのバージョンはしっかり固定するべし

ここに関しては人によって色々と方法はあると思うが、現状デファクトスタンダードだと個人的に思っているのはPythonのバージョンはpyenvで、使っているライブラリのバージョンはPoetryで管理する方法。

基本的にPythonしか使わない前提でこの2つを選んだため、いやasdfdevboxだというであればそちらでも全然構わない。Python以外の言語も日常的に使う人はそもそもパッケージマネージャがバラけてめんどくさい問題があるので、そういう場合はこれらのツールの方がいいと思う。が、今回その層は対象外なので上記のpyenvとpoetryを紹介する。

Poetryの代わりにPipenv使ったりしてもいいが、多分通常用途では特に大差が無い。あと絶対にAnacondaは使うな!あとプレーンな環境にpip installするな! いや、condaで入れるNumpyの方が計算スピード早いんや!!ワイは絶対conda使うんや!!という場合はAnacondaでゴニョゴニョしてもいいと思う。

Pyenvのインストールに関しては、GitHubのInstallationの項目に導入方法が書いてあって、Poetryのインストールに関しては公式ドキュメントのIntroduction部分に導入方法が書かれているのでチェケラ。

ここで注意する事はライブラリをインストールする時はバージョン指定すること、PyTorchを使う時はpoetry addではインストールできないので、URL指定でインストールすることの2つ。

短期的に使う分にはライブラリのメジャーバージョンがアップデートされる問題にぶち当たらないかもしれないが、念のためバージョンは固定しておいた方が良い(メジャーバージョン云々に関してはセマンティックバージョニングを参照)。要するに、poetry add "numpy>=1.24.1"のようにしてインストールするべしということが言いたい。

次にPyTorchに関してだが、実はPyTorchはpoetry add pytorchでインストールできない。 任意のCUDAバージョンのPyTorchをPoetryでインストールするが一番良くまとまっている気がしているので、対処法に関してはこちらの記事を参照して適宜対処して欲しい。

実験ログが確実に残るようにするべし

logger使ってロギングしたりすることに慣れているなら、うまいこと自分でログファイルとか作ってえんやこらさっさでいいと思うが、基本的にprintしか使えない人が多い気がしている(ちなみにloggerの使い方も色々あるが、一応Python本家がLogging HOW TOというページを作っているので気になった方はこちらを参照)。

あとアドホックな実験を行う場合はNotebookで実験し、うまくいくことが判明すればスクリプトファイルに出力する等の方法を取るのが一般的かもしれないが、Notebookから入るとスクリプトファイルが書けない問題も存在する(クラスとか関数とか切らずに書いたり、ディレクトリ構成とかを気にせずに書いたりするため?)。

一応そのままNotebookからスクリプトファイルに変換できるが、慣れてないと往々にしてNotebookを頭から実行するとよくコケる。

さてどうしたもんかという事で、暫定的な解決策としてpapermillを使って実験を回すという方法で対処する。ざっくり説明すると、これを使うとNotebookをスクリプトファイルのように実行することができる。諸々の使い方は適宜検索してくださいまし。一応公式ドキュメントのリンクは置いておくが、正直これをみても使い方に関してイメージは沸かないと思う。

最後に

2023年になる前までに書き上げたかったので、かなり横暴な説明になっている気がする。 流石にこれでは伝わらんだろうと思ってテンプレートを作って見ることにした。一応まだ工事中ではあるが、それっぽい形になっていたら適宜参照してもらって、ついでにスターなんかつけちゃってくれたりすると嬉しい。