如果报错 no module named xxx 一般是没安装这个库,但是各种邪修安装了kaolin之后,还是报错,这个报错的核心信息是:
ImportError: .../kaolin/_C.so: undefined symbol: _ZN3c104cuda20CUDACachingAllocator9allocatorE
意思是 Kaolin 的 C++/CUDA 扩展和你当前的 PyTorch/CUDA 版本不匹配。
具体解释:
_ZN3c104cuda20CUDACachingAllocator9allocatorE
这个符号在新的 PyTorch 中已经改了名字或被移除了。- 你安装的
kaolin
是带预编译扩展的,但它是针对特定 PyTorch/CUDA 版本编译的,如果你本地的环境版本不一致,就会出现这种 undefined symbol 错误。
解决方法有几种:
1. 确认 PyTorch 与 CUDA 版本
先检查你现在的 PyTorch 和 CUDA 版本:
python -c "import torch; print(torch.__version__, torch.version.cuda)"
然后对比 kaolin
支持的版本。Kaolin 官方一般会对应 PyTorch 特定 release(例如 torch==1.13.0
+ CUDA 11.7
)。
2. 使用匹配的 Kaolin wheel
如果你是 pip install kaolin
安装的,可以去 NVIDIA/kaolin GitHub release 或者 PyPI 看一下支持的版本。
例如:
pip install kaolin==0.15.0
然后选一个与你的 PyTorch 对应的版本。
3. 从源码重新编译 Kaolin(建议使用这个方法,出错的概率小)
如果找不到合适的预编译版本,可以直接源码安装,Kaolin 会针对你当前的 PyTorch/CUDA 编译 _C.so
:
git clone https://github.com/NVIDIAGameWorks/kaolin.git
cd kaolin
pip install -e .
这一步需要你的系统里有 CUDA toolkit(和 PyTorch 一致的版本)。