背景

在深度学习的工作中有时候会用到C++写的Cuda函数来提高运行效率,例如这个Point-Bert,需要自行编译Chamfer Distance和Earth Mover's Distance (EMD)模块。但是在Conda环境里,跟着PyTorch一起安装的pytorch-cuda或cudatoolkit只有基本的Runtime,并不能用来编译Cuda代码。如果系统环境内安装了跟Conda环境里一样的Cuda版本,那可能能顺利编译。但通常我们用Conda环境就是为了能在安装不同PyTorch版本的时候不用折腾系统的Cuda,所以基本都会在编译时遇到系统Cuda和PyTorch Cuda版本不一样的错误。前段时间NVIDIA推出了官方的Conda环境Cuda安装包,这里参考这个官方教程来配置我们的Conda环境。

具体操作

这里直接记录下个人对Point-BERT的环境配置步骤,其他工作应该也大同小异。

  1. 确定安装哪个版本的PyTorch,去官网查看需要哪个Cuda版本,安装Cuda。
  2. 安装所有Conda能装的包,除了PyTorch。
  3. pip安装PyTorch,注意选择正确的Cuda版本。
  4. pip安装其他conda没有的包。注意opencv的pip版本可能会有些Qt的不兼容问题,可能装Conda版本更好。
  5. 设置C++编译器的Linker路径到Conda环境。
  6. 编译Cuda代码并安装到Conda环境。
  7. 每次开新的命令行运行代码前都要设置C++的Linker路径。
mamba create -n pointbert python=3.7  # mamba的速度比conda快多了
conda activate pointbert
mamba install cuda -c nvidia/label/cuda-11.7.1  # 改为需要的cuda版本
mamba install easydict h5py matplotlib numpy opencv pyyaml scipy tensorboardX tqdm transforms3d termcolor scikit-learn ninja gcc=11.4 gxx_linux-64 libgcc notebook flake8 ipywidgets urllib3 requests charset-normalizer  # gcc的版本需要根据之后编译时的报错来更改 
pip install torch==1.13.1+cu117 torchvision==0.14.1+cu117 torchaudio==0.13.1 --extra-index-url https://download.pytorch.org/whl/cu117  # 用pip来装PyTorch,不用装PyTorch提供的cuda包
pip install open3d==0.9 timm==0.4.5 argparse  # 安装其他pip包
export LD_LIBRARY_PATH=/path/to/conda/envs/pointbert/lib  # 手动设置C++ Linker路径,之后运行Python代码前也要设置一下
cd extensions/chamfer_dist
python setup.py install  # 会装到/path/to/conda/envs/pointbert/lib/python3.7/site-packages
cd ../emd
python setup.py install
cd ../..
pip install "git+https://github.com/erikwijmans/Pointnet2_PyTorch.git#egg=pointnet2_ops&subdirectory=pointnet2_ops_lib"
pip install --upgrade "https://github.com/unlimblue/KNN_CUDA/releases/download/0.2/KNN_CUDA-0.2-py3-none-any.whl"
Last modification:February 5, 2025
点赞喵,点个赞谢谢喵