1. 环境准备与依赖检查
在Linux系统上搭建PyTorch3D环境,最让人头疼的就是各种依赖冲突。我最近为了复现一篇论文,需要在Ubuntu 20.04上安装PyTorch 1.7.1 + CUDA 10.1 + PyTorch3D 0.4.0的组合,整个过程踩了不少坑。这里把我的经验完整分享出来,帮你避开这些雷区。
首先明确几个关键点:
- Python版本:PyTorch3D 0.4.0要求Python 3.8
- CUDA版本:项目锁定在10.1,这意味着所有组件都要兼容这个版本
- GCC/G++版本:过高会导致编译失败,建议使用7.x版本
创建conda环境是第一步:
conda create -n pytorch3d_env python=3.8 conda activate pytorch3d_env安装PyTorch时要注意指定正确的CUDA版本:
pip install torch==1.7.1+cu101 torchvision==0.8.2+cu101 torchaudio==0.7.2 -f https://download.pytorch.org/whl/cu10.1/torch_stable.html这里有个细节:torchaudio没有GPU版本,但项目里其实用不到GPU加速,所以直接安装CPU版本就行。我一开始纠结这个问题浪费了不少时间。
2. PyTorch3D源码编译实战
PyTorch3D官方推荐从源码编译安装,这也是最容易出问题的环节。首先从GitHub下载0.4.0版本:
wget https://github.com/facebookresearch/pytorch3d/archive/refs/tags/v0.4.0.tar.gz tar -xzvf v0.4.0.tar.gz cd pytorch3d-0.4.0安装前需要确认几个前置依赖:
- fvcore:Facebook的通用工具库
- iopath:处理IO路径的工具
建议用源码安装这两个依赖:
git clone https://github.com/facebookresearch/iopath pip install -e iopath git clone https://github.com/facebookresearch/fvcore pip install -e fvcore这里有个坑:如果用pip直接安装,可能会装到不兼容的版本。我实测发现源码安装最稳妥。
3. CUB库的版本陷阱
第一次编译时,我直接运行:
python setup.py install结果报出一堆CUB相关的编译错误。查文档才发现,PyTorch3D对CUB版本有严格要求:
- CUDA 10.1需要CUB 1.9.8
- 不能用conda安装的nvidia-cub(那是给CUDA 11.7+用的)
正确做法是手动下载CUB 1.9.8:
wget https://github.com/NVIDIA/cub/archive/refs/tags/1.9.8.tar.gz tar -xzvf 1.9.8.tar.gz然后设置环境变量:
export CUB_HOME=/path/to/cub-1.9.8建议把这行加到~/.bashrc里,不然每次开新终端都要重新设置。
4. GCC降级与系统配置
现代Linux系统默认的GCC版本太高(比如Ubuntu 20.04是GCC 9),会导致编译失败。需要降级到GCC 7:
sudo apt-get install gcc-7 g++-7如果你遇到"Package not available"错误,说明apt源里没有这个版本。需要添加Ubuntu的老版本仓库:
sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu focal main universe" sudo apt update安装完成后切换默认编译器:
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 70 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 70验证版本:
gcc --version # 应该显示7.x g++ --version # 应该显示7.x5. 解决进程锁冲突
在apt安装过程中,可能会遇到这样的错误:
Waiting for cache lock: Could not get lock /var/lib/dpkg/lock-frontend这是因为之前的安装进程被异常终止,锁文件没释放。解决方法很简单:
sudo lsof /var/lib/dpkg/lock-frontend # 查看占用进程的PID sudo kill -9 <PID> # 强制结束进程6. 最终编译与验证
所有准备工作完成后,终于可以编译PyTorch3D了:
cd pytorch3d-0.4.0 python setup.py install这个过程大概需要10-30分钟,取决于你的机器性能。如果一切顺利,最后会看到"Successfully installed pytorch3d-0.4.0"的提示。
验证安装是否成功:
import torch from pytorch3d.renderer import MeshRenderer print(torch.__version__) # 应该输出1.7.1 print(MeshRenderer) # 应该显示类信息7. 常见问题排查
如果编译还是失败,可以尝试以下方法:
- 确保conda环境是干净的,最好新建一个
- 检查CUDA_HOME环境变量是否正确指向CUDA 10.1
- 尝试先卸载所有包再重新安装
- 查看完整的错误日志,通常最后几行有关键提示
我在三台不同配置的机器上测试过这个方法,成功率100%。最关键的几点:
- CUB版本必须匹配CUDA
- GCC版本不能太高
- 所有依赖要用源码安装指定版本