När AI-delarna växte räckte det inte längre att bara skriva kod. Jag fick bygga maskiner också.
Språkmodellen och röstproduktionen ställde helt andra krav än en vanlig MP3-stream. Jag byggde därför en separat kraftigare maskin för de tunga delarna: 12 kärnor/24 trådar, 32 GB RAM, snabb NVMe och ett grafikkort med 10 GB videominne. Nätaggregatet dimensionerades rejält för att slippa samma problem som jag tidigare sett när ett kraftigt grafikkort drog mer än en äldre maskin tålde.
Jag hade dessutom flera äldre grafikkort att testa med, inklusive ett med 11 GB videominne och två mindre kort. Det ledde till många funderingar kring om flera GPU:er går att slå ihop, om mer VRAM är viktigare än nyare arkitektur och vilken del som egentligen använder GPU.
Trial and error blev ganska konkret. En finjustering kunde gå direkt i minnesstopp trots att vanlig inferens fungerade. Ett kort med lite mer VRAM kunde på papperet hjälpa men vara mycket långsammare. Flera kort kan hjälpa om programmet är skrivet för parallellism, men videominne går inte automatiskt ihop till en enda stor pool.
Det var en viktig arkitekturell slutsats: jag ska inte designa radiosystemet runt antagandet att hårdvara löser dålig pipeline. Om text och röst kör seriellt och startas för sent kan ett snabbare kort fortfarande ge sen radio.
Hårdvarubygget blev också ett kyl- och strömprojekt
När ett kraftigt GPU-kort kör tung inferens räcker det inte att komponenten passar elektriskt. Luftflöde, fläktriktning, hubbar, headers och nätaggregat blir en del av stabiliteten. Jag fick lägga tid på hur chassifläktar matar och tömmer lådan och hur flera hubbar kan kopplas utan att överbelasta en header.
Jag har också fått se vad som händer när ett äldre nätaggregat träffar skyddet under en GPU-spik. Det är en nyttig påminnelse om att “programmet kraschade” ibland betyder “strömförsörjningen gav upp”.
Hårdvaruinköpen blev en serie praktiska kompromisser
Jag ville ha en maskin som kunde köra både språkmodell och tung röstproduktion lokalt. Det innebar att CPU, RAM, lagring, GPU och nätaggregat behövde balanseras. Jag kunde lägga alla pengar på GPU och ändå få en dålig helhet om lagringen eller kylningen blev flaskhals.
Jag valde därför en 12-kärnig processor, 32 GB arbetsminne och snabb lokal lagring som bas. Ett kraftigt 10 GB-kort fick göra den tunga GPU-delen. Jag testade samtidigt äldre kort med olika mängd videominne för att se om mer VRAM kunde väga upp lägre råprestanda.
Det gav flera praktiska lärdomar. Finjustering kan behöva mycket mer minne än inferens. Ett extra gigabyte VRAM är inte automatiskt bättre om kortet i övrigt är mycket långsammare. Flera kort kan bara hjälpa om programmet faktiskt kan dela arbetet. Och ett moderkort med många platser betyder inte att åtta GPU:er magiskt blir en enda stor accelerator.
Jag fick även bygga om luftflödet, lägga till fläkthubbar och se till att nätaggregatet klarar transienterna. Hårdvaran blev alltså en del av mjukvaruprojektet.