系统:ubuntu 22.04
nvidia驱动:12.1
cuda:11.7
跑:nerf_synthetic数据集
本来准备在自己的3060笔记本上跑,个位数的gpu根本不够,最后重新配环境在服务器上跑的。
主要依靠: Plenoxels代码svox2的复现记录
流程
1.确认下nvidia驱动和cuda是下载好的(nvidia-smi显示的cuda版本可以高于nvcc -V显示的)
nvidia-smi
nvcc -V
2.拉取项目
git clone https://github.com/sxyu/svox2.git
3.在sovx2文件夹中创建环境
conda env create -f environment.yml
source activate plenoxel
4.在plenoxel环境中 pip list
确认一下自己的torch、torchvision、torchaudio后面是否带了cu,如果没有的话 pip uninstall **
分别卸载一下这三项。在pytorch官网查看一下自己的cuda版本应该使用什么版本的pytorch。
个人解决办法很脑瘫,先在官网使用以下代码下载了一次torch,在conda list
里面记录下对应下载的cpu版本。
确认了我使用的是pytorch 2.0.1,torchaudio 2.0.2,torchvision 0.15.2,再将3个卸载,重新下载:
pip install torch==2.0.1+cu117 torchvision==0.15.2+cu117 torchaudio==2.0.2 -f https://download.pytorch.org/whl/cu117/torch_stable.html
其中cu后面的数字是cuda版本,我是用的是11.7版本。查看一下是否可用:
import torch
print('CUDA版本:',torch.version.cuda)
print('Pytorch版本:',torch.__version__)
print('显卡是否可用:' ,torch.cuda.is_available())
5.版本够新,无视以下,还是记录一下
conda install -c bottler nvidiacub
6.在svox2/svox2下执行:
cmake csrc
可能遇到的问题:一些cmake error fixed
其中pybind11和libtorch都只能使用conda install
下载。
libtorch需要在svox2/svox2/csrc/Cmakelists.txt添加内容,以上解决方案内有。途中下载libtorch报The following packages are causing the inconsistency
的错误,显示几个包冲突,忘了截图了,解决方法是把冲突包conda uninstall卸载掉了。
7.在svox2执行:
pip install -e . --verbose
8.将下载好的nerf_synthetic放入svox2/opt,并在在svox2/opt执行:
python -u opt.py -t ckpt/syntest nerf_synthetic/ship -c configs/syn.json
9.评估。运行结束后在svox2/opt/ckpt里面,在svox2/opt文件夹并执行:
python render_imgs.py ckpt/syntest/ckpt.npz nerf_synthetic/ship --no_imsave
最后得到结果
10.得到mp4
python render_imgs_circle.py ckpt/syntest/ckpt.npz nerf_synthetic/ship
都差不多,第一个地址指向训练得到的ckpt里面的npz,第二个指向你存数据集的位置。最后结果在ckpt当中。
报错
1.跑代码到随机光线的时候报:
AssertionError: CUDA extension is currently required for accelerate.
可能是环境没有配好就使用cmake csrc
和pip install -e . --verbose
。直接把所有文件全删了重新git clone
,直接使用完成体的环境重新cmake csrc
和pip install -e . --verbose
一下。(记得在csrc/Cmakelists.txt添加libtorch相关内容)
只要pip install -e . --verbose
报奇怪的错误,都可以考虑把环境搞好后重新git一次代码从头开始。(无论在本地还是在服务器上配环境我都这样解决的)