为什么我安装cuda的时候Anaconda安装的是pytorch cpuonly?

Why does Anaconda install pytorch cpuonly when I install cuda?

我已经创建了一个 Python 3.7 conda 虚拟环境并使用此命令安装了以下软件包:

conda install pytorch torchvision torchaudio cudatoolkit=11.3 matplotlib scipy opencv -c pytorch

它们安装得很好,但是当我进入 运行 我的程序时,我收到以下错误,表明未找到支持 CUDA 的设备:

    raise RuntimeError('Attempting to deserialize object on a CUDA '
RuntimeError: Attempting to deserialize object on a CUDA device but torch.cuda.is_available() is False. If you are running on a CPU-only machine, please use torch.load with map_location=torch.device('cpu') to map your storages to the CPU.

我有一个 NVIDIA RTX 3060ti GPU,据我所知它启用了 cuda,但是每当我在我的 conda 环境中进入 Python 交互式 shell 我得到 False 评估时 torch.cuda.is_available() 提示可能 CUDA 未正确安装或未找到。

当我执行 conda list 查看我安装的包时:

# packages in environment at /home/user/anaconda3/envs/FGVC:
#
# Name                    Version                   Build  Channel
_libgcc_mutex             0.1                        main  
_openmp_mutex             4.5                       1_gnu  
blas                      1.0                         mkl  
brotli                    1.0.9                he6710b0_2  
bzip2                     1.0.8                h7b6447c_0  
ca-certificates           2021.10.26           h06a4308_2  
cairo                     1.16.0               hf32fb01_1  
certifi                   2021.10.8        py37h06a4308_2  
cpuonly                   1.0                           0    pytorch
cudatoolkit               11.3.1               h2bc3f7f_2  
cycler                    0.11.0             pyhd3eb1b0_0  
dbus                      1.13.18              hb2f20db_0  
expat                     2.4.4                h295c915_0  
ffmpeg                    4.0                  hcdf2ecd_0  
fontconfig                2.13.1               h6c09931_0  
fonttools                 4.25.0             pyhd3eb1b0_0  
freeglut                  3.0.0                hf484d3e_5  
freetype                  2.11.0               h70c0345_0  
giflib                    5.2.1                h7b6447c_0  
glib                      2.69.1               h4ff587b_1  
graphite2                 1.3.14               h23475e2_0  
gst-plugins-base          1.14.0               h8213a91_2  
gstreamer                 1.14.0               h28cd5cc_2  
harfbuzz                  1.8.8                hffaf4a1_0  
hdf5                      1.10.2               hba1933b_1  
icu                       58.2                 he6710b0_3  
imageio                   2.16.0                   pypi_0    pypi
imageio-ffmpeg            0.4.5                    pypi_0    pypi
imutils                   0.5.4                    pypi_0    pypi
intel-openmp              2021.4.0          h06a4308_3561  
jasper                    2.0.14               hd8c5072_2  
jpeg                      9d                   h7f8727e_0  
kiwisolver                1.3.2            py37h295c915_0  
lcms2                     2.12                 h3be6417_0  
ld_impl_linux-64          2.35.1               h7274673_9  
libffi                    3.3                  he6710b0_2  
libgcc-ng                 9.3.0               h5101ec6_17  
libgfortran-ng            7.5.0               ha8ba4b0_17  
libgfortran4              7.5.0               ha8ba4b0_17  
libglu                    9.0.0                hf484d3e_1  
libgomp                   9.3.0               h5101ec6_17  
libopencv                 3.4.2                hb342d67_1  
libopus                   1.3.1                h7b6447c_0  
libpng                    1.6.37               hbc83047_0  
libstdcxx-ng              9.3.0               hd4cf53a_17  
libtiff                   4.2.0                h85742a9_0  
libuuid                   1.0.3                h7f8727e_2  
libuv                     1.40.0               h7b6447c_0  
libvpx                    1.7.0                h439df22_0  
libwebp                   1.2.0                h89dd481_0  
libwebp-base              1.2.0                h27cfd23_0  
libxcb                    1.14                 h7b6447c_0  
libxml2                   2.9.12               h03d6c58_0  
lz4-c                     1.9.3                h295c915_1  
matplotlib                3.5.0            py37h06a4308_0  
matplotlib-base           3.5.0            py37h3ed280b_0  
mkl                       2021.4.0           h06a4308_640  
mkl-service               2.4.0            py37h7f8727e_0  
mkl_fft                   1.3.1            py37hd3c417c_0  
mkl_random                1.2.2            py37h51133e4_0  
munkres                   1.1.4                      py_0  
ncurses                   6.3                  h7f8727e_2  
networkx                  2.6.3                    pypi_0    pypi
ninja                     1.10.2           py37hd09550d_3  
numpy                     1.21.2           py37h20f2e39_0  
numpy-base                1.21.2           py37h79a1101_0  
olefile                   0.46                     py37_0  
opencv                    3.4.2            py37h6fd60c2_1  
openssl                   1.1.1m               h7f8727e_0  
packaging                 21.3               pyhd3eb1b0_0  
pcre                      8.45                 h295c915_0  
pillow                    8.4.0            py37h5aabda8_0  
pip                       21.2.2           py37h06a4308_0  
pixman                    0.40.0               h7f8727e_1  
py-opencv                 3.4.2            py37hb342d67_1  
pyparsing                 3.0.4              pyhd3eb1b0_0  
pyqt                      5.9.2            py37h05f1152_2  
python                    3.7.11               h12debd9_0  
python-dateutil           2.8.2              pyhd3eb1b0_0  
pytorch                   1.7.0               py3.7_cpu_0  [cpuonly]  pytorch
pywavelets                1.2.0                    pypi_0    pypi
qt                        5.9.7                h5867ecd_1  
readline                  8.1.2                h7f8727e_1  
scikit-image              0.19.1                   pypi_0    pypi
scipy                     1.7.3            py37hc147768_0  
setuptools                58.0.4           py37h06a4308_0  
sip                       4.19.8           py37hf484d3e_0  
six                       1.16.0             pyhd3eb1b0_1  
sqlite                    3.37.2               hc218d9a_0  
tifffile                  2021.11.2                pypi_0    pypi
tk                        8.6.11               h1ccaba5_0  
torchaudio                0.7.0                      py37    pytorch
torchvision               0.8.1                  py37_cpu  [cpuonly]  pytorch
tornado                   6.1              py37h27cfd23_0  
typing_extensions         3.10.0.2           pyh06a4308_0  
wheel                     0.37.1             pyhd3eb1b0_0  
xz                        5.2.5                h7b6447c_0  
zlib                      1.2.11               h7f8727e_4  
zstd                      1.4.9                haebb681_0  

好像说的很多cpuonly,但是我不知道是怎么来的,因为我没有安装。

我是运行宁Ubuntu版本20.04.4 LTS

我认为我有以下错误导致我无法使用 Cuda。尽管安装了 cuda,但 nvcc --version 命令指示未安装 Cuda,所以我所做的是使用 this answer.

将其添加到路径中

尽管这样做并删除了我原来的 conda 环境并再次使用 conda install pytorch torchvision torchaudio cudatoolkit=11.3 matplotlib scipy opencv -c pytorch 命令,但在评估 torch.cuda.is_available().

时我仍然得到 False

然后我使用这个命令 conda install pytorch torchvision torchaudio cudatoolkit=10.2 matplotlib scipy opencv -c pytorch 将 cudatoolkit 从版本 11.3 更改为版本 10.2 然后它成功了!

现在 torch.cuda.is_available() 的计算结果为 True

不幸的是,Cuda 版本 10.2 与我的 RTX 3060 gpu 不兼容(我假设它不兼容所有 RTX 3000 卡)。 Cuda 11.0 版给我错误,而 Cuda 11.3 版出于某种原因只安装 CPU 版本。不过 Cuda 11.1 版工作得很好!

这是我最后用来让它工作的命令: 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

当我尝试使用 CUDA 11.1 安装 Pytorch 时,我 运行 遇到了类似的问题。尽管 the anaconda 站点明确列出了带有 CUDA 11.1 的 Pytorch pre-built 版本可用,但 conda 仍会尝试安装 cpu-only 版本。经过大量 trial-and-fail,我意识到软件包 torchvision torchaudio 是问题的根本原因。所以只安装 PyTorch 就可以解决这个问题:

conda install pytorch cudatoolkit=11.1 -c pytorch -c nvidia