現在對軟體開發者來說是個有趣的時代;在我看來,Transformer大型語言模型是這個領域中,很久以來第一個真正新穎且有趣的技術發展。

基於此技術建構的AI編碼代理,已迅速成為從事這項專業工作的核心,感覺就像是從使用手工具的木工,轉變為使用電動工具,無論好壞。

我個人,只有在我能將科技產品拆解再組裝起來時,才能真正信任它。那種連接到某個服務,並在他人控制下使用編碼代理的方式,讓我感到困擾;這其中有太多出錯的可能。你會開始依賴它,然後它就被收回了。這項技術令人興奮,但我不想連接到某個大型AI數據中心;我想要的是每個家庭都有一個小型AI數據中心!而我們現在正處於電腦零件短缺的時期(或者,也許是2010年代後期是電腦零件的過剩期?),為了讓成本保持可負擔,我必須用廢料來組裝。

我這裡最需要的是大量的GPU。我需要快速的記憶體連接到能進行大量平行矩陣運算的裝置,而這正是GPU的功能。不過,正如我之前所說:任何能運行任何AI工作負載的裝置,甚至任何已知在這方面表現良好的裝置,現在都貴得離譜。

早在2022年,許多公司都試圖讓「雲端遊戲」這件事流行起來。你知道的,就是你在某個數據中心運行你的電子遊戲,這樣你就不需要購買昂貴的遊戲PC或遊戲機。AMD將其一款工作站GPU,增加了一些額外的RAM,並移除了所有的視訊輸出。他們將由此產生的顯示卡稱為「V620」。它從未公開銷售,所以你可能沒聽過它。AMD大量生產了這些東西,然後雲端遊戲這件事因為(回想起來很明顯的)延遲問題而沒有成功。

這些顯示卡實際上並非為AI工作負載而設計,而且AMD的軟體支援出了名的糟糕,所以從eBay上的「二手伺服器硬體」電子垃圾轉售商那裡購買這些東西相對便宜。我不認為我買到的那些實際上曾被使用過,它們看起來基本上是新的。它們各自擁有32GB相當快的VRAM。當然,它們因為不擅長我想要用它們來做的事情而聲名狼藉,但要讓它真正工作起來能有多難?

哦,順帶一提,它們沒有風扇。它們是伺服器卡,它們期望伺服器用非常響亮的鼓風機風扇來為它們散熱。我們一會兒就會談到這個。

我們這裡正處於零件短缺的狀態,所以我買了一些其他的電子垃圾來連接GPU陣列。主機板來自2017年的X299平台,是某人舊的遊戲機上的,已經老到可以在eBay上買到便宜的了。它有四個PCIe x16插槽,間距正確,可以讓我將四張GPU並排放置,這是我唯一關心的。上面的CPU是Intel Core i9 10900X,這是英特爾過去二十年來生產的最糟糕的CPU;它於2019年推出時,是Skylake晶片的重重重刷新版本,價格過高且耗電,因為當時英特爾在處理器設計或製程節點大小上都無法跟上AMD的Ryzen晶片。對我來說沒關係,這意味著它現在很便宜,而且能完成工作!

RAM和SSD是從家裡其他電腦上拆下來的。這當然是作弊;如果我現在必須購買它們,它們會貴得令人討厭。但這裡的要求沒有你想像的那麼嚴格;所有的工作都將在GPU的VRAM上完成;模型從磁碟載入後,它們大多保持閒置。如果我沒有現成的零件,我也可以在這裡省下不少錢。

我為四張GPU和英特爾效率最低的處理器供電,所以我買了一個大電源。不知何故,在eBay上買一個1600W的電源比買一個1200W的還要便宜。我不期望持續消耗那麼多電力,但我需要它來處理啟動時所有裝置同時開啟的情況。

我花錢買了一個新的機殼和風扇。哦,對了,風扇!那些數據中心GPU沒有散熱風扇,它們期望來自一整排伺服器風扇的氣流。網路上有很多3D列印的風扇罩模型,如果你想為其中一張卡散熱,但如果你將四張卡並排放置,這些模型似乎都不理想;它們要麼在末端使用一個小巧的、超級響亮的40mm風扇,要麼就突出到一側,讓你無法將多張卡放在一起。四張雙槽卡並排放置的寬度約為160mm,所以我真正想要的是兩台80mm的伺服器風扇直接放在那裡,吹過顯示卡的散熱片。

於是我設計並列印了一個風扇罩,可以將一個80mm風扇連接到兩張卡上。1 這些卡背面有一些金屬纜線導流鰭片,用小螺絲固定;我利用這些螺絲孔將風扇罩固定。裡面有一個用於電氣連接器的開口,以及四個用於將風扇固定在背面的孔。我用碳纖維ASA列印了這個,但可能普通的PLA也能正常工作。

我買了這些10,000 RPM的風扇,因為我想確保我能移動足夠的空氣,而且它們的價格與較慢的風扇一樣。它們真的很響!我希望主機板能根據GPU溫度控制它們的速度,起初這不起作用,所以在初始設定期間我只好戴著耳塞。

這台主機一開始不想開機。我可能花了一個小時戴著耳塞,站在車庫裡玩弄BIOS設定,直到我弄清楚需要設定哪些PCIe設定,才能讓主機板在連接所有四張卡的情況下正常啟動。(你必須在進階選項設定的兩個獨立選單中啟用Resizable BAR和MMIO High Size,因為2017年時沒有人會想到在這塊板子上插這麼多VRAM)。大約在這個時候,我還意識到車庫裡沒有網路,於是我在晚上11點開始在乾牆上開洞。

總之!經過這幾次初步的嘗試後,我讓這台機器開機了,並開始安裝Ubuntu 24.04。戴著耳塞,風扇控制仍然沒有啟動,我編譯了我最喜歡的推論伺服器 llama.cpp 的一個版本,並測試了Gemma4模型,它能輕鬆地裝進一張卡裡。這是我以前在單GPU工作站上玩耍時最喜歡的本地模型,測試效果相當不錯;速度不如我以前的RTX 3090,但也不算太差。然後我啟動了Deepseek V4 Flash,這才是這台主機的真正目標。它很慢!到目前為止,我不知道如何讓它變快(下一章會詳細介紹),我只是想看看它是否能裝進去,結果是可以的。

回到風扇!我再次強調這些風扇有多響。全速運轉時,你可以隔著房子的牆壁聽到它們的聲音,而這台機器根本不需要全速運轉。最初的計畫是使用主機板內建的風扇控制來控制風扇,但這塊主機板無法單獨控制不同的風扇速度。顯然,Supermicro的主機板普遍存在這種問題。所以我改為製作了一個風扇控制器;我有一整盒從Aliexpress買的便宜貨Arduino Nano克隆版,是在關稅提高之前買的;我翻出了十多年前大學微控制器課程寫的程式碼來運行PWM馬達,並清理了一下。

風扇控制器只從伺服器接收一個百分比值;我需要在伺服器上寫一個腳本來讀取溫度並適當地調整風扇速度。這是一台AI伺服器,所以我讓它自己寫了風扇控制腳本;這似乎很貼切。Deepseek V4 Flash在這方面相當有能力,只需要一些指導和人類互動,就能從一個輕量級AI模型中獲得不錯的軟體。2 在過程中發生了一個有趣的時刻,我讓它想一些能加熱GPU的事情來測試腳本,它開始寫一個PyTorch腳本來進行矩陣乘法,我告訴它:「不,你正在這些卡上運行,你存在於這台電腦的llama.cpp實例中,隨便說些什麼都會讓卡片負載起來」,它經歷了一段短暫的存在危機。太可愛了!

控制器本身放在一個原型麵包板上,我只是把它塞進了伺服器機殼裡。我在上面貼了一點電氣膠帶,以免它與機殼短路。

到目前為止,這台主機已經相當穩定,我已經測試了GPU,準備深入探討如何讓它運行得更快,這將在下一章中討論。