AI & GPU
How to Build Powerful Gpu Cluster

Een krachtige GPU-cluster bouwen: een uitgebreide gids

Inleiding: Wat is een GPU-cluster?

Een GPU-cluster is een groep computers waarbij elke node is uitgerust met één of meer grafische verwerkingseenheden (GPU's). Door gebruik te maken van de kracht van meerdere GPU's die samen werken, bieden deze clusters versnelde rekenkracht voor specifieke computationele taken zoals beeld- en videobewerking, het trainen van neurale netwerken en het uitvoeren van andere machine learning-algoritmen.

GPU-clusters bieden verschillende belangrijke voordelen:

  • Hoge beschikbaarheid: Als één node in het cluster uitvalt, kan de werkbelasting automatisch worden omgeleid naar andere beschikbare nodes om de uptime te behouden en verstoring te voorkomen.
  • Hoge prestaties: Door werklasten te verdelen over meerdere parallelle GPU-nodes, kan een cluster veel meer rekenkracht leveren dan een enkele machine voor veeleisende taken.
  • Lastbalancering: Binnenkomende taken worden gelijkmatig verdeeld over de GPU-nodes in het cluster, waardoor het efficiënt om kan gaan met een groot volume aan verzoeken tegelijkertijd.

Meer informatie over het gebruik van GPU's voor machine learning vindt u in onze diepgaande gidsen over:

In dit artikel behandelen we:

  • Veelvoorkomende toepassingen van GPU-clusters
  • Een stapsgewijze gids voor het bouwen van uw eigen GPU-cluster
  • Belangrijke hardware-overwegingen en -opties
  • Software-implementatie voor GPU-clusters
  • Vereenvoudigen van GPU-clusterbeheer met tools als Run:AI

GPU-cluster toepassingen

Opschalen van deep learning

Een van de populairste toepassingen van GPU-clusters is het trainen van grote deep learning-modellen over meerdere nodes. De geaggregeerde rekenkracht stelt u in staat om met grotere datasets en complexere modellen te werken.Datasets en meer complexe neurale netwerkarchitecturen. Enkele voorbeelden zijn:

  • Computer Vision: Modellen zoals ResNet en Inception voor beeldclassificatie, objectdetectie, enz. hebben vaak honderden convolutielagen die intensieve matrixberekeningen vereisen. GPU-clusters kunnen de training van deze modellen op grote beeld-/videodatasets aanzienlijk versnellen.

  • Natuurlijke Taalverwerking (NLP): Het trainen van grote taalmodellen zoals BERT en GPT-3 voor taken zoals vertaling, tekstgeneratie en conversationele AI vereist het verwerken van enorme tekstcorpora. GPU-clusters stellen je in staat om de trainingsgegevens te partitioneren en de modeltraining te parallelliseren.

Edge AI-inferentie

Naast training in datacenters kunnen GPU-clusters ook geografisch worden verdeeld over edge-computingapparaten voor low-latency AI-inferentie. Door de GPU's van meerdere edge-nodes samen te voegen tot één logisch cluster, kun je real-time voorspellingen genereren op de edge-apparaten zonder de retourlatentie van het verzenden van gegevens naar de cloud of een extern datacenter.

Dit is vooral nuttig voor toepassingen zoals autonome voertuigen, industriële robots en video-analyse, waar snelle reactietijden cruciaal zijn. Voor een diepere duik, zie onze Edge AI-gids (opens in a new tab).

Hoe bouw je een GPU-versneld cluster

Volg deze stappen om een GPU-cluster samen te stellen voor je on-premises datacenter of serverruimte:

Stap 1: Kies de juiste hardware

De fundamentele bouwsteen van een GPU-cluster is de individuele node - een fysieke server met één of meer GPU's die rekenkundige werkbelastingen kan uitvoeren. Wanneer je de configuratie voor elke node specificeert, overweeg dan:

  • CPU: Naast de GPU's heeft elke node een CPU nodig, maar elke moderne processor zal voor de meeste use cases volstaan.
  • RAM: Meer systeemgeheugen is altijd beter, maar plan op zijn minst voor 24 GB DDR3-RAM per node.
  • Netwerkinterfaces: Elke node moet minimaal twee netwerkpoorten hebben - één voor clusterverkeer en één .Hier is de Nederlandse vertaling van het bestand:

Gebruik Infiniband of 100 GbE voor snelle GPU-naar-GPU-communicatie.

  • Moederbord: Zorg ervoor dat het moederbord genoeg PCI Express-slots heeft voor de GPU's en netwerkkaarten. Meestal heb je x16-slots nodig voor GPU's en x8-slots voor Infiniband/Ethernet.
  • Voeding: Datacenter-GPU's hebben een aanzienlijk stroomverbruik. Dimensioneer de voeding om het totale stroomverbruik van alle componenten onder maximale belasting te ondersteunen.
  • Opslag: SSD's zijn ideaal, maar SATA-schijven kunnen ook voldoen, afhankelijk van uw I/O-vereisten.
  • GPU-vormfactor: GPU's komen in verschillende vormen en maten. Gangbare opties zijn full-height/full-length, low profile, actief gekoeld, passief gekoeld en vloeistofgekoeld. Kies een vormfactor dat past bij uw serverkast en koelingsconstraints.

Stap 2: Plan voor vermogen, koeling en rackruimte

Afhankelijk van de schaal, kan een GPU-cluster een speciale datacenterkamer of co-locatieruimte vereisen. Belangrijke overwegingen zijn:

  • Rackruimte: Zorg ervoor dat u voldoende diepte, hoogte en breedte heeft in uw serverracks om de nodes fysiek te kunnen accommoderen, op basis van de afmetingen van uw gekozen behuizing en GPU-vormfactor.

  • Stroomverdeling: Bereken zorgvuldig het totale stroomverbruik van het cluster en voorzie voldoende elektrische circuits, PDU's en UPS'en. Vergeet niet om rekening te houden met koelingsapparatuur en redundantie.

  • Koelcapaciteit: GPU's genereren veel warmte. Controleer of uw koelsysteem de thermische output van het cluster aankan. Vloeistofkoeling kan noodzakelijk zijn voor de hoogste dichtheidsimplementaties.

  • Netwerkkabels: Naast stroom heb je ook hoogsnelheidsnetwerkkoppelingen tussen nodes en naar de buitenwereld nodig. Raadpleeg de richtlijnen van uw switchleverancier voor kabeltypen, lengtes en installatiepraktijken.

Stap 3: Assembleer en bekabel het cluster

Met de faciliteit voorbereid en de hardware aangeschaft, is het tijd om het cluster fysiek op te bouwen. Een typische architectuur bestaat uit:

  • Hoofdnodes: Eén of meer servers die.Hier is de Nederlandse vertaling van het bestand:

  • Hoofd-node: De hoofd-node is verantwoordelijk voor het beheren van het cluster en het hosten van gedeelde services zoals opslag en planning. De hoofd-node is het hoofdcontactpunt voor externe gebruiker/API-verzoeken.

  • Werkknopen: De meerderheid van de servers die daadwerkelijk de GPU-werkbelastingen uitvoeren. Werkknopen ontvangen taken van de hoofd-node, voeren ze uit en sturen de resultaten terug.

Monteer de servers fysiek in de rekken, sluit voedingskabels aan op de PDU's en bevestig netwerkkabels tussen de knopen en de kernschakelaar. Zorg ervoor dat de luchtstroming en kabelbeheer goed zijn.

Stap 4: Implementeer de software stack

Met de hardware op zijn plaats is de volgende stap het installeren van de benodigde software-onderdelen:

  • Besturingssysteem: Gebruik een op servers geoptimaliseerde Linux-distributie zoals CentOS, RHEL of Ubuntu Server. Configureer het OS op elke knoop, waarbij u erop let dat hostnamen, IP-adressen en andere instellingen over het cluster zijn afgestemd.

  • GPU-stuurprogramma's: Installeer de juiste GPU-stuurprogramma's van de hardwareleverancier (bijv. NVIDIA CUDA Toolkit) op elke knoop.

  • Container runtime: Om portabiliteit en schaalbaarheid te vergemakkelijken, gebruiken de meeste moderne clusters containers om werkbelastingen te verpakken en te implementeren. Stel een container runtime zoals Docker of Singularity in op elke knoop.

  • Orchestratieplatform: Een orchestratiesysteem wordt gebruikt om het cluster te beheren en werk over de knopen te plannen. Populaire opties zijn Kubernetes voor cloud-native werkbelastingen en Slurm voor traditionele HPC.

  • Monitoring en logboekregistratie: Implementeer een gecentraliseerd systeem voor het verzamelen van logboeken en metrische gegevens van alle knopen. Open source-tools zoals Prometheus, Grafana en de ELK-stack zijn veel gebruikte keuzes.

  • Data science tools: Installeer vooraf de vereiste machine learning-frameworks, -bibliotheken en -tools voor uw werkbelastingen. Dit kan PyTorch, TensorFlow, Python, Jupyter, etc. omvatten.

GPU-cluster hardwareopties

Datacenter-GPU's

De krachtigste GPU's voor grootschalige clusters zijn NVIDIA's datacenter-accelerators:

  • NVIDIA A100: NVIDIA's vlaggenschip-GPU gebaseerd op de Ampere-architectuur. Biedt. rs tot 312 TFLOPS aan AI-prestaties, 40 GB HBM2-geheugen en 600 GB/s interconnect-bandbreedte. Ondersteunt Multi-Instance GPU (MIG) om in zeven geïsoleerde eenheden te partitioneren.

  • NVIDIA V100: Op Volta gebaseerde GPU met 640 Tensor Cores en 32 GB HBM2-geheugen. Levert tot 125 TFLOPS en 300 GB/s NVLink-bandbreedte.

  • NVIDIA T4: Low-profile inferentieversneller met 320 Turing Tensor Cores, 16 GB GDDR6-geheugen en 260 TOPS INT8-prestaties. Geoptimaliseerd voor edge computing-nodes.

Hier is een uitgebreide praktische gids van 2000 woorden over waarom multi-GPU-training belangrijk is en hoe u effectief parallellisatietechnieken kunt benutten:

Waarom Multi-GPU-training belangrijk is voor grootschalige AI-modellen

Het trainen van state-of-the-art AI-modellen zoals diepe neurale netwerken met miljarden parameters is extreem rekenintensief. Een enkele GPU, zelfs een high-end exemplaar, heeft vaak onvoldoende geheugen en rekenkracht om deze enorme modellen in een redelijke tijd te trainen. Hier komt multi-GPU-training om de hoek kijken. Door het vermogen van meerdere GPU's die parallel werken in te zetten, kunnen we de trainingstijd aanzienlijk verkorten en modellen van ongekende schaal en complexiteit aanpakken.

Stel je voor dat je GPT-3, het beroemde taalmodel met 175 miljard parameters, op één GPU zou willen trainen. Het zou maanden, zo niet jaren duren! Maar door het model en de gegevens over bijvoorbeeld 1024 A100-GPU's te verdelen, kan de training in een paar weken worden voltooid. Dit is de kracht van multi-GPU-training - het maakt voorheen onhaalbare problemen haalbaar.

Enkele belangrijke voordelen van multi-GPU-training zijn:

  1. Snellere trainingstijden - Het verdelen van de rekenkundige werkbelasting maakt massale parallellisatie mogelijk, waardoor de trainingstijd kan worden teruggebracht van maanden naar dagen of weken. Deze kortere iteratiecyclus versnelt onderzoek en productie.

  2. Mogelijkheid om grotere modellen te trainen - Grotere modellen presteren meestal beter, maar vereisen enorme hoeveelheden geheugen en rekenkracht. Het verdelen over meerdere GPU's maakt het mogelijk om modellen met miljarden parameters te trainen, iets wat nooit mogelijk zou zijn geweest.3. Schaalbaarheid - Door meer GPU's toe te voegen, kunt u zelfs grotere modellen trainen of de trainingstijd verder verminderen. Multi-GPU-training is een zeer schaalbare aanpak.

  3. Kostenefficiëntie - Hoewel het aanschaffen van meerdere GPU's hogere initiële kosten met zich meebrengt, maakt de vermindering van de trainingstijd het kosteneffectiever dan het gebruik van één GPU gedurende een veel langere tijd. U krijgt sneller resultaten, terwijl u dure rekenbronnen minder lang bezet houdt.

Samengevat is multi-GPU-training essentieel voor het verleggen van de grenzen van AI, omdat het onderzoekers in staat stelt om op een schaalbare en kosteneffectieve manier enorme state-of-the-art-modellen praktisch te trainen. Het is een absolute gamechanger.

Parallellisatietechnieken voor Multi-GPU-training

Om meerdere GPU's te benutten, moeten we het werk op een manier verdelen die parallelle verwerking mogelijk maakt. Er worden verschillende parallellisatietechnieken gebruikt in multi-GPU-training. Elk heeft zijn eigen afwegingen en is geschikt voor verschillende scenario's. Laten we de drie belangrijkste bespreken - data-parallellisme, model-parallellisme en pipeline-parallellisme.

Data-parallellisme

Data-parallellisme is de eenvoudigste en meest voorkomende parallellisatietechniek. Het idee is om elke GPU te laten werken aan een ander deel van de trainingsgegevens, terwijl de modelparameters worden gedeeld.

Zo werkt het:

  1. Kopieer het model op elke GPU
  2. Verdeel een trainingsbatch gelijkmatig over de GPU's
  3. Elke GPU berekent de forward- en backwardpass op zijn eigen gegevenssubset
  4. De gradiënten van elke GPU worden gemiddeld
  5. Elke GPU werkt zijn eigen kopie van de modelgewichten bij met behulp van de gemiddelde gradiënten

In essentie voert elke GPU onafhankelijk zijn eigen forward- en backwardpass uit op een subset van de gegevens. De gradiënten worden vervolgens gecommuniceerd tussen de GPU's, gemiddeld en gebruikt om de gedeelde modelparameters op elke GPU bij te werken. Frameworks als PyTorch en TensorFlow bieden eenvoudig te gebruiken primitieven voor gradiëntgemiddeling en synchronisatie tussen GPU's.

Data-parallellisme is eenvoudig te implementeren en werkt goed wanneer.Hier is de Nederlandse vertaling van het bestand:

Model Parallelisme

Model parallelisme neemt de tegenovergestelde aanpak van data parallelisme. In plaats van de gegevens op te delen, wordt het model zelf opgedeeld over meerdere GPU's. Elke GPU houdt een ander deel van het model bij.

Een veel voorkomende manier om het model op te delen is om verschillende lagen op verschillende GPU's te plaatsen. Bijvoorbeeld, met een neuraal netwerk van 24 lagen en 4 GPU's, kan elke GPU 6 lagen bevatten. De voorwaartse doorgang zou het doorgeven van activaties van de ene GPU naar de volgende omvatten, terwijl de gegevens door de lagen stromen. De achterwaartse doorgang gebeurt in omgekeerde volgorde.

Model parallelisme is essentieel wanneer de modelstatus niet in het geheugen van één GPU past. Door op te delen over GPU's kunnen we schalen naar grotere modellen. Het nadeel is dat model parallelisme meer communicatie tussen GPU's vereist, aangezien activaties en gradiënten van de ene GPU naar de andere stromen. Deze communicatie-overhead kan de doorvoer verminderen.

Een andere uitdaging met model parallelisme is dat het wijzigingen in de modelcode zelf vereist om te werken met opgedeelde lagen. Frameworks onderzoeken manieren om dit te automatiseren.

Pipeline Parallelisme

Pipeline parallelisme is een geavanceerder techniek die data parallelisme en model parallelisme combineert. Met pipeline parallelisme delen we zowel het model als de gegevens over GPU's.

Het model is verdeeld in fasen, waarvan elke fase aan een andere GPU is toegewezen. Elke fase verwerkt op elk gegeven moment een andere mini-batch aan gegevens. De gegevens stromen door de pijplijn, waarbij elke GPU aan zijn fase werkt en tussentijdse activaties doorgeeft aan de volgende fase.

Hier is een voorbeeld van een pijplijn met 4 GPU's en 4 mini-batches:

TijdstapGPU 1GPU 2GPU 3GPU 4
1Batch 1---
2Batch 2B.Batch 1--
3Batch 3Batch 2Batch 1-
4Batch 4Batch 3Batch 2Batch 1

Het belangrijkste voordeel van pipeline-parallelisme is dat het alle GPU's bezet houdt. Terwijl één GPU bezig is met de forward pass voor een mini-batch, kan een andere GPU werken aan de backward pass van de vorige mini-batch. Dit vermindert de inactieve tijd.

De belangrijkste uitdaging bij pipeline-parallelisme is het in evenwicht brengen van de werkbelasting over de verschillende stadia. Als één stadium veel langer duurt dan de anderen, kan het de hele pipeline vertragen. Zorgvuldige opdeling van het model om de werkbelasting in evenwicht te brengen, is cruciaal voor de prestaties.

Pipeline-parallelisme introduceert ook "bubble overhead" omdat we moeten wachten tot de pipeline is gevuld aan het begin en leegloopt aan het einde van elke batch. Grotere batchgroottes en minder stadia helpen deze overhead te verminderen.

Praktische aanbevelingen voor efficiënte multi-GPU-training

Hier zijn enkele best practices om in gedachten te houden bij het doen van multi-GPU-training:

  1. Gebruik data-parallelisme indien mogelijk - Data-parallelisme is het eenvoudigst te implementeren en heeft de minste overhead. Als uw model op één GPU past, geeft u de voorkeur aan data-parallelisme.

  2. Gebruik model-parallelisme indien nodig - Als uw model te groot is voor het geheugen van één GPU, gebruik dan model-parallelisme om op te schalen naar grotere modellen. Implementeer model-parallelisme op het hoogst mogelijke niveau om de communicatie-overhead te minimaliseren.

  3. Gebruik pipeline-parallelisme voor maximale prestaties - Pipeline-parallelisme is het meest complex, maar kan de beste prestaties leveren door de GPU's maximaal bezet te houden. Zorg voor een zorgvuldige balans van de werkbelasting over de pipelinestadia.

  4. Overlap berekening en communicatie - Technieken zoals gradient accumulatie stellen u in staat om berekening en communicatie te overlappen door de volgende set gradiënten te berekenen terwijl de vorige set wordt gesynchroniseerd.

  5. Gebruik gemengde precisie - Gemengde precisie-training gebruikt lagere precisie (zoals FP16) voor berekeningen en hogere precisie (FP32) voor accumulatie. Dit vermindert het geheugengebruik en de rekentijd met minimale impact op de nauwkeurigheid. Veel GPU's hebben speciale hardware-ondersteuning voor gemengde precisie.Speciale hardware voor snelle FP16-berekening.

  6. Stem de batchgrootte af - Grotere batchgroottes hebben een betere rekenintensiteit, maar kunnen de modelkwaliteit verslechteren. Experimenteer om het juiste evenwicht voor uw model te vinden. Gradient accumulation kan helpen om grotere effectieve batchgroottes te gebruiken.

  7. Gebruik snelle interconnecties - NVLink en InfiniBand bieden veel meer bandbreedte dan PCIe. Het gebruik hiervan voor inter-GPU-communicatie kan de schaalbaarheid met meerdere GPU's aanzienlijk verbeteren.

  8. Profileer en optimaliseer uw code - Gebruik profileringtools om communicatiebottlenecks te identificeren en uw code te optimaliseren voor maximale doorvoer. Het overlappen van berekeningen en communicatie is essentieel.

  9. Houd rekening met de kosten - Meer GPU's kunnen de training versnellen, maar kosten ook meer. Vind het juiste evenwicht voor uw budget en planning. Onthoud dat het doel is om de kosten te minimaliseren om het gewenste resultaat te bereiken, niet om de hardwareutilisatie te maximaliseren.

  10. Begin eenvoudig en schaal op - Begin met dataparallellisme op een paar GPU's en schaal geleidelijk op naar meer GPU's en meer geavanceerde parallellismemethoden indien nodig. Voortijdige optimalisatie kan uw code onnodig complex maken.

Samengevat is training met meerdere GPU's een krachtig hulpmiddel voor het versnellen van AI-workloads. Door zorgvuldig parallellismemethoden toe te passen en best practices te volgen, kunt u state-of-the-art modellen trainen in een fractie van de tijd die het zou kosten op één GPU. De sleutel is om eenvoudig te beginnen, onophoudelijk te profileren en te optimaliseren, en de complexiteit op te schalen naarmate dat nodig is om uw prestatiedoelen te bereiken. Veel succes met het trainen!

GPU-servers en -apparaten

Voor kant-en-klare GPU-infrastructuur bieden verschillende leveranciers voorgeïntegreerde servers en apparaten:

  • NVIDIA DGX A100: Een geïntegreerd systeem met 8x NVIDIA A100 GPU's, 128 AMD EPYC CPU-cores, 320 GB GPU-geheugen, 15 TB NVMe-opslag en 8 Mellanox ConnectX-6 200Gb/s-netwerkinterfaces. Levert 5 PFLOPS aan AI-prestaties.

  • NVIDIA DGX Station A100: Compacte desktopwerkstation met 4x NVIDIA A100 GPU's, 64 AMD EPYC CPU-cores, 128 GB GPU-geheugen en 7,68 TB NVMe-opslag. ge. Biedt 2,5 PFLOPS aan AI-prestaties.

  • Lambda Hyperplane: 4U-server die ondersteuning biedt voor maximaal 8x NVIDIA A100-GPU's met 160 GB GPU-geheugen, 8 TB systeemgeheugen en 256 TB NVMe-opslag. Beschikbaar met Intel Xeon-, AMD EPYC- of Ampere Altra-CPU's.

GPU-clusterbeheer vereenvoudigen met Run:AI

Het bouwen en beheren van een GPU-cluster is complex. Tools zoals Run:AI kunnen helpen bij het vereenvoudigen van GPU-resourcetoewijzing en -orchestratie. Belangrijke functies zijn:

  • Pooling: Alle GPU's in het cluster samenvoegen tot één gedeelde pool die dynamisch kan worden toegewezen aan verschillende workloads naar behoefte.

  • Scheduling: Geavanceerde schedulingalgoritmen om GPU-benutting te optimaliseren en eerlijke toegang voor alle gebruikers en taken te garanderen.

  • Zichtbaarheid: Gedetailleerde bewaking en rapportage over GPU-gebruik, prestaties en knelpunten in het hele cluster.

  • Workflows: Integratie met populaire data science-tools en ML-pijplijnen om end-to-end modelontwikkeling te stroomlijnen.

Ga voor meer informatie over het GPU-orchestratieplatform van Run:AI naar onze website (opens in a new tab).

Conclusie

GPU-clusters zijn essentiële infrastructuur voor organisaties die op zoek zijn naar het versnellen van rekenintensieve AI/ML-workloads en het opschalen van model training en inferentie-capaciteit. Door de belangrijkste overwegingen rond hardwareselectie, datacentrumplanning, softwareimplementatie en clusterbeheer te begrijpen, kunt u krachtige GPU-clusters ontwerpen en bouwen om uw AI-initiatieven aan te drijven.

Hoewel het in elkaar zetten van een GPU-cluster vanaf nul aanzienlijke expertise en inspanning vereist, kunnen tools zoals Run:AI veel van de complexiteit wegnemen en u helpen het meeste uit uw GPU-investering te halen. Om te zien hoe Run:AI het eenvoudig maakt om GPU-clusters voor AI-workloads op te bouwen en te beheren, plan een demo (opens in a new tab) in met ons team.

.