banner
Aki

Aki

太阳能维修,月亮可更换,星星不闪包退换。
twitter

# 为ubuntu22.04安装P40显卡

aki 终于是攒下一些钱了。念想了很久的 AI 绘图多少是可以搞点小动作了。

本着话不能睁着眼睛乱说(一支眉笔赛黄金),钱不能张开手来乱花的原则,考虑购入一张 “高性能”(过气)计算卡来玩一玩 Stable Diffussion(以下简称 SD)

原本显卡是打算给服务器买的,但到头来发现塞不下,着实有些尴尬。

PC 机上装了 ubuntu22.04,原本用的显卡是 1660TI 那现在正好可以腾出来位置给新显卡用。

主机配置
核心组件更换前更换后
CPUAMD Ryzen 5 3500X不变
主板微星的 B450M不变
内存40G不变
显卡 1NVIDIA GTX 1660TITESLA P40
显卡 2NVIDIA GF 310

GF 310 仅作为亮机卡。更换前这些组件需要的额定功率(不考虑超频的情况)约为 215W,更换后功率变为了 335W(国家电网合作伙伴兼外围职工),电费肉眼可见的上涨。

为什么选择 tesla P40#

首先,来看看这张卡的技术规格

显卡规格
GPU 架构NVIDIA Pascal™
单精度浮点运算能力12 TeraFLOPS*
整数运算能力 (INT8)47 TOPS* (万亿次 运算 / 秒)
GPU 显存24 GB
显存带宽346 GB/s
系统接口PCI Express 3.0 x16
外形4.4”(高)x 10.5”(长), 双插槽,全高
最大功耗250 W
已使用页面迁移引擎提升 编程能力
ECC 保护
硬件加速视频引擎1 个解码引擎, 2 个编码引擎

P40 的实际使用性能等同于 GTX 1080TI,网友为其做了详细对比,详见:知乎

话又说回来了,为什么就一定要选择 P40?

除了什么单精度浮点运算能力、整数运算能力之类的我看不懂的技术指标,其实我更看中他的 24GB 显存,这篇知乎的回答是在 2018 年,而 P40 首发是在 2016 年,毫无疑问,这种专业用途的计算卡价格昂贵是必然的。时过境迁,现在某鱼市场上的二手显卡二者对比下来反而是 1080TI 略贵一些(这还是上半年 AI 模型多次迭代导致二手市场上做训练用途的显卡价格上涨后的结果)。

p40 的 24GB 的现存相比 1080TI 的 12GB,可以用来跑更多类型的 AI 模型

再加上服务器本身自带集显,不用考虑亮机问题,所以首选了 P40(950R)

P40 官方告示

P40 安装前后的一些操作#

给 ubuntu 打显卡驱动正确步骤应当是先屏蔽开源驱动 nouveau,并进入 init 3 纯命令行模式
由于早先给 1660TI 打驱动时做过这些步骤,因此本文省略
如果有小伙伴参考了本文给 linux 操作系统打驱动一定要先做好上述准备

由于这台 PC 最早搭载的显卡是 1660TI,现在更换下来后,没有输出显示,需要再备一张亮机卡。匆匆忙忙去附近电脑店花 “高价” 购入了一张 GF310 显卡作为亮机卡(否则无法点亮,过不了自检)

ubuntu 操作系统上先不能安装 P40 显卡,只装上 GF310,然后卸载原有驱动,并更新安装新的驱动

~$ lspci | grep -i nvidia
25:00.0 VGA compatible controller: NVIDIA Corporation GT218 [GeForce 310] (rev a2)

~$ apt remove --purge nvidia-*
~$ nvidia-smi

找不到命令 “nvidia-smi”,但可以通过以下软件包安装它:

~$  apt autoremove

lspci用于查看当前 pci 上安装的显卡型号

apt remove --purge nvidia-* 用于卸载原有 1660TI 的驱动

nvidia-smi 提示找不到命令则表示驱动卸载完毕

apt autoremove 保证残余依赖包完全卸载

GF310 显卡需要安装的驱动为 340 版本,使用ubuntu-drivers devices命令无法找到合适的驱动版本,尝试通过官网下载驱动文件进行安装也失败了(这版本得是有多老啊)。

原因在于 ppa 源中没有包含 340 版本的驱动包,需要扩展

~$ add-apt-repository ppa:graphics-drivers/ppa
~$ apt-get update
~$ apt-get install nvidia-340

安装完成后重启依旧无法使用 nvidia-smi 命令查看到现有的显卡驱动。

~$ apt-get install nvidia-340
正在读取软件包列表... 完成
正在分析软件包的依赖关系树... 完成
正在读取状态信息... 完成                 
nvidia-340 已经是最新版 (340.108-0ubuntu8)。
升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 2 个软件包未被升级。

但重新执行apt-get install nvidia-340 命令却提示已经安装,所以亮机卡的驱动应当是安装完成了的,从显示器也可以观察到分辨率已经自动调整,亮机显示问题已经解决。

在安装 P40 显卡之前,先要进入 bios 开启 Above4GDecoding 并且关闭 secure boot

再次关机,重新插上 P40 显卡后开机。

这次可以看到 pci 通道上可以显示 p40 显卡了。

~$ lspci | grep -i nvidia
25:00.0 VGA compatible controller: NVIDIA Corporation GT218 [GeForce 310] (rev a2)
25:00.1 Audio device: NVIDIA Corporation High Definition Audio Controller (rev a1)
26:00.0 3D controller: NVIDIA Corporation GP102GL [Tesla P40] (rev a1)

由于更新了 ppa 源,接下来打驱动就简单多了

~$ ubuntu-drivers autoinstall

安装完成后再次重启,执行命令可以看到显卡信息了

~$ nvidia-smi
Wed Oct 25 16:55:35 2023       
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 545.23.06              Driver Version: 545.23.06    CUDA Version: 12.3     |
|-----------------------------------------+----------------------+----------------------+
| 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  Tesla P40                     Off  | 00000000:26:00.0 Off |                  Off |
| N/A   41C    P8              12W / 250W |      0MiB / 24576MiB |      0%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+
                                                                                         
+---------------------------------------------------------------------------------------+
| Processes:                                                                            |
|  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
|        ID   ID                                                             Usage      |
|=======================================================================================|
|  No running processes found                                                           |
+---------------------------------------------------------------------------------------+

此时可以看到 p40 显卡右侧有个 off,这对应的是 Persistence-M 模式,该模式默认关闭,persistence mode 开启后能够让 GPU 更快响应任务,但待机功耗会增加。

想要显卡能快速响应计算则应当开启

~$ nvidia-smi -pm 1
Enabled persistence mode for GPU 00000000:26:00.0.
All done.
~$ nvidia-smi
Wed Oct 25 16:55:35 2023       
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 545.23.06              Driver Version: 545.23.06    CUDA Version: 12.3     |
|-----------------------------------------+----------------------+----------------------+
| 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  Tesla P40                      On  | 00000000:26:00.0 Off |                  Off |
| N/A   41C    P8              12W / 250W |      0MiB / 24576MiB |      0%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+
                                                                                         
+---------------------------------------------------------------------------------------+
| Processes:                                                                            |
|  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
|        ID   ID                                                             Usage      |
|=======================================================================================|
|  No running processes found                                                           |
+---------------------------------------------------------------------------------------+

在上方还有个 CUDA Version,这里显示的是本机可安装的 CUDA 版本,并不是说已经安装好了,要确定有没有安装只需要到 /usr/local 目录下查看有没有 cuda 相关的文件即可,没有就表示没装

安装 cuda#

~$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
~$ dpkg -i cuda-keyring_1.1-1_all.deb
~$ apt-get update
~$ apt-get -y install cuda

当安装完成后,可以看到类似的提示

*****************************************************************************
*** Reboot your computer and verify that the NVIDIA graphics driver can   ***
*** be loaded.                                                            ***
*****************************************************************************

~$ cd /usr/local
~$ ls
bin  cuda  cuda-12  cuda-12.3  etc  games  include  lib  man  sbin  share  src

意味着此时重启可以应用 cuda, 并且切换到 /usr/local 墓库可以看到 cuda 的目录

不急,重启前先做好相关配置

~$ vim ~/.bashrc
#添加下述内容,注意版本号
export PATH=/usr/local/cuda-12.3/bin${PATH:+:${PATH}}

完成后重启


前面说到 GF310 这张显卡无法在 nvidia-smi 中无法显示的问题,疑似因版本过旧和现有的 nvidia-smi 不兼容导致无法识别,但能亮机。

由于无法显示是否正常驱动,/dev 目录下也没有相关的硬件信息,因此依旧存在一点问题,考虑下一步更换 gtx750ti 或者外接显卡坞的形式用较新的可以备 nvidia-smi 识别的显卡做为亮机卡

这是后话了


部署 stable-deffusion#

git clone https://github.com/AbdBarho/stable-diffusion-webui-docker.git
cd stable-diffusion-webui-docker
# 安装docker显卡依赖
apt install nvidia-docker2 nvidia-container-toolkit nvidia-container-runtime
# 安装依赖套件,会自动下载Stable Diffusion v1.5的模型。
docker compose --profile download up --build
# 启动容器,选取auto代表启动AUTOMATIC1111开发的WebUI
docker compose --profile auto up --build

启动完成后通过http://ip:7860 可以访问 SD 的 web 页面,默认只有 Stable Diffusion v1.5 模型

尝试绘图

image

提示词(网上套来的):

beautiful render of a Tudor style house near the water at sunset, fantasy forest. photorealistic, cinematic composition, cinematic high detail, ultra realistic, cinematic lighting, Depth of Field, hyper-detailed, beautifully color-coded, 8k, many details, chiaroscuro lighting, ++dreamlike, vignette

实测生成图片约需要 3-5 秒。可见这张显卡还是好用的

在图片生成过程中可以观察到显卡的变化

+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 545.23.06              Driver Version: 545.23.06    CUDA Version: 12.3     |
|-----------------------------------------+----------------------+----------------------+
| 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  Tesla P40                      On  | 00000000:26:00.0 Off |                  Off |
| N/A   50C    P0              54W / 250W |    210MiB / 24576MiB |      0%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+
                                                                                         
+---------------------------------------------------------------------------------------+
| Processes:                                                                            |
|  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
|        ID   ID                                                             Usage      |
|=======================================================================================|
|    0   N/A  N/A     32634      C   python                                      208MiB |
+---------------------------------------------------------------------------------------+

可以说是轻轻松松(参数啥的都没改,当然轻松)

参考资料#

[1] Tesla P40 技术规格

[2] Tesla P40 发布资料

[3] Tesla P40 与 GTX 1080TI 对比

[4] Ubunut 操作系统打驱动正确步骤

[5] NVIDIA CUDA 列表

[6] docker 部署 stable deffusion

Loading...
Ownership of this post data is guaranteed by blockchain and smart contracts to the creator alone.