皆さん、こんにちは。
私は比較的新しいMLエンジニアで、これまで依存関係の管理にはcondaを使ってきました。condaの最大の利点は、CUDAのようなシステムレベルのパッケージを分離された環境にインストールできる点で、古いCUDAバージョンを必要とするプロジェクトがあるため、これは本当に救いでした。
とはいえ、condaには他にも問題があります。パッケージのインストールは非常に遅く、私が触れてほしくないバージョンにランダムに更新され、他の依存関係を壊してしまい、望むとおりに動作させるために過剰な努力を強いられました。
また、いくつかのプロジェクトが古いLinuxカーネルを必要としたケースにも直面し、それがもう1段階の複雑さを加えました。単にそれだけのために複数のWSLインスタンスを起動したくなかったので、Dockerの話を初めて耳にしたのです。
最近では、より高速で現代的なPythonパッケージマネージャーとしてuvの話をよく耳にします。私の見解では、Pythonパッケージには本当に優れていますが、CUDAのようなシステムレベルのインストールには対応しておらず、condaが私にもたらしていた完全な代替にはなりません。
これに対処しているのは私だけではないでしょう。私にとって最善の方法は、Dockerを使ってシステムレベルの依存関係(CUDAバージョン、Linux環境、システムライブラリ)を処理し、コンテナ内でPythonパッケージと環境をuvで処理することです。そうすることで、各プロジェクトは完全に分離された再現可能な環境を得られます。
ただし私はこの分野の経験が浅く、自分の推測に基づくワークフローに固執したくありません。複数プロジェクトの日々のワークフローがどのようなものか、経験豊富なエンジニアの声を聞きたいです。

