We zijn voortdurend bezig met het trainen van taalmodellen voor ons werk. Ons team gebruikt tientallen verschillende videokaarten die voor verschillende taken zijn gekozen: ergens hebben we een krachtig DGX-station nodig, en ergens is een oude speelkaart zoals RTX 2080Ti genoeg. Het kiezen van de optimale GPU voor modeltraining kan zowel de snelheid als de kosteneffectiviteit van het proces aanzienlijk beïnvloeden.
Wat interessant is, is dat er nogal wat artikelen op internet zijn met GPU-vergelijking voor machine learning, maar dat er maar heel weinig zich richten op snelheid voor taalmodeltraining. Meestal worden alleen gevolgtrekkingstests gevonden. Toen de nieuwe H100-chip werd uitgebracht, stond in het rapport van NVidia dat deze tijdens de training tot negen keer sneller was dan de A100, maar voor onze taken was de nieuwe kaart slechts 90% sneller dan de oude. Ter vergelijking, onze cloud providers hadden een 2x prijsverschil tussen deze GPU's, dus het had geen zin om over te stappen op de nieuwe H100 om geld te besparen.
Daarnaast hebben we voor een test een DGX-station genomen, dat bestaat uit 8 A100 grafische kaarten van 80 GB en 10.000 dollar per maand kost. Na de test werd duidelijk dat de prijs/prestatie verhouding van dit station helemaal niet bij ons past en voor dit geld kunnen we 66 x RTX 3090 nemen, wat in totaal veel nuttiger zal zijn.
Onze vertaaltaalmodellen hebben tot 500 miljoen parameters (gemiddeld 100 miljoen tot 300 miljoen). Het is mogelijk dat als we het aantal parameters aanzienlijk verhogen, de prijs/prestatieverhouding van DGX beter zal zijn. Momenteel trainen we geen grote taalmodellen die tussen alle talen in alle variaties tegelijk kunnen vertalen, maar gebruiken we aparte taalmodellen voor elk taalpaar, bijv. Engels-Duits. Elk van dergelijke modellen duurt 120 tot 300 Mb.
Het is vermeldenswaard dat verschillende talen verschillende hoeveelheden gegevens op internet hebben, en dat terwijl. Voor Spaans kun je bijvoorbeeld 500 miljoen zinnen met vertalingen vinden, maar bij het trainen van modellen voor zeldzamere talen zoals Tibetaans, moet je een specifieke GPU kiezen voor machine learning-taken op basis van de beschikbare gegevens. Om een vertaalmodel van Engels naar Spaans te maken, gebruiken we een server met 4 x RTX 4500 en 256GB RAM. Tegelijkertijd kan de Tibetaanse taal worden getraind op RTX 2080 Ti met 16GB RAM, omdat het geen zin heeft om de complexiteit van het neurale netwerk te vergroten en als gevolg daarvan een krachtigere server te nemen met een kleine hoeveelheid gegevens.

Het selecteren van grafische processors en theoretische cijfers
Taalmodeltraining vond plaats op ons interne Data Studio-platform met behulp van het OpenNMT-tf-framework. Deze fase omvatte gegevensvoorbereiding, modeltraining en modelvergelijking met een referentievertaling. Door FP16 te gebruiken in plaats van FP32 tijdens de training konden we de trainingstijd van taalmodellen aanzienlijk verkorten zonder de vertaalkwaliteit te verslechteren, maar niet al onze GPU's ondersteunden dat.
Bij het kiezen van een grafische processor is het standaard om rekening te houden met statistieken als verwerkingskracht (TFLOPS), videogeheugen (VRAM), GPU-benchmarkresultaten, bibliotheek- en raamwerkondersteuning, budget en andere factoren (grootte en vormfactor van de grafische kaart, stroomvereisten, koeling en compatibiliteit met uw systeem). Bij het trainen van modellen voor het genereren van tekst moet u er ook rekening mee houden dat verschillende talen verschillende hoeveelheden bronnen zullen verbruiken. Er wordt bijvoorbeeld 1 byte gebruikt om één teken voor Latijnse talen te coderen, 2 bytes voor Cyrillische talen en 3 bytes voor talen die hiërogliefen bevatten. Begrijpen welke kenmerken uw grafische kaart zal hebben, heeft een aanzienlijke impact op de snelheid van het leerproces.
Bij het trainen van de modellen in termen van de gebruikte GPU's werden de videokaarten op basis van de gebruiksperiode in twee groepen verdeeld: vroege videokaarten, die werden gebruikt om de eerste metingen van de leersnelheid uit te voeren, en kaarten die momenteel in gebruik zijn. De belangrijkste kenmerken van deze grafische kaarten zijn respectievelijk te vinden in Tabel 1 en Tabel 2.
Tabel 1 - Eerder gebruikte grafische processors en hun technische parameters
Number of GPUs | GPU | VRAM, G | CUDA | FP16, TFLOPS | FP32, TFLOPS |
---|---|---|---|---|---|
1 | Tesla V100-SXM2 | HBM2, 16 | 7.0 | 31.33 | 16.31 |
2 | Tesla V100-SXM2 | HBM2, 32 | 7.0 | 31.33 | 15.67 |
1 | RTX 4060 Ti | GDDR6, 8 | 8.9 | 22.06 | 22.06 |
1 | Nvidia A40 | GDDR6, 48 | 8.6 | 37.42 | 37.42 |
2 | Nvidia A40 | GDDR6, 96 | 8.6 | 37.42 | 37.42 |
1 | Nvidia A100 | HBM2, 40 | 8.0 | 77.97 | 19.49 |
1 | Nvidia A100 | HBM2, 80 | 8.0 | 77.97 | 19.49 |
1 | Nvidia RTX A6000 | GDDR6, 48 | 8.6 | 38.71 | 38.71 |
1 | Nvidia A10 | GDDR6, 24 | 8.6 | 31.24 | 31.24 |
8 | Nvidia A10 | GDDR6, 192 | 8.6 | 31.24 | 31.24 |
1 | Nvidia H100 | HBM3, 80 | 9.0 | 204.9 | 51.22 |
Notes
1. Met CUDA groter dan 7,0 zal het gebruik van FP16 een boost in trainingssnelheid geven, afhankelijk van de CUDA-versie en de kenmerken van de grafische kaart zelf.
2. Als de specificatie van de grafische kaart aangeeft dat de prestatieverhouding FP16 tot FP32 groter is dan 1 op 1, zal het gebruik van gemengde precisie gegarandeerd de trainingssnelheid verhogen met de hoeveelheid die in de specificatie is gespecificeerd. Voor Quadro RTX 6000 zal de FP16 TFLOPS-waarde van 32,62 (2:1) de training bijvoorbeeld minstens twee keer versnellen (2,4 keer in de praktijk)
Tabel 2 - Momenteel gebruikte GPU-modellen en hun belangrijkste kenmerken
Number of GPUs in use | GPU | VRAM, G | CUDA | FP16, TFLOPS | FP32, TFLOPS |
---|---|---|---|---|---|
1 | Quadro RTX 6000 | GDDR6, 24 | 7.5 | 32.62 | 16.31 |
2 | Quadro RTX 6000 | GDDR6, 48 | 7.5 | 32.62 | 16.31 |
4 | Quadro RTX 6000 | GDDR6, 96 | 7.5 | 32.62 | 16.31 |
2 | Nvidia TITAN RTX | GDDR6, 48 | 7.5 | 32.62 | 16.31 |
4 | Nvidia RTX A4500 | GDDR6, 96 | 8.6 | 23.65 | 23.65 |
1 | Nvidia GeForce RTX 3090 | GDDR6X, 24 | 8.6 | 35.58 | 35.58 |
1 | Nvidia GeForce RTX 3070 | GDDR6, 8 | 8.6 | 20.31 | 20.31 |
* - waarden voor FP16, TFLOPS en FP32, TFLOPS zijn ontleend aan specificaties per GPU
GPU training en testproces
De modellen werden getraind met behulp van een set van 18 GPU's. Tijdens het proces van neurale netwerktraining gebruikten we talloze taalparen (meer dan honderd talen). De GPU-tests hebben geholpen te identificeren welke hardware het beste presteert voor specifieke taken. Tijdens de training van onze talenparen werden de volgende neurale netwerkparameters als basis genomen
- vocab-grootte = 30 000
- numunits = 768
- lagen = 6
- hoofden = 16
- binnenafmeting = 4 096
Laten we eerst de GPU's karakteriseren die tot de eerste groep behoorden op basis van Tabel 1. De tijd in minuten en seconden die wordt besteed aan het trainen van het model met een snelheid van ongeveer 1.000 stappen en een batchgrootte van meerdere van 100.000 eenheden zal als basis worden genomen voor het vergelijken van de indicatoren.
We benadrukken dat voor de eerste groep de snelheidsmetingen werden uitgevoerd met behulp van de alignment mechanisme en alleen gebruiken KP32. Zonder dit mechanisme te gebruiken kan de leersnelheid op sommige servers veel sneller zijn.
Het uitlijningsmechanisme maakt het mogelijk om substrings in de basis en vertaalde tekst bij elkaar te brengen. Het is nodig om opgemaakte tekst, zoals webpagina's, te vertalen wanneer een subtekenreeks in een zin in een ander lettertype kan worden gemarkeerd en moet worden vertaald met de markering.
Rekening houdend met de bovengenoemde parameters van het neurale netwerk, werd de beste tijd uit de eerste tabel weergegeven door de GPU Nvidia H100 met een leertijd van 22 minuten en de tussenliggende tijd werd getoond door de GPU van hetzelfde merk GeForce RTX 4060 Ti met een leertijd van 72 minuten en de laatste plaats werd ingenomen door de GPU Tesla V100-SXM 2 met een leertijd van 140 minuten.
Er waren ook acht Nvidia A10-kaarten in de GPU-test met een leercurve van 20 minuten en 28 seconden, twee Nvidia A40-kaarten met een tijd van 56 minuten en twee Tesla V100-SXM-kaarten die klokten op 86 minuten. Gelijktijdige toepassing van meerdere kaarten uit dezelfde serie GPU's kan het trainingsproces van de modellen versnellen en vrijwel dezelfde tijd laten zien met GPU's met hogere capaciteiten, maar een dergelijke techniek is mogelijk niet financieel en procedureel rationeel genoeg. De resultaten van leersnelheidsmetingen zijn te zien in tabel nummer 3.
Tabel 3 - Trainingstijdmetingen op de eerder gebruikte grafische kaarten
Using the alignment mechanism | |||
---|---|---|---|
Effective batch size = 100 000 | |||
FP 32 | |||
Number of GPUs in use | GPU | Approximate speed (min. sec), 1,000 steps | Batch size in use |
8 | Nvidia A10 | 20,28 | 6 250 |
1 | Nvidia H100 | 22 | 25 000 |
1 | A100 (80 Gb) | 40 | 25 000 |
1 | A100 (40 Gb) | 56 | 15 000 |
2 | Nvidia A40 | 56 | 12 500 |
1 | RTX A6000 | 68,25 | 12 500 |
1 | GeForce RTX 4060 Ti | 72 | 4 167 |
1 | Nvidia A40 | 82,08 | 12 500 |
2 | Tesla V100-SXM | 86 | 4 167 |
1 | Nvidia A10 | 104,50 | 5 000 |
1 | Tesla V100-SXM2 | 140 | 4 167 |
Laten we vervolgens een vergelijkende analyse uitvoeren van de grafische gaspedalen die momenteel in gebruik zijn (Tabel 2). Voor deze groep grafische processors werden snelheidsmetingen uitgevoerd met behulp van de alignment mechanisme, evenals het gebruik van FP16 en FP32. Snelheidsmetingen, inclusief dit mechanisme en gemengde precisie, worden hieronder weergegeven in respectievelijk Tabellen 4 en 5.
Dus, na het meten van de snelheid van GPU's uit deze tabel, kunnen we zeggen dat de eerste plaats werd ingenomen door de GPU uit de RTX A4500-serie met een trainingstijd van 31 minuten, maar er moet worden benadrukt dat een dergelijke snelheid van trainingsmodellen werd verkregen door het verhogen van het aantal eenheden van de gebruikte GPU tot 4. Dit feit buiten beschouwing gelaten, zal de trainingssnelheid van de eerder genoemde GPU veel hoger zijn, waardoor deze op de voorlaatste plaats in de finaletafel zal komen te staan.
De Quadro RTX 6000 serie GPU met een leertijd van 47 minuten staat op de tweede plaats. Opgemerkt moet worden dat een dergelijke trainingssnelheid omgekeerd evenredig wordt bepaald door het aantal eenheden van de gebruikte processor, dat gelijk is aan vier. Het gebruik van slechts één dergelijke GPU zou een snelheidsverlies van ongeveer 3,2 keer opleveren en zou bijgevolg ongeveer 153 minuten duren en op de laatste plaats plaatsen.
De derde lijn werd genomen door de GPU uit de TITAN RTX-serie met een tijd van 75 minuten en 85 seconden. Deze leersnelheidsscore is te danken aan het gebruik van 2 processors, waardoor de trainingstijd van het model werd verkort.
De onbetwistbare leider in termen van trainingssnelheid in het aantal van één eenheid zal zeker de GeForce RTX 3090-serie GPU zijn met een tijd van 78 minuten en 26 seconden. Het verhogen van het aantal eenheden van deze GPU zal de trainingssnelheid van het model versnellen, waardoor alle bovengenoemde GPU-modellen duidelijk zullen worden ingehaald. De gegevens over modeltrainingstijdmetingen zijn te zien in Tabel 4.
Tabel 4 - Vergelijkende analyse van de trainingssnelheid van taalmodellen op eerder gebruikte GPU's
Using the alignment mechanism | |||
---|---|---|---|
Effective batch size = 100 000 | |||
FP 32 | |||
Number of GPUs in use | GPU | Approximate speed (min. sec), 1,000 steps | Batch size in use |
4 | Nvidia RTX A4500 | 31 | 5 000 |
4 | Quadro RTX 6000 | 47 | 6 250 |
2 | Nvidia TITAN RTX | 75,85 | 6 250 |
1 | GeForce RTX 3090 | 78,26 | 6 250 |
2 | Quadro RTX 6000 | 88 | 6 250 |
1 | GeForce RTX 3070 | 104,17 | 2 000 |
1 | Quadro RTX 6000 | 153 | 6 250 |
De volgende trainingssnelheidsmetingen werden uitgevoerd met behulp van FP16. Vergeleken met FP32 maakt halve precisie het mogelijk de hoeveelheid geheugen die tijdens modeltraining wordt verbruikt te verminderen en de berekeningen op de GPU te versnellen. De nauwkeurigheid van de representatie zal lager zijn dan bij gebruik van FP32.
Als we de trainingstijd meten van modellen die FP32 uit de vorige tabel gebruiken, kunnen we zeggen dat de trainingstijd van het neurale netwerk bijna twee keer is verkort. Op basis van de prestatiemeetresultaten kunnen we uit de machine learning GPU-benchmarks in Tabel 4 waarnemen dat de posities van GPU's grotendeels onveranderd bleven. De kaart uit de Quadro RTX 6000-serie schoof op van de vijfde positie naar de zesde en versloeg de GeForce RTX 3090 GPU met 96 seconden. De definitieve cijfers worden weergegeven in Tabel 5.
Tabel 5 - Vergelijkende analyse van de trainingssnelheid van taalmodellen op eerder gebruikte GPU's
Using the alignment mechanism | |||
---|---|---|---|
Effective batch size = 100 000 | |||
FP 16 | |||
Number of GPUs in use | GPU | Approximate speed (min. sec), 1,000 steps | Batch size in use |
4 | Nvidia RTX A4500 | 15,81 | 10 000 |
4 | Quadro RTX 6000 | 20,34 | 12 500 |
2 | Nvidia TITAN RTX | 32,68 | 6 250 |
2 | Quadro RTX 6000 | 37,93 | 10 000 |
1 | GeForce RTX 3090 | 38,89 | 10 000 |
1 | GeForce RTX 3070 | 48,51 | 2 500 |
1 | Quadro RTX 6000 | 52,56 | 10 000 |