常见问题¶
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 symbol
和 invalid 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 页面上提交问题。