Transfer peer-to-peer przez PCIe może zmniejszyć narzut wnioskowania na wielu GPU, przenosząc tensory bezpośrednio między pamięciami zgodnych GPU zamiast przechowywać je tymczasowo w pamięci RAM hosta.
Model lokalny podzielony między dwa GPU musi przesyłać aktywacje, bloki KV lub wyniki ekspertów za każdym razem, gdy wykonywanie przekracza granicę urządzenia. Bez bezpośredniego dostępu peer-to-peer dane mogą przepływać z jednego GPU do pamięci hosta, a następnie z powrotem do drugiego, obciążając połączenia z CPU i dodając operacje kopiowania. P2P skraca tę ścieżkę, ale jego wartość zależy od topologii, rozmiaru transferu, synchronizacji oraz częstotliwości komunikacji modelu.
Dostęp peer-to-peer zastępuje ścieżkę kopiowania przez hosta
Po włączeniu dostępu peer-to-peer jeden GPU może adresować dane w pamięci innego GPU lub kopiować je za pośrednictwem obsługiwanej ścieżki połączenia. Transfer omija jawny bufor pośredni w stronicowanej lub przypiętej pamięci systemowej i może ograniczyć udział CPU.
Przewodnik programowania CUDA wyjaśnia, że dostęp do pamięci peer musi być obsługiwany i włączony między parami urządzeń. Możliwość ta jest kierunkowa i zależna od topologii, dlatego oprogramowanie powinno sprawdzać każdą parę zamiast zakładać, że każdy GPU w jednym hoście może komunikować się bezpośrednio.
Model nadal wymaga synchronizacji, aby GPU odbierający dane nie odczytał niekompletnych aktywacji. P2P usuwa etap przechowywania pośredniego, ale nie eliminuje kosztów związanych z kolejnością, uruchamianiem kerneli ani komunikacją zbiorową. To rozróżnienie pozostaje widoczne podczas późniejszych testów domowych.
Topologia PCIe określa rzeczywistą przepustowość bezpośredniej ścieżki
Dwa GPU znajdujące się za tym samym przełącznikiem PCIe często mogą wymieniać dane bez przechodzenia przez gniazdo CPU, podczas gdy urządzenia za różnymi kompleksami głównymi mogą wymagać ścieżki przez hosta albo utracić obsługę P2P. Generacja łącza, szerokość magistrali, przeciążenie przełącznika oraz jednoczesny ruch wyznaczają limit.
NCCL dokumentuje, że preferuje bezpośrednią komunikację GPU, gdy CUDA zgłasza zgodne GPU, wykorzystując PCIe lub NVLink zgodnie z dostępną topologią. Jego narzędzia topologii pokazują, czy każda para urządzeń może korzystać z bezpośredniego dostępu przez PCIe. Wynik pośredni musi pozostać możliwy do sprawdzenia, zanim automatyzacja będzie na nim bazować.
W przypadku małych transferów dominować może opóźnienie uruchamiania i synchronizacji, podczas gdy duże transfery tensorów zbliżają się do przepustowości łącza. Potok z częstymi, wąskimi granicami może zyskać mniej niż konstrukcja komunikująca mniej, ale większych bloków. Tę granicę należy mierzyć osobno w realistycznych warunkach pracy.
Podział modelu decyduje o tym, czy szybsze kopiowanie ma znaczenie
Równoległość tensorów wymaga komunikacji w obrębie wielu warstw, równoległość potokowa przesyła aktywacje między granicami etapów, a równoległość ekspertów wymienia kierowane tokeny. To samo łącze P2P może więc być słabo wykorzystywane albo stać się głównym ograniczeniem, zależnie od strategii podziału.
Omówienie projektu NVIDIA GPUDirect pokazuje, jak rozmieszczenie w topologii PCIe i położenie przełączników wpływają na bezpośredni przepływ danych w porównaniu ze ścieżkami przez hosta. Zasada ta ma zastosowanie, mimo że frameworki wnioskowania dodają własne warstwy komunikacji zbiorowej i planowania. Praktyczne konsekwencje pojawiają się, gdy kilka źródeł konkuruje o ograniczony kontekst.
Granica awarii obejmuje nieobsługiwaną topologię, ograniczenia IOMMU lub wirtualizacji albo komunikację, która już przekracza budżet PCIe. Oprogramowanie przechodzi wtedy na buforowanie przez hosta lub doświadcza rywalizacji o łącze, a dodanie drugiego GPU może spowolnić wnioskowanie mimo większej mocy obliczeniowej.
Mierz każdą parę GPU i każdą granicę modelu
Odwzoruj GPU, gniazdo CPU, główny kontroler PCIe, przełącznik, generację łącza, szerokość, możliwości P2P oraz pamięć NUMA. Zmierz jednokierunkowe i dwukierunkowe kopiowanie peer oraz kopiowanie przez hosta dla reprezentatywnych rozmiarów transferów. Ta zależność powinna pozostać jawna w końcowym interfejsie.
Połącz wynik z rozmieszczeniem uwzględniającym NUMA. Profiluj czas obliczeń, czas komunikacji, synchronizację, przepustowość komunikacji zbiorowej, liczbę tokenów na sekundę oraz opóźnienie żądań p99 dla każdego podziału modelu przy włączonym i wyłączonym P2P. Wynik należy zatem porównać z pierwotnymi danymi.
Zachowaj plan wykorzystujący wiele GPU tylko wtedy, gdy poprawia opóźnienie całościowe lub przepustowość. Jeśli bezpośrednie kopiowanie jest szybkie, ale wnioskowanie nadal jest ograniczone komunikacją, zmniejsz liczbę przekroczeń granic podziału albo wybierz rozmieszczenie uwzględniające topologię, zamiast uznawać samą obsługę P2P za wystarczającą.
Centrum Technologii i Sztucznej Inteligencji
Więcej do przeczytania

Czym jest dryf osadzeń i kiedy prywatny indeks wyszukiwania wymaga przebudowy?
Odkoduj dryf modelu, przetwarzania wstępnego, korpusu i zapytań; odróżnij monitorowanie od niezgodności oraz zdecyduj, kiedy prywatny indeks wymaga przebudowy.

Czym jest zgodność tokenizera i dlaczego może zakłócić przełączanie modeli?
Odkryj tożsamość słownictwa, znaczenie tokenów specjalnych, szablony czatu, buforowane tokeny, adaptery i kontrole zgodności przy lokalnym przełączaniu modeli.

Czym jest rezydencja modelu i kiedy lokalna usługa AI powinna przechowywać wagi w pamięci?
Poznaj rezydencję wag, poziomy pamięci podręcznej, zimne uruchomienia, eksmisję, multipleksowanie, presję pamięci oraz dowiedz się, kiedy domowa usługa AI powinna pozostać aktywna.

