常见问题

1. 由于不正确的 CUDA_HOME 导致编译失败

在某些情况下,如果您的默认 CUDA 目录链接到旧的 CUDA 版本(MinkowskiEngine 需要 CUDA >= 10.0),您可能会遇到一些编译问题,这些问题会在编译期间产生段错误错误

NVCC ...
Segmentation fault

要确认,您应该检查您的路径。

$ echo $CUDA_HOME
/usr/local/cuda

$ ls -al $CUDA_HOME
..... /usr/local/cuda -> /usr/local/cuda-10.2

$ ls /usr/local/
bin cuda cuda-10.2 cuda-11.0 ...

在这种情况下,请确保将环境变量 CUDA_HOME 设置为正确的路径并安装 MinkowskiEngine。

export CUDA_HOME=/usr/local/cuda-10.2; python setup.py install

2. 由于不正确的 CUDA_HOME 导致编译失败

某些应用程序会修改您 .bashrc 上的环境变量 CUDA_HOME,请参阅 #12。这会导致 pytorch CPPExtension 模块失败,从而导致诸如 src/common.hpp:40:10: fatal error: cublas_v2.h: No such file or directory 之类的问题。

如果遇到此问题,请尝试显式设置您的 CUDA_HOME

export CUDA_HOME=/usr/local/cuda; python setup.py install

或者您可以使用 nvcc 的路径来自动设置 cuda home。

export CUDA_HOME=$(dirname $(dirname $(which nvcc))); python setup.py install

由于内存不足 (OOM) 导致编译失败

setup.py 调用 CPU 数量以进行多线程并行编译。但是,在集群上安装 MinkowskiEngine 时,有时编译可能会由于过度使用内存而失败。请为作业提供足够的内存以进行快速编译。 当您的内存有限时,另一个选择是在没有并行编译的情况下进行编译。

cd /path/to/MinkowskiEngine
make  # single threaded compilation
python setup.py install

升级后出现编译问题

在极少数情况下,升级 MinkowskiEngine、pytorch 或 CUDA 后,您可能会遇到编译问题。 通常,当您收到未定义的符号错误(例如,_ZNK13CoordsManagerILh5EiE8toStringB5cxx11Ev)或 thrust::system::system_error 时,请尝试使用以下方法之一再次编译整个库。

强制编译所有目标文件

cd /path/to/MinkowskiEngine
make clean
python setup.py install --force

从新的 conda 虚拟环境

如果上述方法不起作用,请尝试创建一个新的 conda 环境。 我们发现它有时可以解决编译问题。

conda create -n py3-mink-2 python=3.7 anaconda
conda activate py3-mink-2
conda install openblas numpy
conda install pytorch torchvision -c pytorch

然后,

cd /path/to/MinkowskiEngine
conda activate py3-mink-2
make clean
python setup.py install --force

CUDA 版本不匹配:undefined symbolinvalid device function

在某些情况下,当 conda pytorch 使用不同的 CUDA 版本时,您可能会收到未定义的符号错误或 CUDA error: invalid device function。 尝试使用您用于编译 MinkowskiEngine 的正确 CUDA 版本重新安装 pytorch。

要找出您的 CUDA 版本,请运行 nvcc --version

要为 anaconda pytorch 安装正确的 CUDA 库,请安装 cudatoolkit=x.x 以及 pytorch。 例如,

conda install pytorch torchvision cudatoolkit=10.1 -c pytorch

在此示例中,我们假设您使用的是 CUDA 10.1,但请确保您安装的是正确的版本。 然后,使用以下代码段创建一个新的 conda 环境,并安装 MinkowskiEngine。

conda create -n py3-mink-2 python=3.7 anaconda
conda activate py3-mink-2
conda install openblas numpy
conda install pytorch torchvision cudatoolkit=10.1 -c pytorch  # Make sure to use the correct cudatoolkit version

cd /path/to/MinkowskiEngine
conda activate py3-mink-2
make clean
python setup.py install --force

训练期间 GPU 内存不足

与输入批次始终需要相同字节的密集张量神经网络不同,稀疏张量对于不同的批次具有不同数量的非零元素或长度,如果当前批次大于已分配的内存,则会导致新的内存分配。 这种重复的内存分配将导致内存不足错误,因此必须定期清除 GPU 缓存。

def training(...):
    ...
    sinput = ME.SparseTensor(...)
    loss = criterion(...)
    loss.backward()
    optimizer.step()

    ...

    torch.cuda.empty_cache()

未列出的问题

如果您在安装 MinkowskiEngine 时遇到问题,请随时在 MinkowskiEngine github 页面上提交问题。