Nieustannie szkolimy modele językowe do naszej pracy. Nasz zespół wykorzystuje dziesiątki różnych kart wideo wybranych do różnych zadań: gdzieś potrzebujemy potężnej stacji DGX, a gdzieś starą kartę do gier, taką jak RTX 2080Ti, wystarczy. Wybór optymalnego procesora graficznego do treningu modelowego może znacząco wpłynąć zarówno na szybkość, jak i opłacalność procesu.
Interesujące jest to, że istnieje sporo artykułów w Internecie z porównaniem GPU do uczenia maszynowego, ale bardzo niewiele skupia się na szybkości treningu modeli językowych. Znajdują się tu głównie tylko testy wnioskowania. Kiedy wypuszczono nowy chip H100, w raporcie NVidii stwierdzono, że na treningu był nawet dziewięć razy szybszy niż A100, ale do naszych zadań nowa karta była tylko o 90% szybsza od starej. Dla porównania, nasi dostawcy usług w chmurze mieli 2-krotną różnicę cen między tymi procesorami graficznymi, więc nie było sensu przechodzić na nowy H100, aby zaoszczędzić pieniądze.
Oprócz tego wzięliśmy na test stację DGX, która składa się z 8 kart graficznych A100 80 GB i kosztuje 10 tysięcy dolarów miesięcznie. Po teście stało się jasne, że stosunek ceny do wydajności tej stacji w ogóle nam nie odpowiada i za te pieniądze możemy wziąć 66 x RTX 3090, co w sumie będzie znacznie bardziej przydatne.
Nasze modele języków tłumaczeniowych mają do 500 milionów parametrów (średnio od 100 milionów do 300 milionów). Możliwe, że jeśli znacząco zwiększymy liczbę parametrów, stosunek ceny do wydajności DGX będzie lepszy. Obecnie nie trenujemy dużych modeli językowych, które mogą tłumaczyć między wszystkimi językami we wszystkich odmianach jednocześnie, ale używamy oddzielnych modeli językowych dla każdej pary językowej, np. Angielsko - niemieckiej. Każdy z takich modeli zajmuje od 120 do 300 Mb.
Warto zauważyć, że różne języki mają różną ilość danych w Internecie i podczas. Na przykład w przypadku języka hiszpańskiego można znaleźć 500 milionów zdań z tłumaczeniami, ale podczas szkolenia modeli dla rzadszych języków, takich jak tybetański, musisz wybrać konkretny procesor graficzny do zadań uczenia maszynowego w oparciu o dostępne dane. Aby stworzyć model tłumaczenia z angielskiego na hiszpański, używamy serwera z 4 x RTX 4500 i 256 GB RAM. Jednocześnie język tybetański można trenować na RTX 2080 Ti z 16 GB pamięci RAM, ponieważ nie ma sensu zwiększać złożoności sieci neuronowej, a w rezultacie przyjmować potężniejszy serwer z niewielką ilością danych.

Wybór procesorów graficznych i figur teoretycznych
Szkolenie z modelu językowego odbyło się na naszej wewnętrznej platformie Data Studio z wykorzystaniem frameworka OpenNMT-tf. Faza ta obejmowała przygotowanie danych, szkolenie modeli i porównanie modeli z tłumaczeniem referencyjnym. Korzystanie z 16 PR zamiast 32 PR podczas szkolenia pozwoliło nam znacznie skrócić czas szkolenia modeli językowych bez pogorszenia jakości tłumaczenia, ale nie wszystkie nasze procesory graficzne to wspierały.
Wybierając procesor graficzny, standardem jest uwzględnienie takich wskaźników, jak moc obliczeniowa (TFLOPS), pamięć wideo (VRAM), wyniki testów porównawczych GPU, obsługa bibliotek i frameworków, budżet i inne czynniki (rozmiar i kształt karty graficznej, wymagania dotyczące mocy, chłodzenie i kompatybilność z systemem). Trenując modele generowania tekstu, należy również pamiętać, że różne języki będą zużywać różne ilości zasobów. Na przykład 1 bajt jest używany do kodowania jednego znaku dla języków łacińskich, 2 bajty dla języków cyrylicy i 3 bajty dla języków zawierających hieroglify. Zrozumienie, jakie cechy będzie miała Twoja karta graficzna, ma istotny wpływ na szybkość procesu uczenia się.
Podczas szkolenia modeli pod kątem stosowanych GPU karty wideo podzielono na dwie grupy ze względu na okres użytkowania: wczesne karty wideo, które służyły do dokonywania pierwszych pomiarów szybkości uczenia się oraz karty aktualnie używane. Główne cechy tych kart graficznych można znaleźć odpowiednio w tabeli 1 i tabeli 2.
Tabela 1 - Wcześniej używane procesory graficzne i ich parametry techniczne
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 |
Uwagi
1. Przy CUDA większym niż 7,0 użycie FP16 zwiększy szybkość treningu, w zależności od wersji CUDA i charakterystyki samej karty graficznej.
2. Jeżeli specyfikacja karty graficznej wskazuje, że stosunek wydajności FP16 do FP32 jest większy niż 1 do 1, wówczas przy zastosowaniu mieszanej precyzji zagwarantowane zostanie zwiększenie szybkości treningu o kwotę określoną w specyfikacji. Na przykład dla Quadro RTX 6000 wartość TFLOPS FP16 wynosząca 32,62 (2:1) przyspieszy trening co najmniej dwukrotnie (w praktyce 2,4 razy)
Tabela 2 - Obecnie stosowane modele GPU i ich główne cechy
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 |
* - wartości dla FP16, TFLOPS i FP32, TFLOPS są pobierane ze specyfikacji dla każdego procesora graficznego
Proces szkolenia i testowania GPU
Modele trenowano przy użyciu zestawu 18 procesorów graficznych. W procesie treningu sieci neuronowych korzystaliśmy z licznych par językowych (ponad sto języków). Testy GPU pomogły określić, który sprzęt działa najlepiej w przypadku określonych zadań. Podczas szkolenia naszych par językowych przyjęto za podstawę następujące parametry sieci neuronowej
- rozmiar Vocab = 30 000
- numunits = 768
- warstwy = 6
- głowy = 16
- wymiar wewnętrzny = 4 096
Po pierwsze, scharakteryzujmy procesory graficzne, które należały do pierwszej grupy na podstawie tabeli 1. Czas w minutach i sekundach spędzony na szkoleniu modelu z przybliżoną prędkością 1000 kroków i wielokrotnością wielkości partii 100 000 jednostek zostanie przyjęty jako podstawa do porównania wskaźników.
Podkreślamy, że dla pierwszej grupy pomiary prędkości wykonano przy użyciu tzw wyrównanie mechanizm i tylko używanie FP32. Bez użycia tego mechanizmu prędkość uczenia się na niektórych serwerach może być znacznie większa.
Mechanizm wyrównywania umożliwia dopasowanie podciągów w tekście podstawowym i przetłumaczonym. Konieczne jest przetłumaczenie sformatowanego tekstu, np. stron internetowych, gdy podciąg w zdaniu może zostać podświetlony inną czcionką i powinien zostać przetłumaczony z podświetleniem.
Biorąc pod uwagę wyżej wymienione parametry sieci neuronowej, najlepszy czas z pierwszej tabeli pokazał GPU Nvidia H100 z czasem uczenia 22 minut, a czas pośredni pokazał GPU tej samej marki GeForce RTX 4060 Ti z czasem nauki 72 minuty i ostatnie miejsce zajął GPU Tesla V100-SXM 2 z czasem nauki 140 minut.
W teście GPU znalazło się również osiem kart Nvidia A10 z krzywą uczenia 20 minut i 28 sekund, dwie karty Nvidia A40 z czasem 56 minut i dwie karty Tesla V100-SXM, które taktowały 86 minut. Jednoczesne zastosowanie wielu kart tej samej serii procesorów graficznych może przyspieszyć proces szkolenia modeli i pokazać się niemal w tym samym czasie z procesorami graficznymi o większej pojemności, ale taka technika może nie być wystarczająco racjonalna finansowo i proceduralnie. Wyniki pomiarów prędkości uczenia się można zaobserwować w tabeli nr 3.
Tabela 3 - Pomiary czasu szkolenia na dotychczas stosowanych mapach graficznych
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 |
Następnie przeprowadźmy analizę porównawczą aktualnie używanych graficznych pedałów gazu (tabela 2). Dla tej grupy procesorów graficznych wykonano pomiary prędkości za pomocą wyrównanie mechanizmu, a także z wykorzystaniem FP16 i FP32. Pomiary prędkości obejmujące ten mechanizm i mieszaną precyzję zostaną przedstawione poniżej odpowiednio w tabelach 4 i 5.
Tak więc, zmierzywszy prędkość układów GPU z tej tabeli, możemy powiedzieć, że pierwsze miejsce zajął układ GPU serii RTX A4500 z czasem treningu 31 minut, ale należy podkreślić, że taką prędkość modeli treningowych uzyskano zwiększając liczbę jednostek używanego układu GPU do 4. Pomijając ten fakt, prędkość treningowa wspomnianego GPU będzie znacznie wyższa, co umieści go na przedostatnim miejscu w końcowej tabeli.
Na drugim miejscu znajduje się procesor graficzny Quadro RTX serii 6000 z czasem nauki 47 minut. Należy zauważyć, że taka prędkość treningu jest odwrotnie uwarunkowana liczbą jednostek używanego procesora, która jest równa czterem. Użycie tylko jednego takiego procesora graficznego spowodowałoby utratę prędkości około 3,2 razy, a co za tym idzie, około 153 minut i umieściłoby go na ostatnim miejscu.
Trzecią linię zajął procesor graficzny serii TITAN RTX z czasem 75 minut i 85 sekund. Ten wynik szybkości uczenia się wynika z użycia 2 procesorów, co skróciło czas szkolenia modelu.
Niekwestionowanym liderem pod względem szybkości treningowej w ilości jednej jednostki na pewno będzie GPU serii GeForce RTX 3090 z czasem 78 minut i 26 sekund. Zwiększenie liczby jednostek tego GPU przyspieszy prędkość treningu modelu, który wyraźnie wyprzedzi wszystkie wyżej wymienione modele GPU. Dane dotyczące modelowych pomiarów czasu treningu można zobaczyć w tabeli 4.
Tabela 4 - Analiza porównawcza szybkości treningu modelu językowego na wcześniej używanych procesorach graficznych
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 |
Za pomocą FP16 wykonano następujące pomiary prędkości treningowej. W porównaniu do FP32, półprecyzja pozwala zmniejszyć ilość pamięci zużywanej podczas treningu modelu i przyspieszyć obliczenia na procesorze graficznym. Dokładność reprezentacji będzie niższa niż przy zastosowaniu FP32.
Mierząc czas treningu modeli wykorzystujących FP32 z poprzedniej tabeli, możemy powiedzieć, że czas treningu sieci neuronowej został skrócony prawie dwukrotnie. Na podstawie wyników pomiaru wydajności możemy zaobserwować na podstawie testów porównawczych GPU uczenia maszynowego w Tabeli 4, że pozycje procesorów graficznych pozostały w dużej mierze niezmienione. Karta serii Quadro RTX 6000 awansowała z piątej pozycji na szóstą, pokonując o 96 sekund procesor graficzny GeForce RTX 3090. Ostateczne liczby przedstawiono w tabeli 5.
Tabela 5 - Analiza porównawcza szybkości treningu modeli językowych na wcześniej używanych procesorach graficznych
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 |