我在环境中安装了以下内容:
cudatoolkit=11.3
pytorch=1.11.0
torchvision=0.12.0
但是当询问 torch/cuda 版本时,我得到了这个:
$ python3 -c "import torch; print(torch.__version__)"
1.12.1+cu102
这不是我想要的(1.12.1 就可以了,但是 cu102 太旧了)。进一步看,我看到这个:
$ conda list torch
# packages in environment at /home/ml/anaconda3/envs/ldm:
#
# Name Version Build Channel
pytorch 1.11.0 py3.8_cuda11.3_cudnn8.2.0_0 pytorch
pytorch-lightning 1.4.2 pypi_0 pypi
pytorch-mutex 1.0 cuda pytorch
torch 1.12.1 pypi_0 pypi
torch-fidelity 0.3.0 pypi_0 pypi
torchdiffeq 0.2.3 pypi_0 pypi
torchmetrics 0.6.0 pypi_0 pypi
torchvision 0.12.0 py38_cu113 pytorchcode
所以“pytorch”有我想要的版本(带有cuda11.3),但“torch”是1.12.1。为什么?此外,“torch”似乎不是一个 conda 包(尝试安装时出现 PackagesNotFoundError ),这令人惊讶,因为它出现在“conda list”中。
显然有一些我不明白的关于 conda / pytorch 的事情。有人可以解释一下吗?
遇到的问题是的环境中有两个“torch”:
-
pytorch
conda 包提供的 torch :这是使用conda install pytorch
安装的版本,它与 CUDA 11.3 正确链接并显示为1.11.0
。 -
torch
PyPI 包 :这似乎是无意中使用pip install torch
或类似方式安装的,它显示为1.12.1+cu102
并覆盖了 conda 版本。
解释:
-
当运行
python -c "import torch; print(torch.__version__)"
时,Python 首先搜索并加载在sys.path
中找到的第一个torch
模块。由于可能在 conda 环境激活后使用pip install torch
安装了 PyPI 版本,因此其路径优先于 conda 版本。 -
conda list torch
显示了两个包,因为它识别到的环境中同时存在pytorch
和torch
。 -
尝试使用 conda 安装
torch
时出现PackagesNotFoundError
是正常的,因为torch
本身不是 conda 包。pytorch
conda 包提供了torch
模块。
解决方案:
-
卸载 PyPI
torch
包: 运行pip uninstall torch
以删除通过 pip 安装的版本。 -
检查的脚本和依赖项:
确保没有任何脚本或其他包直接依赖于
torch
PyPI 包。如果有,需要将其修改为使用pytorch
conda 包。 -
(可选)创建新的 conda 环境:
为了避免将来出现此类问题,建议为的项目创建一个新的 conda 环境,并仅使用
conda install
安装所有必要的包,包括pytorch
和torchvision
。
完成这些步骤后,的
torch
版本应该与
pytorch
包的版本一致,并且应该正确链接到 CUDA 11.3。