马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
在 Linux 上装 diff-gaussian-rasterization:CUDA 版本切换与 glm 缺失的坑
复现 3D Gaussian Splatting 类论文时,pip install submodules/diff-gaussian-rasterization 这一步经常编译失败。核心原因多半不是代码问题,而是驱动版本、CUDA 版本、conda 虚拟环境里 torch 编译时所依赖的 CUDA 三者不对齐。这篇记录一次完整排查:从报错现象 → 定位到 CUDA 版本 → 在 WSL 里装 CUDA 11.1 并切换 → 解决 glm/glm.hpp: No such file or directory。
一、先说症状
在服务器上跑 pip install submodules/diff-gaussian-rasterization,编译直接挂掉。这台机器驱动是 CUDA 12.0,本地也是 CUDA 12.0,但 Anaconda 新建的虚拟环境里,pytorch 编译时用的其实不是虚拟环境里那份 cudatoolkit=11.1,而是直接链接到了系统本地的 CUDA 12.0。
按常规思路应该装一套新 CUDA,但装新 CUDA 要管理员权限——服务器你不一定有。这种情况下,换到本机 WSL 上做实验往往更省事。
二、下载安装 CUDA 11.1
在 WSL(Ubuntu)里跑官方 runfile:
wget https://developer.download.nvidia.com/compute/cuda/11.1.0/local_installers/cuda_11.1.0_455.23.05_linux.run
sudo sh cuda_11.1.0_455.23.05_linux.run
交互步骤:
- 选
Continue
- 输入
accept
- 在组件列表里取消勾选 Driver(如果没有这个选项就默认已取消)——本机的 NVIDIA 驱动已经有了,再装一遍容易把驱动装坏
装完 /usr/local/cuda-11.1 就在了。
三、切换 CUDA 版本
网上很多帖子说改软链接让 nvcc -V 认到 11.1,实测改完还是显示 12.0——因为 PATH 里先命中了别的路径。最稳的办法是在 ~/.bashrc 末尾把老的 CUDA 声明注释掉,重新声明 11.1:
vim ~/.bashrc
把原来 CUDA 12.0 那几行 export 掉,改成:
export PATH="/usr/local/cuda-11.1/bin PATH"
export LD_LIBRARY_PATH="/usr/local/cuda-11.1/lib64 LD_LIBRARY_PATH"
export LIBRARY_PATH="/usr/local/cuda-11.1/lib64 LIBRARY_PATH"
刷新并验证:
source ~/.bashrc
nvcc -V
显示 Cuda compilation tools, release 11.1 即切换成功。注意新开终端也要 source 一次,或者让 .bashrc 每次登录自动跑。
四、安装 pytorch 并确认 torch 能用 GPU
在 conda 虚拟环境里装好和 CUDA 11.1 对应的 torch(pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu111 一类的命令),然后务必验证一次:
python -c "import torch; print(torch.__version__); print(torch.cuda.is_available()); print(torch.version.cuda)"
能打印出版本号,且 is_available() 是 True,才继续往下。这一步跳过去,后面编译的报错会很莫名。
五、diff-gaussian-rasterization 编译报 glm 找不到
回到正题,在虚拟环境里执行:
pip install submodules/diff-gaussian-rasterization
报: fatal error: glm/glm.hpp: No such file or directory。这是编译期缺 OpenGL Mathematics 头文件库,不是代码问题。装一下即可:
sudo apt-get install libglm-dev
装完重新跑那条 pip 命令,编译通过,装上了。这类 "No such file or directory" 指向头文件时,第一反应就是缺 dev 包,比死磕编译参数快得多。
六、排查顺序总结
- 先看 torch 到底链的是哪份 CUDA:
torch.version.cuda 与 nvcc -V 对照,不一致就是版本错配。
- 再确认驱动能带得动:
nvidia-smi 右上角显示的 CUDA Version 是驱动支持的上限,不能低于要编译的版本。
- 虚拟环境里设 LD_LIBRARY_PATH:只改 PATH 不改动态库搜索路径,运行时还是可能加载到旧的 12.0。
- 头文件缺失:报
xxx/xxx.h: No such file 就找对应的 -dev 包装。
整套折腾下来大约半天,基本都在等下载和编译。换环境前先把这套版本对应关系理顺,能省下大量无头苍蝇式的试错。
qidao123.com企服评测-应用市场 编辑提示 |