4 minute read

太长不看版:康康你conda虚拟环境里有没有个叫cpuonly的包,有的话卸了它

本机环境:

  • OS:Ubuntu 22.04.1 LTS (Windows Subsystem for Linux 2)
  • GPU:NVIDIA GeForce RTX 2060 Max-Q
  • GPU Driver:GeForce Game Ready Driver 516.94
  • CUDA Version: 11.7
  • conda: 4.14.0 (miniconda3)

事情是这样的。

搞个ML的科研项目,需要用到PyTorch。

因为实在不想在Win本机上整这种活(感觉conda这玩意容易和pip出优先级问题,日后恶心自己)。

所以就配置了个WSL2可用的CUDA (可惜据说性能损耗相较正常Linux系统低了12%):

wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin
sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/11.7.1/local_installers/cuda-repo-wsl-ubuntu-11-7-local_11.7.1-1_amd64.deb
sudo dpkg -i cuda-repo-wsl-ubuntu-11-7-local_11.7.1-1_amd64.deb
sudo cp /var/cuda-repo-wsl-ubuntu-11-7-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda

害得配置下环境变量:

vi ~/.bashrc

在.bashrc最后加上:

export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

测试:

$ source ~/.bashrc
$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2022 NVIDIA Corporation
Built on Wed_Jun__8_16:49:14_PDT_2022
Cuda compilation tools, release 11.7, V11.7.99
Build cuda_11.7.r11.7/compiler.31442593_0

奈斯。

直接全局pip装了torch试了一下:

$ pip install torch
$ python -c "import torch; print(torch.__version__); print(torch.cuda.is_available())"
1.12.1+cu102
True

完美。

但我这也不能直接用啊,虽说是个子系统吧。。最后还是安了个miniconda,然后conda开了个虚拟环境尝试安装PyTorch套件。

conda config --add channels conda-forge #这个被PyTorch依赖的channel必须要先加上
conda config --set channel_priority strict #而且要设置成strict模式,否则会优先从默认channel里找,找不到才会去conda-forge里找
conda create -n PyTorch python=3.9 #创建虚拟环境
conda activate PyTorch #激活虚拟环境
conda install pytorch torchvision torchaudio cudatoolkit=11.7 -c pytorch -c conda-forge #安装PyTorch

一路顺风顺水,直到我测试了一下:

$ python -c "import torch; print(torch.__version__); print(torch.cuda.is_available())"
1.10.2
False

直接给我整不会了。 在这之后就是相当nt的网络检索和无意义debug,又重启了几次,False照常。

直到万念俱灰的我conda list了一下,发现了一个可疑的玩意,叫cpuonly,版本是2.0,而且是pytorch这个channel里的。

cpu only?属实好活,我这块2060压根用不上呗。

又看了一眼pytorch版本,瞳孔地震,居然是1.10.2的cpu版本。

上网,关键词检索:conda 虚拟环境 torch cpuonly 果然有人遇到过这个问题,说是这个叫cpuonly的包会强制把pytorchcuda支持关掉,而且是在pytorch安装的时候就会被默认安装上去。

无一例外地,解决方案都是直接conda uninstall cpuonly把这玩意卸掉。

我试了一下,居然还真成了,它甚至还自动把我的pytorch包和相关包都更到CUDA版了。

又测试了一遍:

$ python -c "import torch; print(torch.__version__); print(torch.cuda.is_available())"
1.12.1+cu116
True

问题解决,泪目。

2022-09-12更:有佬称这方法是瞎猫碰死耗子,咱也不太确定,但能用就不动它了。 链接(是天杀的CSDN)→佬发现的

Comments