以前は、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をサポート。
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にインストールする。
それぞれ公式ページからダウンロードしたインストーラーでインストール。
- CMake 3.31.4
- CUDA Toolkit 11.8
- cuDNN 8.7.0.84
- Microsoft Visual C++ 2019 (Visual Studio Community 2019)
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
作成済み仮想環境のPythonバージョンを変更するには以下コマンド↓
uv pin 3.11
仮想環境のアクティベート
作成した仮想環境をアクティベートするには以下コマンド↓
.venv\Scripts\activate
ちなみに、MacやLinux環境でアクティベートする場合は以下コマンド↓
source .venv/bin/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
ディレクトリは以下のようになった↓
関連記事
Unityで画面タッチ・ジェスチャ入力を扱う無料Asset『...
Russian3DScannerのトポロジー転送ツール『Wr...
タマムシっぽい質感
WebGL開発に関する情報が充実してきている
このブログのデザインに飽きてきた
WordPressのサーバ引っ越し方法を考える
ZBrushで作った3Dモデルを立体視で確認できるVRアプリ...
機械学習のオープンソースソフトウェアフォーラム『mloss(...
オープンソースの人体モデリングツール『MakeHuman』の...
立体映像プレイヤー『Stereoscopic Player』
Alice Vision:オープンソースのPhotogram...
頭蓋骨からの顔復元と進化過程の可視化
OpenFace:Deep Neural Networkによ...
Virtual Network Computing
ドットインストールのWordPress入門レッスン
Deep Learningとその他の機械学習手法の性能比較
NeRF (Neural Radiance Fields):...
SVM (Support Vector Machine)
オープンソースの取引プラットフォーム
PythonのHTML・XMLパーサー『BeautifulS...
Deep Fluids:流体シミュレーションをディープラーニ...
windowsのエクスプローラでRAW画像のサムネイルを表示...
書籍『イラストで学ぶ ディープラーニング』
iPhone x ロボットハッカソン~RomoのiPhone...
Google Chromecast
Python2とPython3
PyMC:Pythonのベイズ統計ライブラリ
WordPressの表示を高速化する
機械学習での「回帰」とは?
Zibra Liquids:Unity向け流体シミュレーショ...
PyTorch3D:3Dコンピュータービジョンライブラリ
OpenMesh:オープンソースの3Dメッシュデータライブラ...
デスクトップPCを新調した!
OpenCV 3.3.0-RCでsfmモジュールをビルド
オープンソースの物理ベースGIレンダラ『appleseed』
Mayaのポリゴン分割ツールの進化
Google App Engineのデプロイ失敗
adskShaderSDK
iPhone・iPod touchで動作する知育ロボット『R...
スクラッチで既存のキャラクターを立体化したい
OpenCVの超解像(SuperResolution)モジュ...
OpenCVでiPhone6sのカメラをキャリブレーションす...
コメント