Docker容器中安装torch-scatter==2.0.9失败,求解决方案
解决torch-scatter==2.0.9在PyTorch1.8.0下的编译错误
错误原因
你遇到的div_(count, "floor")参数不匹配问题,根源是PyTorch版本兼容性:torch-scatter 2.0.9中使用的div_双参数调用(指定舍入模式)是PyTorch 1.9.0才新增的特性,而你当前镜像里的PyTorch 1.8.0只支持单参数的div_方法,导致编译失败。
可行解决方案
1. 安装与PyTorch1.8.0兼容的torch-scatter版本
torch-scatter的版本需要和PyTorch严格对应,2.0.9并不适配PyTorch1.8.0。直接安装适配PyTorch1.8.0+cu111的wheel包即可:
pip install torch-scatter -f https://data.pyg.org/whl/torch-1.8.0+cu111.html
这条命令会自动拉取与当前PyTorch版本匹配的torch-scatter稳定版本,无需手动指定2.0.9。如果必须指定版本,可尝试torch-scatter==2.0.8(经测试适配PyTorch1.8.0):
pip install torch-scatter==2.0.8 -f https://data.pyg.org/whl/torch-1.8.0+cu111.html
2. 修改torch-scatter源码后本地编译(保留2.0.9版本)
如果一定要使用torch-scatter==2.0.9,可修改源码中不兼容的代码后手动编译:
- 克隆源码并切换到2.0.9版本:
git clone https://github.com/rusty1s/pytorch_scatter.git cd pytorch_scatter git checkout 2.0.9
- 找到所有包含
out.div_(count, "floor")的文件(通常在src/cpu/scatter.cpp和src/cuda/scatter.cpp中),将该行替换为PyTorch1.8.0支持的写法:
// 替换为floor_divide_(直接实现向下取整除法) torch::floor_divide_(out, count);
或者:
// 先做除法再手动取整 out.div_(count).floor_();
- 编译并安装:
python setup.py install
3. 升级PyTorch到1.9.0+(适配CUDA11.1)
升级PyTorch到支持div_双参数调用的版本,再安装torch-scatter==2.0.9:
pip install torch==1.9.0+cu111 torchvision==0.10.0+cu111 torchaudio==0.9.0 -f https://download.pytorch.org/whl/torch_stable.html pip install torch-scatter==2.0.9 -f https://data.pyg.org/whl/torch-1.9.0+cu111.html
注意:升级PyTorch后需确认其他依赖库是否兼容。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

