.wp-block-jetpack-rating-star span.screen-reader-text { border: 0; clip: rect(1px, 1px, 1px, 1px); clip-path: inset(50%); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; word-wrap: normal; }

サイトアイコン NegativeMindException

uvでWindows11のPython環境を管理する

以前は、WindowsにPythonを公式インストーラーで直接インストールしていたけど、



次々と公開される研究の実装を動かして遊ぼうとすると、結局Pythonバージョンやパッケージバージョンの依存関係地獄にハマるので、プロジェクトごとに仮想環境を用意して切り分けることになる。

そんな流れで、動作が高速だと流行り(?)のuvという管理ツールを使ってみようかと↓

uv

Rustで書かれた非常に高速なPythonパッケージ・プロジェクトマネージャーです。



ウォームキャッシュを使用したTrioの依存関係インストール速度の比較

ハイライト

  • 🚀 pip, pip-tools, pipx, poetry, pyenv, twine, virtualenvなどを1つのツールへ置き換えられる。
  • ⚡️ pipよりも10~100倍高速。
  • 🐍 複数のPythonバージョンのインストールと管理。
  • 🛠️ Pythonアプリケーションの実行とインストール。
  • ❇️ Script実行時のインラインでの依存関係メタデータをサポート。
  • 🗂️ ユニバーサルロックファイルによる包括的なプロジェクト管理を提供。
  • 🔩 pip互換のインターフェースを採用し、使い慣れたCLI操作そのままでパフォーマンスを向上。
  • 🏢 スケーラブルなプロジェクト向けにCargoスタイルのワークスペースをサポート。
  • 💾 依存関係の重複排除のためのグローバルキャッシュを備え、ディスク領域を効率的に使用する。
  • ⏬ RustやPython無しでインストール可能だが、curlやpipによるインストールも可能。
  • 🖥️ macOS, Linux, Windowsをサポート。

uvは、Ruffを開発したAstralによってサポートされています。

https://github.com/astral-sh/uv

ツール名が短か過ぎて検索しづらいし、3DCGの「UV座標」と混同しちゃうんだけど、短く(速く)シンプルにしようという意思は感じる。



uvはRustで書かれたツールで、Pythonに依存せず単独でインストールできる。PCにuvをインストールした上で、任意のバージョンのPythonをuv経由でインストールして管理できる。

Windows11にuvをインストール

PowerShellでの操作

Windows11の場合、PowerShellから以下のコマンドでインストールできる↓

powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

※この操作はセキュリティソフトがブロックする可能性があるので、一時的に実行を許可するなどの対応が必要。

コマンドプロンプトでの操作

コマンドプロンプトで以下コマンドを打ってuvのバージョンが表示されたら、正常にインストールが完了している。

uv --version

ちなみに、インストール済みのuvを最新バージョンにアップデートするには以下のコマンド↓

uv self update

では、試しにGitHubからcloneした既存のPythonコードを実行する環境をuvで構築してみよう。個人的興味で、第1回Spatial AI勉強会で知ったDUSt3Rのリポジトリを使ってみる。

Windows11にDUSt3Rの実行環境を構築する

DUSt3RのREADMEのGet Startedをuvの操作に読み替えて進める。
結論から言うと、Windows11上での依存関係の解決に苦戦したので、その結果READMEで指定されているバージョンとは違う構成で構築しました。(DUSt3Rが依存しているCroCoのビルドでハマった)

Python以外のリソースのインストール

DUSt3RのREADMEではcondaで環境構築していてPython関係以外のインストールも含まれているので、まずはPython以外のリソースをWindows11にインストールする。
それぞれ公式ページからダウンロードしたインストーラーでインストール。

DUSt3RのREADMEにはPython 3.11とCUDA 12.1が指定されてるけど、PyTorch公式のCUDA対応表過去バージョンを見て、より安全な組み合わせを選択した。(PyTorchが依存しているtritonのWindows用ビルドは有志による配布で選択肢が少ないのもある)

uvからPythonのインストール

ここからはコマンドプロンプトでの操作。
uv経由でPythonをインストールする。(バージョンはDUSt3RのREADMEに従う)

以下コマンドでuv経由でPython 3.11をインストールする。

uv python install 3.11

このコマンドで、WindowsだとC:\Users\〇〇\AppData\Roaming\uv\python以下にPythonがインストールされる。

uvですでにインストール済みのPythonバージョン一覧を確認するには以下コマンド。

uv python list


スポンサーリンク

DUSt3Rのリポジトリをクローン

(Gitはすでにインストールされている前提)

任意のディレクトリで以下コマンドを打ち、ローカルにDUSt3R一式をクローン。


git clone --recursive https://github.com/naver/dust3r

uvプロジェクトの作成

DUSt3R一式のディレクトリdust3rをuvのプロジェクトフォルダとしてプロジェクトを作成する。

uv init -app dust3r

-appはプロジェクトをアプリとして作成するためのオプション。今回はDUSt3RのGradio製のデモアプリ動かすので-appを選択。

このコマンドでdust3rディレクトリ直下にhello.pyが作成されるけど、今回は既存のPythonコードがあるので無視するか削除してしまって構わない。

仮想環境の作成

DUSt3Rのディレクトリへ移動。

cd dust3r

プロジェクトを作成すると自動的に仮想環境も作成されるけど、使用するPythonのバージョンを明示的に指定して仮想環境を作成するには以下コマンド↓

uv venv --python 3.11.11

仮想環境のアクティベート

作成した仮想環境をアクティベートするには以下コマンド↓

.venv\Scripts\activate

pyproject.tomlの編集

uvの大きな特長として、プロジェクトディレクトリ直下に.toml形式の設定ファイルpyproject.tomlがあり、この設定ファイルで仮想環境のPythonバージョンやパッケージバージョンの依存関係を管理できる。

仮想環境にパッケージを追加するには以下コマンド↓

uv add パッケージ名

仮想環境にパッケージがインストールされると、pyproject.tomlにもパッケージの情報が書き込まれる。

パッケージを削除するには以下コマンド↓

uv remove パッケージ名

requirements.txtを使ってパッケージを追加することもできる↓

uv add -r requirements.txt

DUSt3Rではrequirements_optional.txtもある↓

uv add -r requirements_optional.txt

pyproject.tomlを直接編集してその内容を仮想環境に反映することもできる。編集したpyproject.tomlの内容を反映するコマンドは以下↓

uv sync

例えば、PyTorchのGPU対応版はPyPIで配布されていないので、pyproject.tomlでダウンロードURLを指定する必要がある。
また、Windows環境の場合、PyTorchが依存しているtritonパッケージのWindows版は有志がビルドしたものを使用する。

DUSt3R用のpyproject.tomlは最終的に以下のようになった↓


ここまででDUSt3RのREADMEのInstallationの手順2までが完了。

RoPE用のcudaカーネルをコンパイルする

DUSt3RのREADMEのInstallationの手順3はオプション扱いだが、uvでの操作を書いておく。この手順によりcudaカーネルをコンパイルして実行時間を短縮できる。

crocoのディレクトリへ移動。

cd croco/models/curope/

uv runがPythonコマンドに相当する↓

uv run setup.py build_ext --inplace

元のディレクトリへ戻る。

cd ../../../

学習済みの重みをダウンロードする

dust3rディレクトリ直下にcheckpointsという名前のディレクトリを作成し、以下の学習済みの重みをダウンロードして配置する。

モデル名 学習解像度 ヘッド エンコーダー デコーダー
DUSt3R_ViTLarge_BaseDecoder_224_linear.pth 224×224 Linear ViT-L ViT-B
DUSt3R_ViTLarge_BaseDecoder_512_linear.pth 512×384,
512×336,
512×288,
512×256,
512×160
Linear ViT-L ViT-B
DUSt3R_ViTLarge_BaseDecoder_512_dpt.pth 512×384,
512×336,
512×288,
512×256,
512×160
DPT ViT-L ViT-B

DUSt3Rのデモ(アプリ)を実行する

以下コマンドを実行すると、Gradio製のデモアプリが起動する。

uv run demo.py --model_name DUSt3R_ViTLarge_BaseDecoder_512_dpt

Webブラウザで127.0.0.1:7860にアクセスすれば、DUSt3Rのインタラクティブなデモを操作できる。

最終的にdust3rディレクトリは以下のようになった↓



スポンサーリンク

関連記事

PGGAN:段階的に解像度を上げて学習を進めるGAN

Kaolin:3Dディープラーニング用のPyTorchライブラリ

Google Colaboratoryで遊ぶ準備

書籍『OpenCV 3 プログラミングブック』を購入

YOLO (You Only Look Once):ディープラーニングによる一般物体検出手法

OpenCV バージョン4がリリースされた!

CycleGAN:ドメイン関係を学習した画像変換

3分の動画でプログラミングを学習できるサイト『ドットインストール』

PythonでMayaのShapeノードプラグインを作る

DCGAN (Deep Convolutional GAN):畳み込みニューラルネットワークによる敵...

UnityのTransformクラスについて調べてみた

PyTorch3D:3Dコンピュータービジョンライブラリ

プログラミングスキルとは何か?

ブログの復旧が難航してた話

Dlib:C++の機械学習ライブラリ

Kornia:微分可能なコンピュータービジョンライブラリ

OpenCV 3.1のsfmモジュールを試す

OpenCVで平均顔を作るチュートリアル

COLMAP:オープンソースのSfM・MVSツール

C++始めようと思うんだ

JavaScriptとかWebGLとかCanvasとか

iPhoneアプリ開発 Xcode 5のお作法

SDカードサイズのコンピューター『Intel Edison』

Amazon Web ServicesでWordPress

ブログが1日ダウンしてました

クラスの基本

書籍『ROSプログラミング』

Google App EngineでWordPress

今年もSSII

3D Gaussian Splatting:リアルタイム描画できるRadiance Fields

OpenCV 3.3.0 contribのsfmモジュールのサンプルを動かしてみる

Managing Software Requirements: A Unified Approach

HD画質の無駄遣い

CGAN (Conditional GAN):条件付き敵対的生成ネットワーク

まだ続くブログの不調

ブラウザ操作自動化ツール『Selenium』を試す

Facebookの顔認証技術『DeepFace』

BGSLibrary:OpenCVベースの背景差分ライブラリ

頭蓋骨からの顔復元と進化過程の可視化

Gource:バージョン管理の履歴を可視化するツール

機械学習手法『Random Forest』

OpenMVSのサンプルを動かしてみる

モバイルバージョンを終了