如果報錯 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 一致的版本)。