InstantSplat配置记录

一、安装部署

GitHub主页在这里:

GitHub - NVlabs/InstantSplat: InstantSplat: Sparse-view SfM-free Gaussian Splatting in SecondsInstantSplat: Sparse-view SfM-free Gaussian Splatting in Seconds - NVlabs/InstantSplaticon-default.png?t=N7T8https://github.com/NVlabs/InstantSplat.git

1.1下载相关的代码仓库

git clone --recursive https://github.com/NVlabs/InstantSplat.git
cd InstantSplat
git submodule update --init --recursive
cd submodules/dust3r/
mkdir -p checkpoints/
wget https://download.europe.naverlabs.com/ComputerVision/DUSt3R/DUSt3R_ViTLarge_BaseDecoder_512_dpt.pth -P checkpoints/
cd ../../

1.2创建conda环境

conda create -n instantsplat python=3.11 cmake=3.14.0
conda activate instantsplat
conda install pytorch torchvision pytorch-cuda=12.1 -c pytorch -c nvidia  # use the correct version of cuda for your system
pip install -r requirements.txt
pip install submodules/simple-knn
# modify the rasterizer
vim submodules/diff-gaussian-rasterization/cuda_rasterizer/auxiliary.h
'p_view.z <= 0.2f' -> 'p_view.z <= 0.001f' # line 154
pip install submodules/diff-gaussian-rasterization

这里cmake3.14是创建在conda环境里面的,不会与系统内的cmake冲突,我的系统内cuda版本是2.5,但它是向下兼容的,因此可以兼容pytorch的12.1版本,倒数两行提醒了在vim中修改auxiliary.h第154行:把p_view.z <= 0.2f改成 p_view.z <= 0.001f,如图:

1.3为RoPE编译cuda kernel,用来加速dust3r

# DUST3R relies on RoPE positional embeddings for which you can compile some cuda kernels for faster runtime.
cd submodules/dust3r/croco/models/curope/
python setup.py build_ext --inplace

二、遇到的问题

2.1pip install submodules/simple-knn时的编译错误

从图中可以看到,问题出在FLT_MAX那几行

这里参考了GPT的建议:在simple_knn.cu内,添加一行:#include <float.h>,然后解决

Q:#include <float.h>是什么?

A:#include <float.h> 是 C 标准库中的一个头文件,它定义了与浮点类型相关的宏。这些宏提供了浮点数在特定平台上的各种特性和限制的信息,如浮点数的最小值、最大值、精度等。

具体来说,<float.h> 头文件包含以下一些常用的宏:

  • FLT_RADIX: 基数
  • FLT_MANT_DIGDBL_MANT_DIGLDBL_MANT_DIG: 单精度、双精度和扩展精度浮点数的尾数位数
  • FLT_DIGDBL_DIGLDBL_DIG: 单精度、双精度和扩展精度浮点数的十进制有效数字位数
  • FLT_MINDBL_MINLDBL_MIN: 单精度、双精度和扩展精度浮点数的最小正值
  • FLT_MAXDBL_MAXLDBL_MAX: 单精度、双精度和扩展精度浮点数的最大值
  • FLT_EPSILONDBL_EPSILONLDBL_EPSILON: 单精度、双精度和扩展精度浮点数的机器精度(最小正数,使得1加上这个数不等于1)

然后,Instantsplat顺利安装。

2.2关于cuda12.1

我尝试安装过12.1,碰见了很多小问题,这里做记录

2.2.1为什么我明明用的是安装cuda12.1的命令,安装完却是最新版的cuda12.6?

坏就坏在这条命令:sudo apt-get update,这些安装cuda12.1的命令在执行到此之前,都是正常的12.1的步骤,它对要安装的版本号做了更新,所以安装的是最新版本12.6!去掉这条命令即可安装旧版本,确实一般安装12.6也能代替12.1,向下兼容嘛。

2.2.2一个系统多个cuda版本

我的系统中,现在有三个版本的cuda,分别是11.8、12.1、12.5,如何让他们自由切换呢?创建一个软连接即可:手动更新符号链接,步骤如下:

  1. 移除现有符号链接

    sudo rm -f /usr/local/cuda
    
  2. 创建新的符号链接

    假设你安装的CUDA 12.1在/usr/local/cuda-12.1目录下:

    sudo ln -s /usr/local/cuda-12.1 /usr/local/cuda
    
  3. 验证符号链接

    通过以下命令验证符号链接是否正确:

    ls -l /usr/local/cuda
    

    你应该看到输出类似于:

    lrwxrwxrwx 1 root root 20 Aug  3 14:00 /usr/local/cuda -> /usr/local/cuda-12.1

注意,这个前提是环境变量中需要改成/usr/local/cuda这个软连接的位置

2.2.3runfile文件安装过程中cuda demo suite是什么?

CUDA Demo Suite是CUDA安装包中包含的一组示例程序和演示,用于展示CUDA的功能和性能。这些示例程序可以帮助开发者理解如何编写和优化CUDA程序。安装CUDA Demo Suite可以让你直接运行这些示例程序,查看CUDA在你的系统上的表现和效果。

安装CUDA时的选项

在使用runfile文件安装CUDA时,你可能会看到一个选项,询问你是否要安装CUDA Demo Suite。这些示例程序位于CUDA安装目录中的extras/demo_suite文件夹内。

包含的示例

CUDA Demo Suite包括各种各样的示例程序,例如:

  • 矩阵乘法
  • 向量加法
  • 图像处理
  • 物理模拟
  • 算法加速

这些示例程序展示了如何使用CUDA进行并行计算,并且可以用来测试你的CUDA安装是否正确配置。

是否安装CUDA Demo Suite

安装CUDA Demo Suite不是必须的,但对于那些希望学习CUDA编程或验证CUDA安装是否正确的人来说,它是一个有用的资源。安装过程中的选择取决于你的需求:

  • 需要学习和测试:如果你是CUDA编程的新手,或者希望验证你的CUDA安装是否正常工作,建议安装CUDA Demo Suite。
  • 空间有限或不需要:如果你已经熟悉CUDA,并且系统空间有限,或者不需要这些示例程序,可以选择不安装。

安装CUDA Demo Suite的步骤

在安装CUDA的过程中,当提示是否安装CUDA Demo Suite时,选择“是”即可。安装完成后,你可以在CUDA安装目录中找到这些示例程序,并通过以下命令运行它们:

cd /usr/local/cuda/extras/demo_suite
./<demo_program>

其中,<demo_program>是具体的示例程序名称。

通过运行这些示例程序,你可以看到CUDA在你的系统上的表现,并学习如何编写和优化CUDA程序。

2.3关于cuda gpu的检查

我在执行 bash scripts/run_train_infer.sh时,终端报错(runtimeerror:no cuda gpus are available)找不到gpu,这是一个很奇怪的问题,我的各种配置明明是好的。求助GPT:我得到了一个全面排查cuda以及gpu状态的命令链条,最后找到问题所在,是sh脚本里面gpu_id写错了,应该是作者他们使用了多卡并行训练,一般单卡的时候gpu_id=0

全面排查cuda以及gpu状态的逻辑如下:

在运行你的bash脚本时出现RuntimeError: no CUDA GPUs are available的错误,通常意味着PyTorch未能检测到你的CUDA兼容的GPU。这可能有几个原因:

排查步骤
  1. 检查GPU是否被其他进程占用
    使用nvidia-smi命令查看当前GPU的使用情况:

    nvidia-smi
    

    确认你的GPU (ID为6) 没有被其他进程占用。如果GPU被占用,可以考虑终止那些占用GPU的进程。

  2. 检查CUDA驱动和库的安装
    确保你的CUDA和驱动程序正确安装。使用以下命令检查CUDA和驱动程序版本:

    nvcc --version
    nvidia-smi
    

    确保输出显示正确版本的CUDA和驱动程序。

  3. 验证PyTorch的CUDA支持
    进入Python环境,运行以下代码,检查PyTorch是否能检测到CUDA:

    import torch
    print(torch.cuda.is_available())
    print(torch.cuda.device_count())
    print(torch.cuda.current_device())
    print(torch.cuda.get_device_name(0))
    

    确保输出显示True,并列出你的GPU设备。

  4. 确保CUDA环境变量正确配置
    确保CUDA相关的环境变量在运行你的bash脚本时是正确配置的。你可以在bash脚本的开头添加以下行来确保环境变量配置正确:

    export PATH=/usr/local/cuda/bin:$PATH
    export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
    
  5. 指定正确的CUDA设备
    确保在脚本中指定的GPU ID是正确的。你可以通过nvidia-smi查看GPU的ID,并在脚本中确认GPU_ID=6是正确的。

修改脚本以便调试

在运行bash脚本时,你可以添加一些调试信息来帮助你定位问题。例如,在每个命令前后打印一些调试信息:

echo "========= Checking GPU availability ========="
nvidia-smi
python -c "import torch; print(torch.cuda.is_available())"

echo "========= ${SCENE}: Dust3r_coarse_geometric_initialization ========="
eval $CMD_D1
echo "========= ${SCENE}: Train: jointly optimize pose ========="
eval $CMD_T
echo "========= ${SCENE}: Render interpolated pose & output video ========="
eval $CMD_RI

通过这些调试信息,你可以更好地了解在脚本运行期间GPU的状态和PyTorch对CUDA的检测情况。

最后建议

如果以上步骤都没有解决问题,建议重启系统,并确保所有相关服务(如CUDA驱动)正确启动后再运行脚本。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值