前言
本博客的上一篇文章更新于2021年2月,距今已經有一年半了,這一年半我一切正常,沒有經歷任何糟糕的事情,一直沒更新純粹是因為太忙,一年半的高壓下來,我的心態也變化了不少,這些不妨以后再寫,
說正事,最近開始接觸深度學習,跑了幾個程式以后發現筆記本的 3050 Ti Laptop 的 4 GB 顯存捉襟見肘,于是想配一臺帶有大顯存的電腦,

8000 張圖片,FCOS 訓練,一輪近半小時,誰吃得消;batch size 也只能取到 4
方案
在選擇顯卡之前,首先應該考慮的是顯卡插在哪里的問題,
我剛接觸電腦硬體是在2015年,那時很流行E3,E5洋垃圾也很香,但是隨著制程和架構的升級,這些型號無論是IPC還是主頻都太過時了,況且配套的主板并不便宜,選一個現代的CPU吧又缺乏足夠的理由,一是深度學習對CPU的要求并不高,二是我現在的主力筆記本搭載的5900HX也足夠強大,我不想為好的CPU花兩份錢,
其實說到底還是沒有垃圾的產品只有垃圾的價格,我并不愿意付出很多金錢來購買一套不錯的板U以應對我一般的需求,但是買洋垃圾又覺得錢花得不值,
有沒有白嫖的方法呢?在我考慮這件事的時候,我的主力筆記本正壓在前主力身上,
大約是2017年3月,我(準確地說是我家里人)買了一臺華碩飛行堡壘FX63VD,i7 7700HQ + GTX 1050,陪伴我從高中進入帶學,于21年11月光榮退役,此后又干過BT下載和爬蟲,

兩臺電腦同時掛爬蟲,這個專案我可能以后會專門介紹
這臺機子已經經歷過幾次升級了,買的時候為了省錢選的是單條 8G 記憶體+1T 機械,同時買了 256 GB 的 NGFF 固態裝上,顯然記憶體不夠,沒用多久我就加了一條 16G 記憶體組成非對稱雙通道,因此它當前的狀態是:記憶體 24 GB,SATA SSD 256 GB,HDD 1 TB,
從這臺電腦上,我可以獲得免費的基礎平臺,不止包含CPU,那么問題又來了——顯卡插在哪里?
筆記本外接顯卡的方案古已有之,在雷電介面普及之前,外接主要是走網卡或硬碟的 M.2 介面,前者是 PCIe 3.0 x1,后者是 x4,外接顯卡算是成熟技術了,淘寶上很容易買到 M.2 轉接 PCIe x16 的延長線,

M.2 轉接 PCIe x16 延長線
但是這需要 M.2 支持 NVMe,即 PCIe 信號,說來奇怪,以我對當時的自己的認知,如果這臺電腦的 M.2 介面支持 NVMe,我應該會選擇一塊 NVMe 固態而不是 NGFF,因此我一度懷疑它不支持,查了華碩官網的說明書,說是支持,但我仍然懷疑國行區別對待,畢竟這種事現在不在少數,直到我找出了原購買鏈接的交易快照,那里寫著幾個 128 GB NVMe 固態的選項,我才確定它支持 NVMe,
那么我可以把 NGFF 硬碟拆下來給顯卡騰位置了,系統盤還得是SSD,所以我買了個 M.2 轉 2.5 寸 SATA 的硬碟盒,很便宜,原 HDD 就扔到硬碟座上去了(下載機時期買的),不知道我怎么想的,我還買了一條 16G 記憶體替換原裝 8G,可能是為了彌補主力機沒有 32 GB 記憶體的缺憾吧,事實證明沒有必要,不過筆記本 DDR4 16G 2666 現在已經是白菜價了,不是很心疼,

本文主角之一,四年半下來積了很多灰了
總之裝機方案為:退役筆記本 M.2 位置外接顯卡,外接供電,
延長線選型
淘寶上有很多這類延長線,價格從20以內到200以上不等,之所以叫“延長線”而非“轉換器”,是因為這類產品在 PCIe 信號通路上都是沒有芯片的,直接導線連接,
下面這張圖是售價不到20元的 M.2 A/E key 介面的延長線,M.2 端和 PCIe 端通過一根 USB 3.0 線連接:

下面這張圖是售價超過200元的 M.2 M key 介面的延長線,M.2 端直接焊接排線,另一端通過兩個 HDMI 介面連接:

經過仔細分析,這類產品只有兩大類不同:
-
帶寬,上圖第一個是 PCIe x1,第二個是 PCIe x4,
-
電源介面,明顯第二個比第一個提供了更多電源介面,甚至包括主板 24-pin,把電源啟動也考慮進去了,
事實上,上面第二個正是專門為外接顯卡設計的產品,也正因如此才敢賣那么貴,其實價格相比顯卡只是很小一部分,但讓我不爽的點在于我覺得它不值!

感謝群友提供表情包
話說回來,帶寬還是要保證的,我不希望幾千的顯卡被 PCIe 3.0 x1 拴著跑;但是除了帶寬以外的增值,我是一分錢都不會花的!
最終我選擇了這款:

為避免廣告嫌疑,此處不放鏈接
商品有很多選項,一個是正插反插(如圖),筆記本 M.2 顯然在反面所以選反插;長度我量了一下選最短的 0.15 m 即可,售價 63 元 + 運費 10 元,
但是它在電源方面是真的節儉,只帶一個很小的電源介面,用來給 PCIe 插槽的 12 V 供電,3.3 V 是沒有的,詢問賣家得知 3.3 V 可以不接,12 V 當然是必須接的,
顯卡選型
最初萌生攢機的想法其實是在半年前,那時我聽說 Google Colab 還在用 NVIDIA Tesla K80 顯卡,順手淘寶一查,好家伙,2000 元即可擁有前雙芯旗艦專業卡的性能!
后來我考慮了雙芯需要模型拆分和功耗等各種因素,決定升級成 P40,價格也沒差多少(其實我已經記不清了,這些卡最近波動比較大),然后我又了解到定位資料中心的旗艦 P100,發現它的單精度竟然還不如 P40!這聽起來很不合理,但是仔細調研以后我才明白,現在做深度學習已經不用 FP32 了,而是半精度 FP16 等格式,輔以混合精度、loss scaling等技術,甚至 H100 開始支持的 FP8,P40 在半精度方面沒有優化,而 P100 能把單精度乘法器拆分成兩個單元并行計算半精度(SIMD),使得 FP16 吞吐量達到 FP32 的兩倍,這下就輕而易舉地超過了 P40,穩住了老大地位,
事實上,Tensor Core 就是為這類應用而生,它的引入是從 Volta 架構開始的,此后的 Turing 即 RTX 2000 系列搭載第二代 Tensor Core,Ampere 即 RTX 3000 系列搭載第三代,每一代都有顯著的升級,到了 Ampere 這一代,FP16 的 tensor 性能已經達到了傳統 FP32 的 4 倍(資料來源),因此,我開始把眼光轉向更現代的架構,

*Tensor Core 帶來巨大的吞吐量提升(來源)
然而,因為眾所周知的原因,近幾年來普通消費者很難以合理的價格買到稱心如意的顯卡,甚至 P40、P100 這種卡都拿去挖礦了,那還有什么可選的呢?
當然,你可以選擇礦卡,3060 的 12 GB 大顯存對煉丹非常友好,閑魚上礦卡價格也不錯,其實我現在也有點后悔沒有選3060,至少它便宜很多,
由于我的眼光是從 P40 這類 24 GB 顯存的卡上轉過來的,我一時間無法接受 12 GB 及以下的顯存,再加上 Ampere 架構的限制和 3.0 x4 的發揮上限,可選的就不多了:
| 型號 | 核心 | 顯存容量 | 顯存型別 | 顯存位寬 | 核心頻率 | 顯存頻率 | CUDA數量 | 淘寶價 |
|---|---|---|---|---|---|---|---|---|
| RTX 3090 | GA102 | 24 GB | GDDR6X | 384 bit | 1395 MHz | 1219 MHz | 10496 | 4899 |
| RTX 3090 Ti | GA102 | 24 GB | GDDR6X | 384 bit | 1560 MHz | 1313 MHz | 10752 | 7999 |
| RTX A4000 | GA104 | 16 GB | GDDR6 | 256 bit | 735 MHz | 1750 MHz | 6144 | 4699 |
| RTX A5000 | GA102 | 24 GB | GDDR6 | 384 bit | 1170 MHz | 2000 MHz | 8192 | 10800 |
| A10 PCIe | GA102 | 24 GB | GDDR6 | 384 bit | 885 MHz | 1563 MHz | 9216 | 15500 |
這里面 3090 默認礦不用想,幾乎不存在例外,例外也不會讓你撿到,4899買礦卡我是不愿意的,A4000 也是有很多挖礦的,再往上因為性能與價格不成正比了,應該就沒有礦老板會那么瘋狂了,
不過不成正比的我也不考慮,我最終選擇了 A4000,在閑魚上以 4300 的價格入手,對方是做電腦租賃生意的,卡是戴爾整機拆出來賣的,我愿意相信不是礦,

順便,如果你能說服自己買 3090 Ti (應該沒礦吧),那不妨考慮一下剛出的 RTX 4090,
電源選型
在那臺筆記本還在做下載機的時候,我就已經改裝過了它的供電,用一個 12V 200W 的開關電源接 19 V 升壓模塊供電,這個電源還給LED和硬碟盒供電,所以能節省幾個插座位置,這是主要目的:

這下多出好多用電器,我不得不加一個排插,所以電腦供電可以改回原裝的了,那么 200 W 正好可以分出 140 W 給顯卡供電,
裝上去以后我發現它在大負載下會響,可能是線圈在交變電流下碰撞產生的,讓我非常害怕;而且它是被動散熱,長時間作業怕是要啥訓,所以我后來還是買了一個服務器拆機電源,這個勁大:

組裝
按照PCIe標準,這張的顯卡能從插槽取電 66 W,從 6-pin 介面取電 75 W,并且加起來不超過 140 W,66 W 就是 5.5 A 電流,走一根 18AWG 的線雖然理論上可行但是我不大放心,所以把另一根原本走 5 V 電壓的線也改成了 12 V,

注意右邊中間
我擔心過 3.3 V 不接會不會點不亮,因此還買了降壓模塊,不過事實證明并不需要,那些賣 200 多的模塊上大多自帶了 12 V 轉 3.3 V 的 DC/DC 電路,
6-pin 這邊,我買了一根延長線,然后把母口這一端剪了;板上 4-pin 配的線另一端是SATA供電,也剪了,正負各 5 根線全都被我焊在一起,負極接上了端子,正極接到保險絲然后再端子,

事實證明保險絲沒什么必要,TVS二極管后來則直接去掉了
負極端子并非直接接到電源負極,而是再經過一個小電阻,用來測量電流,這個功能其實更沒有必要,一是整套系統放在下面我看不見,二是功率在軟體里也能看,只是現在顯得高級,

由于接了分壓器,顯示的電流比真實電流小得多
顯卡需要一個底座,我當然不會花錢買,我找出了為多年前的專案制作的多余的亞克力板,剛好 PCIe 板后面的槽中有一個位置能夠裝進螺絲,兩者就這樣固定起來,這時顯卡裝在上面會傾斜,有點危險,于是我用一個尼龍柱加尼龍螺絲頂住,它甚至還可以適配各種高度,

免費的底座
整套下來我一個人大半夜裝了好幾個小時,因為對這么貴的顯卡用這么樸素的方案沒什么信心,每一步都確認一下,所以比較慢,尤其是上電之前非常緊張,后來換電源重新上電就很淡定了,

最終系統;筆記本底座是免費的瓶蓋散熱法
測驗
按照默認的風扇曲線,一跑深度學習很快就 90 度以上,很危險,我用 Afterburner 把風扇曲線拉高了很多,使得它能在 90% 轉速下穩定在 80 度以下,淘寶上有賣改裝風扇,我目前還沒有必要買,明年夏天再考慮,

我把之前在 3050 Ti 上跑過的模型都重新跑了一遍,并記錄了時間,有的模型還加大了 batch size 又跑了一遍,也能對訓練速度有明顯的提升,
| 模型 | batch size | 3050 Ti | batch size | A4000 |
|---|---|---|---|---|
| resnet18 | 64 | 5m 38s | 64 | 2m 47s |
| resnet50 | 16 | 18m 39s | 16 | 8m 24s |
| 64 | 6m 44s | |||
| regnet_y_400mf | 64 | 6m 31s | 64 | 3m 33s |
| regnet_y_1_6gf | 16 | 28m 52s | 16 | 15m 19s |
| 64 | 7m 23s | |||
| FCOS | 4 | 26m 25s | 4 | 10m 27s |
| 16 | 9m 20s |
這兩天 Stable Diffusion 和 NovelAI 很火,我也在玩,16 GB 的顯存允許我把 batch size 拉滿,我甚至用它生成的圖來水報告,


轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/514301.html
標籤:其他
上一篇:淺談IT系統性能優化
下一篇:Kali定位
