How to install cuda and pytorch dev environment on thinkpad w530 & ubuntu 20.04

最近发现在笔记本上用 cpu 来训练模型效率还是太慢了,正好我笔记本上有一块 nvidia gpu,准备折腾一下把这块 gpu 用起来

由于在笔记本环境下安装 gpu 开发环境比较痛苦,虽然最终失败了,但是过程比较有意义,值得备忘一下

我的开发环境主要是 pytorch + cuda

硬件环境就是 thinkpad w530 + 32g + K1000M

由于笔记本的 gpu 通常型号比较老,并不是大部分的 pytorch 都支持

1. 安装 cuda

网上有很多资料,怎么安装 nvidia-cuda-toolkit 的,apt install nvidia-cuda-toolkit 就可以直接装

但是我发现装完了之后没法用,pytorch 没法检测到 cuda 环境。这两个东西不完全是一个东西,有挺多差异的。

python3 -c ‘import torch; print(torch.cuda.is_available())’ 必须返回 true

最后用官方的安装方法成功了

https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&Distribution=Ubuntu&target_version=20.04&target_type=deb_local

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin
sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600

wget https://developer.download.nvidia.com/compute/cuda/11.7.0/local_installers/cuda-repo-ubuntu2004-11-7-local_11.7.0-515.43.04-1_amd64.deb

sudo dpkg -i cuda-repo-ubuntu2004-11-7-local_11.7.0-515.43.04-1_amd64.deb
sudo cp /var/cuda-repo-ubuntu2004-11-7-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda

2. 安装 nvidia-driver

ubuntu 默认源里面会有一些基本的 nvidia-driver

ubuntu-drivers devices 可以看到

# ubuntu-drivers devices
== /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0 ==
modalias : pci:v000010DEd00000FFCsv000017AAsd000021F5bc03sc00i00
vendor : NVIDIA Corporation
model : GK107GLM [Quadro K1000M]
manual_install: True
driver : nvidia-driver-390 - distro non-free
driver : nvidia-340 - distro non-free recommended
driver : nvidia-driver-418-server - distro non-free
driver : xserver-xorg-video-nouveau - distro free builtin

这里面会推荐你使用 nvidia-340

但是我的实际测试来看,nvidia-340是没法用的,安装完了之后显示器各种异常,最后安装到 nvidia-driver-390 解决了显示器异常的问题

但是nvidia-driver-390 版本太低,cuda 现在依赖的 nvidia-driver 版本都是470以上了,所以光有 nvidia-driver 是不行的,必须和 cuda 配套。

最终在安装 cuda 的时候会自动安装 nvidia-driver 配套驱动,其实不用自己搞

安装完,需要重启机器,重启后 nvidia-smi 检查能不能看到显卡信息

Tue Jun 14 00:32:08 2022       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 470.57.02    Driver Version: 470.57.02    CUDA Version: 11.4     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  Quadro K1000M       On   | 00000000:01:00.0  On |                  N/A |
| N/A   62C    P0    N/A /  N/A |    547MiB /  2000MiB |     76%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0   N/A  N/A      1362      G   /usr/lib/xorg/Xorg                471MiB |
|    0   N/A  N/A      1852      G   xfwm4                               0MiB |
|    0   N/A  N/A      2976      G   /usr/lib/firefox/firefox            0MiB |
|    0   N/A  N/A      3002      G   fcitx-qimpanel                     26MiB |
|    0   N/A  N/A     10987      G   ...928668263600645675,131072       22MiB |
+-----------------------------------------------------------------------------+

上面信息说明安装成功了

3. 安装 pytorch

pytorch 首页就有安装教程

https://pytorch.org/

按照自己的实际环境,设定安装环境,最后得到安装命令

pip3 install torch torchvision torchaudio –extra-index-url https://download.pytorch.org/whl/cu113

另外,pytorch 最大的问题是并不支持所有的 gpu 列表,从我使用的 ubuntu 20.04 来看,最新版的 pytorch 最低要求 sm3.7 以上

python3 -c ‘import torch; torch.zeros(1).cuda()’

命令可以测试 cuda 运行情况

Found GPU0 Quadro K1000M which is of cuda capability 3.0. PyTorch no longer supports this GPU be…

~/.local/lib/python3.8/site-packages/torch/cuda/__init__.py:122: UserWarning: 
Found GPU0 Quadro K1000M which is of cuda capability 3.0.
PyTorch no longer supports this GPU because it is too old.
The minimum cuda capability supported by this library is 3.7.

warnings.warn(old_gpu_warn % (d, name, major, minor, min_arch // 10, min_arch % 10))

这个问题似乎有很多讨论:

所以从目前的情况来看,pytorch 至少要 sm3.7 版本以上才能用

python3 -c ‘import torch; print(torch.cuda.get_arch_list())’
[‘sm_37’, ‘sm_50’, ‘sm_60’, ‘sm_70’, ‘sm_75’, ‘sm_80’, ‘sm_86’]

不同的 gpu 型号,都有一个最新的 sm 版本支持,如果当前pytorch的最低sm版本要比支持这个gpu的最新sm版本要大,那就能用,否则不能用

我的 gpu 型号是 K1000M

# lshw -numeric -C display
*-display 
description: VGA compatible controller
product: GK107GLM [Quadro K1000M] [10DE:FFC]
vendor: NVIDIA Corporation [10DE]
physical id: 0
bus info: pci@0000:01:00.0
version: a1
width: 64 bits
clock: 33MHz
capabilities: pm msi pciexpress vga_controller bus_master cap_list rom
configuration: driver=nvidia latency=0

查询 gpu 型号的最高 sm 版本

https://developer.nvidia.com/cuda-gpus

0

发现基本上 K系列的显卡,都在 sm 3.0 之后停止支持了,而 pytorch 要求的 sm 版本不能低于 3.7,所以我这个机器没法用 gpu 版本的 pytorch

4. 一些其他问题

1)安装 nvidia-driver 后扩展显示器无法显示

首先确保你重启了!

如果 nvidia-smi 时出现 No running processes found 字样,说明没有活跃的进程。也就是 xorg 没有切换到 gpu 模式

原因:nvidia 驱动没安装对

解决办法:不一定要用 ubuntu-drivers devices 推荐(recommended 关键字)的 nvida-driver,可以多试试列表里的其他几种。装完重启!!!

2)安装 nvidia-driver 后内屏不显示,扩展显示器正常

xorg 配置不正确,通常是这个原因

我是参考的这个: https://askubuntu.com/questions/1059965/internal-laptop-screen-not-detected-when-using-nvidia-driver

解决办法很简单

cd /etc/X11
sudo rm xorg.conf
sudo cp xorg.conf.nvidia-xconfig-original xorg.conf
reboot

3)Ailed to initialize NVML: Driver/library version mismatch

这个问题是因为 cuda 和 nvidia-driver 版本不匹配导致的,正常来说按照教程安装不会有这个问题,但是可能由于反复安装卸载,导致环境被弄脏了,容易有这个问题

先检查版本:

  1. cuda 自带的 nvidia 版本
  2. nvidia-driver 运行版本

Please post the output of

dpkg -l |grep nvidia

and

ls -l /usr/lib/x86_64-linux-gnu/libcuda*

cat /proc/driver/nvidia/version

最后我发现 /proc/driver/nvidia/version 和 dpkg 里安装的 version 不一致。是因为我卸载旧版本 nvidia-driver 和安装新版本 nvidia-driver 之后没有重启机器导致的。

lsmod | grep nvidia 可以看到 nvidia-driver 是以内核模块加载上来的。所以安装完驱动,最好的方式是一定要确保机器重启了

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注