コンテンツにスキップ

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 本体のインストール方法と、ロック済みパッケージ一覧の出力方法を紹介します。

インストール

# On macOS and Linux.
curl -LsSf https://astral.sh/uv/install.sh | sh

# On Windows.
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"

# With pip.
pip install uv

# With pipx.
pipx install uv

# With Homebrew.
brew install uv

# With Pacman.
pacman -S uv

ファイルからロック済みのパッケージを出力

uv pip compile pyproject.toml -o requirements.txt   # Read a pyproject.toml file.
uv pip compile requirements.in -o requirements.txt  # Read a requirements.in file.

uv を使って torch の依存解決

先述の通り、uv で torch の依存解決とインストールを行うには工夫が必要です。pip-compile で依存解決を行い、出力を pip でインストールするという作業をそのまま uv で実行すると、エラーが起こります。同じ作業をエラーなく uv で行うには、overrideの機能を使うとよいです。

override は名前の通り、依存のバージョンを上書きできます。

1
2
3
# overrides.txt
torch==2.1.1+cpu
torchvision==0.16.1+cpu

上記のようなファイルを作成し、uv pip compileの--overrideオプションで指定すると、torch の依存解決とインストールができます。

uv pip compile pyproject.toml -o requirements.txt --override overrides.txt
uv pip install -e . --override overrides.txt

まとめ

uv v0.1.10 で torch と torchvision の依存解決に失敗する場合は、使うバージョンをoverrides.txtへ書き、compile と install の両方で--overrideに渡します。この回避策はこのバージョンで試したもので、別のバージョンで同じエラーが出るかは確認していません。

参考