Python3.8.5+PyTorch1.9环境安装兼容NVIDIA Apex的报错解决求助
解决方案
问题根源说明
你遇到的两次报错分别对应两个问题:
- 最初的
ImportError: cannot import name 'UnencryptedCookieSessionFactoryConfig'是因为你误装了和NVIDIA apex同名的第三方Python包(属于web开发框架相关依赖),和深度学习用的NVIDIA apex完全无关,这一步你已经卸载完成,无需额外处理。 - 后续安装NVIDIA apex失败是因为版本不匹配:你本地系统的CUDA编译工具链版本为10.0,而已安装的PyTorch 1.9.0是基于CUDA 11.1编译的,两者版本不一致触发了apex的编译检查报错。
可执行解决方案(按优先级排序)
方案1:安装纯Python版本apex(优先选择,操作最简单)
proxynca_pp代码要求的apex核心功能(amp混合精度训练)无需编译CUDA/C++扩展即可使用,直接通过你已经clone的NVIDIA apex仓库安装纯Python版本即可,操作命令如下:
cd apex pip install -v --disable-pip-version-check --no-cache-dir ./
该方式会跳过CUDA版本检查,安装速度快,90%以上的训练场景都可以正常支持,测试通过即可直接运行训练代码。
方案2:对齐版本后编译完整功能apex
如果你需要用到apex的fused算子、分布式同步等依赖CUDA扩展的高级功能,需要先对齐CUDA版本,二选一即可:
- 卸载现有PyTorch,安装适配本地CUDA 10.0的PyTorch版本(PyTorch 1.4及更早版本均支持CUDA 10.0),之后再执行带
--cpp_ext和--cuda_ext参数的apex编译安装命令 - 将本地系统的CUDA工具链版本切换到11.1,和现有PyTorch的编译CUDA版本对齐,之后再执行带扩展参数的安装命令
方案3:强制跳过版本检查(仅临时测试用,不推荐)
如果仅做临时测试不想调整环境版本,可以手动修改apex目录下的setup.py文件,找到check_cuda_torch_binary_vs_bare_metal函数,注释掉抛出版本不匹配错误的代码行,之后再执行带扩展参数的编译命令即可。该方法可能存在运行时精度异常、崩溃等潜在问题,风险自行承担。
附加说明
你日志中的MatplotlibDeprecationWarning不影响代码运行,如需消除警告,将train.py第12行的matplotlib.use('agg', warn=False, force=True)
修改为matplotlib.use('agg', force=True)
即可。
内容的提问来源于stack exchange,提问作者Mona Jalal
相关产品推荐
相关产品推荐

