ML関連の実装を使う
ML関連の論文には、Supporting Informationとしてたいていソースコードがついてくる。たいてい動かない。なんとか動かそうとして気合だけでコマンドを叩きまくり、毎回精神を消耗しているので、戦術を整理して戦いやすくする。ML屋さんがPythonを使う限り、戦いは避けられない。 パッケージングシステム
pythonのパッケージ以外の依存が必要なときはmicromamba condaは遅いので、mamba, あるいはmicromambaを使う
まずは、READMEを見て再現できるか試す。
依存関係
次のファイルのどれかがあればまあなんとかなる
setup.py
environment.yaml: 中身による
--from-history で出してくれていると嬉しい。雑に全部吐き出されるとどれが大事かわからない。
pyproject.toml: うれしい
ない場合
Pythonの import文を読み取って依存関係を抽出してくれるソフトウェアがある
うまくいかなかったら、まずは先人の知恵を拝借する
1. 依存関係のファイルを見る
たまにREADMEとこういうファイルで入れているソフトウェアが違ったりする
2. プルリクを観る。誰かが違う環境で再現しているかもしれない。
3. forkを見る
4. issueを見る
バージョンを確認する
Python
CUDA
GPUの対応しているバージョンに対応していない
pytorch>=x.y.z=*cuda* とまで指定しないと cpu 向けのビルドがインストールされてしまうことがある
A100なら11.8以上
場合によってはホストPCのCUDAやドライバをアップデートする
pandas, NumPy, pytorchあたりは1系と2系の互換性でつまずきがち
もとのプロジェクトはなるべく書き換えない
まずうまくいかない。
リポジトリに含まれている依存関係の指定方法を踏襲する。setup.pyをpyproject.tomlで書き換えるのは難しい。
使いづらい場合はラッパーとなるPythonパッケージを(uvとかで)別途作る。
使いづらさをそのラッパーに閉じ込める。
Python 3.7まででしか動かないコードを、Python 3.9のコードから呼び出したい場合も、3.7のコードをsubprocessとかで呼び出すコードを3.9で実装して、パッケージにする。
3.7のコードを3.9にアップデートしようとすると泥沼。
conda/mambaのメンタルモデル
${CONDA_PREFIX}/envs にvenvがたくさん入っている。移動とか削除は適当にやって問題ない。
次に困らないために
$ mamba env export --from-history > environment.yaml しておく
GitHubで公開する
conda-lockを使って、lockファイルを作る