最近在跑Voxel2Mesh: 3D Mesh Model Generation from Volumetric Data (https://github.com/cvlab-epfl/voxel2mesh)的代码时,由于环境问题,出现了很多问题,总结如下:
程序在运行过程中,要import rasterize_cuda,这个包是用c++和CUDA写的,在导入该包之前,rasterize.py文件的开头用了如下代码来编译这个包:
from torch.utils.cpp_extension import load
rasterize_cuda = load('rasterize_cuda',
['./utils/rasterize/rasterize_cuda.cpp', './utils/rasterize/rasterize_cuda_kernel.cu'],
verbose=True)
总共在四台硬件相同的服务器上试过,其中有一台可以正常编译,另外三台编译时报如下错误:
对比不同服务器后发现,有的服务器没装cmake,还有些服务器的cmake版本过低,安装cmake 3.20.2后,有一台服务器没有报错,但是还有两台报如下错:
/usr/include/c++/7/bits/basic_string.tcc:1067:16: error: cannot call member function ‘void std::basic_string<_CharT, _Traits, _Alloc>::_Rep::_M_set_sharable() [with _CharT = char32_t; _Traits = std::char_traits<char32_t>; _Alloc = std::allocator<char32_t>]’ without object
原因是这两台服务器的CUDA版本为10.1.105,把CUDA版本升级到CUDA10.1.243即可,注意,用conda命令安装的CUDA对编译rasterize_cuda包无效,得在系统上装的CUDA才行。
总体环境配置如下:
- torch 1.7.0
- torchvision 0.8.0
- python 3.6
- pytorch3d 0.4.0
- cmake 3.20.2
- gcc 7.5.0
- Ubuntu 18.04
- CUDA 10.1.243
参考:https://github.com/pytorch/vision/issues/1893