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

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。