AI-Rig
1. Einleitung
Als Bachelor Thesis mache ich etwas mit AI und möchte hierfür eine dedizierte Maschine aufbauen. Zeitgleich setze ich mich gerade mit AI-Modellen für die Bilderzeugung auseinander gesetzt. Da ich mich auch für lokale LLMs interessiere, ist mir schnell klar geworden, dass ich neue Hardware benötige.
2. Beschaffung der Hardware
Nach einer kurzen Recherche bieten die Nvidia RTX 3090 das beste Preisleistungsverhältnis. Mit 24 GB VRAM bieten sie bereits mehr genügend Speicher für kleinere LLMs. Seit dem Release von Deepseek R1 und deren destillierten Modellen, bin ich besonders an dem 70b-Modell interessiert.
2.1 Grafikkarten
Zufälligerweise habe ich zwei günstige 3090er beschaffen können. Diese haben jedoch weder Lüfter noch ein Gehäuse.
Abbildung 1: Nvidia RTX 3090 ohne Lüfter und Gehäuse, Quelle: Ricardo
2.2 CPU
Bei den CPUs gibt es für die x86 Architektur nur AMD und Intel als Hersteller. Aufgrund des beschränkten Budgets habe ich die Wahl der CPU auf ältere Modelle beschränkt. Da ich bereits 128 GB DDR4 RAM besitze, möchte ich diese in dem neuen Projekt nutzen. Aufgrund der ständig wechselnden Intel Sockel ist die Verfügbarkeit von älteren CPUs und deren kompatiblen Motherboards sehr begrenzt. Aufgrunddessen ist der Preis meist auch sehr hoch.
Bei AMD hingegen sieht es mit dem AM4-Sockel sehr gut aus. Die älteren Prozessoren (mit Ausnahme der X3D-Varianten) sind gut verfügbar und preiswert. Die Wahl viel schliesslich auf den Ryzen 9 5900X und ein günstiges AM4-Motherboard mit zwei PCIe x16 Slots.
2.3 Motherboard
Beim Motherboard war mir nur wichtig, dass dieses zwei PCIe x16 Slots besitzt, kompatibel zum 5900X-Prozessuor und 128 GB RAM unterstützt. Der erste PCIe-Slot läuft mit X16, der zweite leider nur mit X4. Dies genügt für meine Zwecke und ist anscheinend nur für die initiale Ladegeschwindigkeit der Modelle in den VRAM von Relevanz.
2.4 RAM
Da ich aus früheren Projekten noch 128 GB RAM besitze, finden sie hier wieder Verwendung.
2.5 Netzteil
Die beiden RTX 3090 besitzen eine Leistungsaufnahme von je 350 Watt. Die Ryzen 9 5900X CPU hat eine Leistungsaufnahme von 105 Watt.
Zusammen ergibt das etwa eine Leistungsaufnahme 805 Watt. Bei einer dauerhaften Auslastung sollte das Netzteil nicht an seine Grenzen stossen. Somit sollte noch genügend Kapazitäten eingeplant werden.
Da die optimale Effizienz von Netzteilen bei einer Auslastung von etwa 60% liegt, bietet es sich an ein 1200 Watt Netzteil zu verwenden.
Abbildung 2: Corsair HX1200 Effizienz. Quelle: tom's HARDWARE
3. Kühlung der Grafikkarten
Um die Lüfter an den Grafikkarten zu befestigen drucke ich die Gehäuseteile jeweils mit einem 3D-Drucker. Als Material verwende ich ABS, da es hitzebständiger (bis 100° gegen Deformierung) als PLA und PETG ist.
3.1 Erster Versuch
An den Lamellen des Kühlblocks (Siehe Abbildung 1) erkennt man, dass es sich bei der Grafikkarte um eine sogenannte Blowerstyle-GPU handelt. Ursprünglich war wohl ein Radial-Lüfter eingebaut. Am Bild der Grafikkarte konnte ich erkennen, dass es sich um einen 4 Pin-Anschluss handelt.
Der erste Versuch der Kühlung habe ich mit zwei 40mm Noctua Lüftern gestartet. Als die Grafikkarten angekommen sind, musste ich leider feststellen, dass reguläre 4 Pin-Anschlüsse zu gross sind. Für die Überbrückung, bis die Adapterkabel ankommen, schliesse ich die Lüfter einfach an den Gehäuselüfteranschlüssen des Motherboards an.
Da die beiden Lüfter über den Kühlblock ragen, habe ich einen Luftkanal mitdesigned. Die Idee dahinter ist es dadurch den Luftdruck zu erhöhen.
Abbildung 3: Erster Kühlversuch mit Luftkanal
Aufgrund der Grösse und der Klobigkeit habe ich diese Idee schnell wieder verworfen. Stattdessen habe ich ein einfaches Design, welches direkt am Kühlblock befestigt werden kann entwickelt.
Abbildung 4: Zweiter Kühlversuch
Nachdem die Lüfter installiert sind, habe ich den Server in Betrieb genommen und dabei musste ich feststellen, dass der Server nicht richtig hochfährt. Der Server hat nicht in das Betriebssystem gebooted. Leider musste ich feststellen, dass die Grafikkarte kaum gekühlt wird und die Temperatur so hoch ist, dass sie sich quasi deaktiviert hat. Mit einem kleinen Radial-Lüfter, den ich noch rumliegen hatte, konnte ich die Grafikkarte doch noch provisorisch kühlen und den Server zumindest teilweise bereits einrichten.
3.2 Der Versuch mit Radial-Lüftern
Was ist der Unterschied zwischen Radial- und Axial-Lüftern?
Die folgende Grafik erklärt, wie die beiden Kühltypen von Grafikkarten funktioniert.
Abbildung 5: Radial vs Axial. Quelle: ms.codes
Bei den Radial-Lüftern wird die Luft von oben eingesogen und auf die Seite gedrückt. Bei Axial-Lüfter wird die Luft auch von oben eingesogen, aber stattdessen nach unten gedrückt.
Der statische Druck der Noctua-Lüfter (Axial) hat leider nicht gereicht. Daher habe ich auf Aliexpress zwei Axial-Lüfter bestellt, die möglichst gross waren und auf das PCB der Grafikkarte passen.
Das nächste Design ist an bereits bestehenden Lösungen orientiert.
Abbildung 6: Dritter Kühlversuch
Ausgedruckt und mit dem montierten Radial-Lüfter sieht es recht snrpechend aus.
Abbildung 7: Dritter Kühlversuch ausgedruckt
Dieser Versuch war nun einiges besser und ich konnte bereits erste Benchmarks laufen lassen, um die Kühlung zu prüfen.
Bei einem GPU-Benchmarkt mit Unigine wurden 72° als Höchsttemperatur erreicht, wobei die Leistungsaufnahme der Grafikkarte auf 250 Watt reduziert wurde, um die Leistungseffizenz zu erhöhen.
Abbildung 8: Benchmark dritter Kühlversuch
3.3 Weitere Optimierungen
In FreeCAD habe ich nochmal ein neues Design gezeichnet und in TinkerCAD ausgearbeitet. Das Gehäuse soll den Lufterdruck nun weiter erhöhen.
Abbildung 9: Optimierung 1
