環境の要件
どう転んでも変わらない条件は以下のとおりである。
- PyTorch使用
- NeoVimユーザー
- Arch LinuxとUbuntuを行き来する
- WindowsやMacは無視していい
俺の解答
- 仮想環境管理はConda
- 補完はcoc-python + jedi
Condaを使うわけ
簡単な比較を作ってみた。
環境 | 良い | 悪い |
---|---|---|
Conda | PythonとCUDAのバージョン管理できる。PyTorchもバージョン管理しやすい | 依存性解決が遅い上にたまに失敗する。パッケージの出し入れが面倒くさい |
Docker | 確実に環境を分離できる | とにかく管理が面倒くさい。GPU透過などやりたくない設定が多すぎる |
Poetry | デファクトっぽい。依存解決は速い | tomlの記載が面倒くさい。バージョン指定など厳密すぎる。要パッケージ化 |
Pipenv | シンプル | 依存解決が病的に遅い。メンテされてない疑惑 |
裸virtualenv | シンプル、速い | ツールチェインが貧弱 |
Arch使ったりUbunut使ったりな環境でPyTorchのバージョンを揃えたい。そうなるとPythonとCUDAバージョンも統一したいが、そうなるとCondaかDocekerかとなる。 Dockerは確実に環境を分離できるが、それ以外のデメリットが多すぎる。Pythonランタイム自体コンテナ内に閉じ込められているし、スクリプトなどもコンテナ内に置く必要がある。 念の為下三者も考慮すると、CUDAは百歩譲って頑張って合わせるにしても、ArchとUbuntuで同じPythonを使うにはPython自体をランタイムとして配布されている必要があり、UbuntuなどシステムのPythonを3.8に置き換えるにはなかなかの手間である。 アプリを作るならPoetryで、レガシーな環境でやるならvirtualenvみたいな使い分けはあるが、今回はこれらの出番ではないかな。