はじめに
半年ほど前にNeRFをgoogle colabで動かす記事を書きました。
umikazeken.hatenablog.com
今回はWSL2(Windows Subsystem for Linux)上で動かしてみました。
前回はWSL2ではうまく動かなかったのでリベンジです。
オリジナルのNeRFはtensorflow版ですが、最近はPyTorchの方が勢いが
あるようなので、下記のPyTorch版を動かしてみました。
github.com
実行環境
実行環境は以下の通り。
項目 | スペック |
---|---|
PC | ASUS ROG Zephyrus M16 |
CPU | Core i7-11800H, memory:40GB |
GPU | Nvidia RTX3070 Laptop, memory:8GB |
OS | Windows 11 Home 22H2Ubuntu 22.04.1 LTS |
環境構築
まずはGitHubのページに記載されている手順通り動かしてみます。
前提:WSL2環境にanacondaをインストール済。
conda create -n nerf python=3.9 conda activate nerf git clone https://github.com/yenchenlin/nerf-pytorch.git cd nerf-pytorch pip install -r requirements.txt bash download_example_data.sh
最後の行を実行中にunzipが無いと言われたので、unzipをインストールしています。
sudo apt install unzip
環境構築が終わったら動かしてみます。
python run_nerf.py --config configs/lego.txt
エラーで落ちました。
/home/******/anaconda3/envs/nerf/lib/python3.9/site-packages/torch/cuda/__init__.py:145: UserWarning: NVIDIA GeForce RTX 3070 Laptop GPU with CUDA capability sm_86 is not compatible with the current PyTorch installation. The current PyTorch install supports CUDA capabilities sm_37 sm_50 sm_60 sm_70. If you want to use the NVIDIA GeForce RTX 3070 Laptop GPU GPU with PyTorch, please check the instructions at https://pytorch.org/get-started/locally/ 中略 RuntimeError: CUDA error: CUBLAS_STATUS_EXECUTION_FAILED when calling `cublasSgemm( handle, opa, opb, m, n, k, &alpha, a, lda, b, ldb, &beta, c, ldc)`
PyTorchを再インストール
上記のエラーメッセージを見ると適切なPyTorchがインストールされていないようです。
エラーメッセージに従い、https://pytorch.org/get-started/locally/を開きます。
このページのテーブルの項目を使用中の環境に合わせて選択していきます。
私のPCにはCUDA11.8が入っているので、こんな感じに選択しました。
注:CUDAが入っていない人はNvidiaのページからインストールしてください。
CUDA Toolkit - Free Tools and Training | NVIDIA Developer
選択結果に応じて「Run this Command:」欄にコマンドが表示されるので、
このコマンドを使ってPyTorchを再インストールします。
conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia
再実行
PyTorchを再インストールしたら再実行してみます。
python run_nerf.py --config configs/lego.txt
今度は無事に動き出しました。
1%|▉ | 1617/200000 [05:50<11:29:01, 4.80it/s] 1%|▉ | 1617/200000 [05:50<11:57:42, 4.61it/s]
が、最初の試行に11時間はちと長い・・・
イタレーション回数を減らし品質を落として動作確認をしてみます。
run_nerf.pyを編集してN_itersに設定している値を変更します。
run_nerf.py(編集前)
697 if use_batching: 698 rays_rgb = torch.Tensor(rays_rgb).to(device) 699 700 701 N_iters = 200000 + 1 702 print('Begin')
run_nerf.py(編集後)
697 if use_batching: 698 rays_rgb = torch.Tensor(rays_rgb).to(device) 699 700 701 N_iters = 2000 + 1 702 print('Begin')
イタレーション回数を1/100にしたので実行時間もほぼ1/100になります。
このまま実行すると結果の動画が出力されないのでオプションを追加して実行します。
python run_nerf.py --config configs/lego.txt --i_video 2000
動かしてみます。結果はlogsフォルダにmp4動画として出力されます。
イタレーション回数を大幅に減らしているのでボケてますが、動いているようですね。
めでたしめでたし
ではまた。