xChar
·a year ago

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 comments...