Komputer do eksperymentów: GPU, NUMA, WTF
Informatycy są po!#$%*ni. Czy ktoś słyszał, by górnik miał pod domem małą eksperymentalną kopalnię? Albo żeby murarz po godzinach stawiał i burzył ściany z różnych materiałów? Tymczasem nikogo nie dziwi, że admin ma w domu testowe serwery, a programista dłubie w projektach open source. Najwyraźniej ta ścieżka kariery źle robi na głowę. Mnie to też nie ominęło. Od ćwierć wieku używam Linuksa na desktopie, mam też NAS własnej roboty. Do tej pory uważałem, że osobny testowy serwer to by jednak była przesada. Aż zachciało mi się poeksperymentować z Machine Learning. Ani mój laptop, ani mój NAS się do tego nie nadają.
Kupowanie karty graficznej w 2026
Nie jestem graczem, więc do tej pory z daleka obserwowałem jak szalony zrobił się rynek GPU. Najpierw kopanie kryptowalut, potem bańka AI spowodowały, że mocniejsze karty są zamówione na całe miesiące do przodu. A nawet używane karty sprzed kilku lat potrafią kosztować dziś więcej, niż gdy były nowe.Na szczęście nie mam zamiaru trenować LLM-a. Mogę eksperymentować z małą siecią, koncepcje są takie same. A uruchamianie czegoś w ograniczonym środowisku jest nawet przydatną umiejętnością. W pierwszym przybliżeniu: potrzebuję jakiejkolwiek karty, na której działa CUDA (środowisko NVIDIA do uruchamiania obliczeń na GPU). I nawet mam taką, NVS 315 z 2013 roku.
Tyle że nowe wersje CUDA i sterowników NVIDIA porzucają wsparcie dla starego sprzętu. Trudno ogarnąć symbole kart, więc żeby trochę ułatwić, NVIDIA wprowadziła Compute Capability, który jednym numerem opisuje możliwości karty. CUDA 13.0 wymaga co najmniej CC 7.5, czyli architektury Turing z 2018 roku.
Czyli najtańszy używany Turing? Był na mojej liście, ale może warto sięgnąć wyżej. Dwie rzeczy:
- Tensor Cores: dodatkowe rdzenie optymalizowane do mnożenia macierzy. ML działa 5-10x szybciej niż na zwykłych rdzeniach CUDA. Większość kart Turing nie ma Tensor Cores, te droższe miewają.
- Formaty zmiennoprzecinkowe. Bez wchodzenia w szczegóły: liczby można przechowywać na różne sposoby. Od samego początku dostępny był format FP32, jak sama nazwa wskazuje - 32-bitowy. ML najczęściej używa formatu BF16, wprowadzonego w architekturze Ampere w 2020. Przecież im większa precyzja/zakres tym lepiej? Niekoniecznie, jeżeli mniejsza wystarcza, a dzięki temu w tej samej ilości VRAM można zmieścić dwa razy więcej zmiennych. I w jednym cyklu zegara przepchnąć dwa razy więcej liczb.
Karty pokopalniane
Tanie karty z CC 7.5 lub wyżej pochodzą z lat 2020-2022, kiedy najbardziej intensywnie kopano kryptowaluty na GPU. Karta w koparce chodzi na 100% mocy przez całe miesiące. Gorąca elektronika ma większe prawdopodobieństwo awarii, łożyska w wentylatorach się zużywają. Nie da się z całą pewnością powiedzieć, czy karta była używana do kopania, ale są symptomy:
- Jeżeli jeden prywatny sprzedawca sprzedaje 20 jednakowych kart, to raczej ich nie używał do grania.
- Niektóre karty lepiej się nadawały do kopania. W pewnym momencie NVIDIA wypuściła specjalną serię do kryptowalut (CMP), a w zwykłych kartach wprowadziła zmiany, by kopały gorzej (hash rate limiter).
Różnice między rynkami
Im większy rynek, tym niższa cena używanych produktów. W dziesięciomilionowej Szwecji używane karty są mniej więcej 2x droższe niż w siedemdziesięciomilionowej Wielkiej Brytanii, o ile w ogóle da się znaleźć wybrany model. Dlatego postanowiłem przywieźć sobie kartę z Anglii (polskiego rynku nie sprawdzałem, zgaduję, że jest bliżej UK niż Szwecji). Zleciłem Claude'owi krótki research i dostałem taką tabelkę, a potem sprawdziłem dokładniej kilka modeli:
Wybrane modele Turing
Quadro T400 to karta montowana w korporacyjnych desktopach Dell i HP. Ma znacznie słabszą wydajność niż karty dla graczy, ale dzięki temu nie nadawała się do kryptowalut. Można przyjąć, że pracowała w klimatyzowanym biurze, w dobrze zaprojektowanej obudowie i z przyzerowym obciążeniem. Nie ma Tensor Cores i ma bardzo mały VRAM.
GTX 1660 Ti to karta dla graczy z tej samej architektury. Też nie ma Tensor Cores, ale ma więcej VRAM, szybszy zegar i więcej zwykłych rdzeni niż T400. Raczej nie używana do kopania, bo za słaba.
RTX 2060 to najtańsza karta z Tensor Cores (ale bez BF16). Kosztuje niewiele więcej niż 2 poprzednie. Ma 3 odmiany:
- 6 GB, 240 Tensor Cores
- 8 GB, 272 Tensor Cores
- 12GB, 272 Tensor Cores (model z końca 2021)
Dlaczego już po wprowadzeniu Ampere NVIDIA wypuściła kartę ze starą architekturą, dużym VRAMem i stosunkowo małą liczbą rdzeni? Bo dokładnie taka kombinacja była idealna do kryptowalut, i Ampere miało hash rate limiter, a Turing nie. Czyli: inne wersje RTX 2060 być może były używane do kopania, wersja 12GB prawie na pewno była.
Wybrane modele Ampere
Różnica między Turing a Ampere jest znaczna. Karty z Ampere są nadal produkowane, więc jest szansa, że będą dłużej obsługiwane przez CUDA (NVIDIA nie zapowiada na lata do przodu, tylko "w następnej wersji porzucamy wsparcie dla X", więc to jest wróżenie z fusów). No i przede wszystkim obsługuje format BF16.
RTX 3050 to najtańsza karta z Ampere. Ma wersję z 6 i 8GB VRAM (które różnią się też wydajnością). Raczej nie była używana do kopania, bo jest stosunkowo wolna.
RTX 3060 to szybszy model. Też w różnych wersjach (8 i 12GB oraz zwykła i TI, która ma szybszy chip).
Co kupiłem
Uznałem, że RTX 3050 6GB będzie optymalna. Niewiele droższa niż karty Turing, a obsługuje BF16 i ma szansę być wspierana dłużej. Nowsza architektura, więcej rdzeni albo więcej VRAM to co najmniej 2x wyższa cena, a zależy mi bardziej na kompatybilności niż na wydajności. Przejrzałem oferty - już ręcznie - i znalazłem nową za £150, czyli jakieś £10 więcej niż używane, które nie wyglądają podejrzanie.
Komputer do eksperymentów
Rozsądnym, ale nudnym wyborem byłoby coś nowego lub w miarę nowego. Ale wolę wykorzystać coś, co już mam. Gdzieś w kącie garażu stoją dwie stare stacje robocze Lenovo: ThinkStation D20 i C30. Kazałem Claude'owi porównać ich procesory z tym, co ma mój NAS, z moim laptopem i dodatkowo z nowym i5 (to ostatnie przez ciekawość).
Zaskoczyło mnie, że malutki procesor z NAS-a ma większą wydajność z rdzenia niż nieco tylko starszy procesor ze znacznie wyższej serii (Pentium w tych czasach oznaczało półkę niżej niż i3, Xeon to więcej niż i7). Nie zaskoczyło mnie, że nowy i5 totalnie rozjeżdża stare procesory. W wydajności wielordzeniowej jeszcze jakoś sobie radzą, ale jednak nowy procesor domowy jest 4x szybszy niż dwa procesory serwerowe razem wzięte.
C30 jest nieco wolniejszy niż D20 w benchmarku wielowątkowym. Ale to przez brak HT, które w teście podwaja wynik, a w prawdziwej pracy zysk jest mniejszy. Poza tym C30 jest mały i cichy, A D20 startuje jakby miał silnik turbinowy.
NUMA, NUMA ej
Oba komputery to maszyny NUMA (Non-Uniform Memory Access). Każdy procesor ma swój osobny RAM. Jak sugeruje nazwa, może też korzystać z reszty pamięci, ale nie tak samo. Dostęp do nieswojej pamięci odbywa się przez magistralę QPI. Liczby nie wyglądają najgorzej:
- D20: lokalne 25.6 GB/s vs QPI ~23 GB/s → ok 91% prędkości
- C30: lokalne 34.1 GB/s vs QPI ~26 GB/s → ok 76% prędkości
Tyle że QPI służy też do uzgadniania cache między procesorami i paru innych rzeczy, w C30 - dodatkowo do dostępu do GPU, jeżeli korzysta z niego proces uruchomiony na niewłaściwym CPU (sloty PCIe też są przypisane do poszczególnych procesorów). Dostęp do pamięci konkuruje o pasmo z innymi transferami. Jest też latencja - ok. 100ns na każdej operacji.
Czy to jest widoczne w praktyce? Jeszcze jak! Żeby osiągnąć optymalną wydajność, trzeba przypisać procesy do określonych rdzeni. Ręcznie, za pomocą numactl, różne schedulery HPC też to potrafią, o ile się je odpowiednio skonfiguruje. Kiedyś, pracując nad problemem z NUMA, czytałem dokumentację kernela i trafiłem na takie piękne zdanie:
Platform vendors don’t build NUMA systems just to make software developers’ lives interesting.Bardzo mi się spodobało. Skoro się tam znalazło, to najwyraźniej nie byłem pierwszą osobą, która miała wrażenie, że właśnie taki był cel. Maszyny z którymi pracowałem były znacznie większe, niektóre miały 16 domen NUMA, a nie banalne 2. Zdecydowanie czyniły życie ciekawszym.
A gdybym usunął jeden procesor i przełożył cały RAM do slotów tego, który pozostał? Czy taki system do moich zastosowań nie byłby szybszy? Możliwe. Ale też bardziej nudny i przewidywalny.




Komentarze
Prześlij komentarz