Poetry1.5.1からGPU版のPytorchのインストールが簡単になりました
結論
GPU版PytorchのようなPyPIに存在しないパッケージにおいて、Poetry1.5.1からインストールがより簡単になりました🎉
例えば自分の環境では下記の2行でインストールできます。
poetry source add torch_cu118 --priority=explicit https://download.pytorch.org/whl/cu118
poetry add torch torchvision torchaudio --source torch_cu118
具体的には下記の手順できます。
- 公式サイトから、インストールコマンドをコピーする。
-
--priority=explicit
オプション をつけて、先程のindex-urlをpoetry source add
コマンドで登録する。
# torch_cu118という命名は変更可能
poetry source add torch_cu118 --priority=explicit https://download.pytorch.org/whl/cu118
- 先程のsourceを指定して、poetry add でインストールする。
poetry add torch torchvision torchaudio --source torch_cu118
...
Resolving dependencies... (556.8s)
Package operations: 6 installs, 1 update, 0 removals
• Installing cmake (3.26.4)
• Installing lit (16.0.6)
• Installing triton (2.0.0)
• Updating torch (2.0.1 -> 2.0.1+cu118)
• Installing pillow (10.0.0)
• Installing torchaudio (2.0.2+cu118)
• Installing torchvision (0.15.2+cu118)
このとき、Poetryは指定したsource(torch_cu118
)を探しに行って、環境に沿ったwheelファイルを見つけて、インストールしてくれます。
補足
Poetry 1.5系から、poetry source add
コマンドに--priority=explicit
オプションを追加されました。このオプションを使うと、poetry add --source hoge
のように明示的に指定した場合のみ、追加したソースを検索します。
ちなみに、poetry source add
は1.2系から存在しています。
しかし、1.5系以前は--priority=explicit
オプションがなく、PyPIにあるライブラリをインストールする際も、追加したソースを含めて検索する選択肢しか提供されていませんでした。この仕様により、インストール時間が非常に長引いたり、ログが汚染されてしまうという、耐え難い挙動の変化が起きてしまうのです。
したがって、source add
コマンドを使って、Pytorchをインストールするという選択肢はPoetry1.5系から実用的になったといえます。
1.5系以前では、環境に合わせたwheelのURLを見つけて指定し、それをインストールするのが最も実用的な方法でした。
[tool.poetry.dependencies]
python = "^3.10"
numpy = "^1.23.2"
torch = { url = "https://download.pytorch.org/whl/cu116/torch-1.12.1%2Bcu116-cp310-cp310-win_amd64.whl"}
torchaudio = { url = "https://download.pytorch.org/whl/cu116/torchaudio-0.12.1%2Bcu116-cp310-cp310-win_amd64.whl"}
torchvision = { url = "https://download.pytorch.org/whl/cu116/torchvision-0.13.1%2Bcu116-cp310-cp310-win_amd64.whl"}
ちなみに記事のタイトルで1.5.1以降と指定しているのは、1.5.0にはクリティカルなバグが存在するためです。
まとめ
Poetry1.5.1からPytorchのインストールが簡単になりました。 未検証ですが、cudfなど他のPyPIからインストールすることができないGPUライブラリにも応用することができると思います。
Poetryは最近頻繁にアップデートをしていて、その度に高速化されたり、ロバストなパッケージのインストールが可能になっているので、リリースノートを読みつつ新しいバージョンを使っていきたいと思いました。
ちなみに、PyPIとかPoetryとかwheelなど Pythonのパッケージングと配布の前提知識について、幅広く知りたい場合、下記の記事がおすすめです。😎
参考
Discussion