uv を使った torch の依存管理¶
uv v0.1.10 で torch と torchvision を一緒にインストールする際、依存解決のエラーを--overrideで回避する方法を紹介します。このバージョンで試した手順であり、別のバージョンでも同じ制約があるとは限りません。
uv とは¶
uv は、astral-sh が 2024 年 2 月に公開した非常に高速な Python パッケージインストーラー兼リゾルバーです。pip と pip-compile を置き換えるものとして Rust で書かれています。astral-sh/uvが出しているベンチマークでは、pipとpip-toolsより 10 倍から 100 倍速いという結果が出ています。 静的バイナリを配布しているため、Python や Rust のインストールは不要です。 依存解決の戦略として highest 以外にも lowest を選択できるほか、依存のオーバーライドにも対応しています。
この記事の目的¶
uv はまだ開発段階であり、pipやpip-toolsと比べて機能が不足している部分もあります。これまでできていたことが uv v0.1.10 ではできない場合もあり、torch のインストールが一例です。 uv v0.1.10 でも torch 単体はインストールできますが、torchvision のように torch に依存するパッケージと一緒にインストールする場合は工夫が必要です。これまでのpipと同じようなパッケージの指定方法では、エラーが出ることもあります。
こうした状況でも少しの工夫で torch の依存解決とインストールができるので、本記事では具体的な手順を紹介します。
Warning
本記事は v0.1.10 の時点で書いたものです。最新版では問題が解消され、スムーズにインストールできる可能性があります。
uv のインストールと使い方¶
ここでは、uv 本体のインストール方法と、ロック済みパッケージ一覧の出力方法を紹介します。
インストール¶
ファイルからロック済みのパッケージを出力¶
uv を使って torch の依存解決¶
先述の通り、uv で torch の依存解決とインストールを行うには工夫が必要です。pip-compile で依存解決を行い、出力を pip でインストールするという作業をそのまま uv で実行すると、エラーが起こります。同じ作業をエラーなく uv で行うには、overrideの機能を使うとよいです。
override は名前の通り、依存のバージョンを上書きできます。
上記のようなファイルを作成し、uv pip compileの--overrideオプションで指定すると、torch の依存解決とインストールができます。
まとめ¶
uv v0.1.10 で torch と torchvision の依存解決に失敗する場合は、使うバージョンをoverrides.txtへ書き、compile と install の両方で--overrideに渡します。この回避策はこのバージョンで試したもので、別のバージョンで同じエラーが出るかは確認していません。