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

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。