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 列表