「工欲善其事,必先利其器」,簡單的說,就是學東西前一定要先花一筆錢,尤其是AI算法這種極吃資源的東西。
以下就先曬一下我的單
選購原則
本著是學習 AI 的用途,最吃的還是 GPU 與 RAM,所以就直上頂級的 RTX4090 了,並裝滿128GB的RAM。之所以會選擇水冷,是想要做全天候的運算,睡覺的時候也會使用,所以不要太吵是一個考慮點。同是微星的顯卡,水冷和風冷,價差有將近7000元! 本著安靜與延長顯卡壽命的想法,還是咬牙買了下去。
CPU 選擇了算是中低階的 i5-13400,從使用的情況來看。做 training 的時候,其實只用到單線程的運算,而且僅在預處理的時候吃的比較多。加上有低耗電和安靜的需求,所以選了顆65w的 i5-13400。CPU 的單核/多核性能,可以參考 passmark 這個網站,算是在購買前的一個參考。
其它主板、Power、機殼算是選擇以價格取向
- 主板: 本來是選了一個最便宜的 6 相供電的主板,才2000多元。但店小二覺得這樣太low,可能會供電不足燒掉什麼,所以就請他推荐了一塊主板。主板這方面的確我也不懂,但都花了這麼多錢了,就搭個稍微高級一點的,我也覺得OK
- SSD: 固態硬碟就選了 1TB 的 PCIE 4.0 ,理論效能也有5000MB/s以上,我哥是建議我買2TB的,也才多2000多元。價差的確不大,不過以過往的經驗來說,其實用不太到,這2000多塊就先省下來了。冷資料的話,我還有蠻多塊機械硬碟可以存的。
- Power: 電源最主要就是功率要高一點,我以2倍的最大功耗做考慮,所以就是1000W左右。另外要支援 ATX 3.0 12v VHPWR 的接頭,這樣就不用轉來轉去了。由於 RTX4090 最大耗能高達 450w, 而且還有接頭燒熔的案例,所以這方面會謹慎一點。
- 機殼: 由於本次是高耗電的設備,散熱就變得格外重要,會選一個大一點的 case,以便有較好的通風。
防塵
第一次買這麼貴的電腦,對於防塵也特別的在意,很怕到時有佈滿了灰塵。方法當然也就是在所有的進氣孔加上了靜電除塵濾網,出風口的部份則沒有特別的防護。在開機的狀態下,出風口應該是比較不會積灰才對。
由於水冷的出風口在頂部,在停機或弱風下還是有可能會進塵,所以我仍然上了靜電濾網,但是並沒有封死。在風扇高速運轉下,濾網還是會被吹起,當然這樣會影向散熱。經過比較,溫度差異在5度左右。由於現在是冬天,所以溫度都還不是問題,到了夏天才是考驗的開始。
省電策略
基本上在做訓練時,耗電會在 500w 左右。
我建議可以買一個簡單的耗電監控器,以免要繳電費的時候太 surprised。
另外我感覺 GPU 在使用率 100% 時,並非真正的 100%,若同時運行2個任務,完成的時間還是不會差太多,這樣就可以提高使用率,省一點電費,當然這種說法也是要再待確認。
另外,當沒有任務閒置時,耗電可能也會高達 80~100w,這時可以進入待機模式,將耗電降到1w左右。這部份是比較麻煩一點,因為還要另外再一台機器來喚醒AI主機。我個人是搭配了一台 Raspberry 1,來負責叫醒算圖主機,而算圖主機在 CPU / GPU 使用率低 5% 超過30分鐘後,就會進入休眠。當我要喚醒算圖主機時,就可以用 vpn 連回家裡,透過 raspberry 來喚醒它,raspberry 平常運作時只耗電 0.5w,所以還是划算的。
睡眠腳本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
#!/bin/bash cpu=100 gpu=0 net=0 idle=0 get_usage() { cpu=`mpstat 1 1 | grep Average | tr -s ' ' | cut -d' ' -f12` gpu=`nvidia-smi | grep Default | tr -s ' ' | cut -d' ' -f13` cpu=`echo $cpu | cut -d. -f 1` gpu=`echo $gpu | cut -d% -f 1` net0=`ifconfig enp5s0 | grep "RX packets" | awk '{print $5}'` sleep 1 net1=`ifconfig enp5s0 | grep "RX packets" | awk '{print $5}'` net=`expr $net1 - $net0` } while [ 1 ] do sleep 5 get_usage if [ $cpu -gt 95 ] && [ $gpu -le 5 ] && [ $net -le 100000 ];then idle=$(( $idle + 1 )) else idle=0 fi echo $cpu $gpu $net $idle if [ $idle -ge 360 ];then idle=0 echo "Idle... suspend to RAM" echo mem > /sys/power/state fi done |
結語
買這台 AI 主機也快有一個月了,也陸陸續續研究了一些東西,雖然還沒看到實用性,但後續會把結果寫上來。