aki 终于是攒下一些钱了。念想了很久的 AI 绘图多少是可以搞点小动作了。
本着话不能睁着眼睛乱说(一支眉笔赛黄金),钱不能张开手来乱花的原则,考虑购入一张 “高性能”(过气)计算卡来玩一玩 Stable Diffussion(以下简称 SD)
原本显卡是打算给服务器买的,但到头来发现塞不下,着实有些尴尬。
PC 机上装了 ubuntu22.04,原本用的显卡是 1660TI 那现在正好可以腾出来位置给新显卡用。
核心组件 | 更换前 | 更换后 |
---|---|---|
CPU | AMD Ryzen 5 3500X | 不变 |
主板 | 微星的 B450M | 不变 |
内存 | 40G | 不变 |
显卡 1 | NVIDIA GTX 1660TI | TESLA P40 |
显卡 2 | 无 | NVIDIA 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 安装前后的一些操作#
给 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 模型
尝试绘图
提示词(网上套来的):
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 发布资料
[5] NVIDIA CUDA 列表