Mac系统编译SparseConvNet出现-fopenmp不支持及类型转换错误求助
Mac环境编译SparseConvNet报错解决方案
前置操作修正(针对clang不支持-fopenmp报错)
你之前对setup.py的修改存在错误,先做如下调整:
- 回退setup.py中extra_compile_args的cxx参数配置,恢复为原始值:
['-std=c++14', '-fopenmp','-O3'],不可在编译参数中直接填写编译器路径 - 确认gcc、g环境变量已生效:执行
source ~/.bash_profile(如果使用zsh终端,需将export CC、export CXX配置写入~/.zshrc后执行source ~/.zshrc),执行echo $CC、echo $CXX确认输出为对应的gcc、g安装路径
std::array与c10::IntArrayRef类型转换报错解决方案
该报错由PyTorch版本和SparseConvNet源码不兼容导致,可二选一执行以下方案:
方案1:降级PyTorch到官方兼容版本
SparseConvNet官方适配的PyTorch最高版本为1.8.x,直接降级即可解决类型匹配问题:
- Anaconda环境执行命令:
conda install pytorch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0 -c pytorch - Poetry环境执行命令:
poetry add torch@1.8.0 torchvision@0.9.0
方案2:修改源码适配高版本PyTorch
如果需要使用高版本PyTorch,找到报错对应的源码文件(通常为sparseconvnet/SparseConvNet.cu或同目录下的cpp文件),将所有传入std::array<long int, N>作为参数的调用位,手动转换为IntArrayRef类型:
示例修改:原代码func_name(arr)改为func_name(c10::IntArrayRef(arr.data(), arr.size()))
编译前注意事项
- 清理历史编译缓存:执行
python setup.py clean,删除项目下的build、dist目录和所有.so后缀的临时编译文件 - M系列芯片Mac需确认gcc为arm64架构版本,执行
gcc-11 -v查看架构信息,若为x86_64版本需执行arch -arm64 brew install gcc重新安装适配架构的gcc
内容的提问来源于stack exchange,提问作者Sahar Husseini
相关产品推荐
相关产品推荐

