BlogInfrastruktura
Planowanie mocy GPU dla modelu, który twój zespół serwuje sam
Potrzebujesz tylu replik, by unieść ruch szczytowy przy docelowym opóźnieniu, nawet gdy jedna replika jest niedostępna, i nie więcej w godzinach małego ruchu. Liczy się to, ile zapytań na sekundę jedna replika obsłuży na twoich promptach, gdy czas do pierwszego tokenu i tempo generowania mieszczą się w celu. Zmierz to, podziel przez to szczyt, dodaj zapas, a potem zdecyduj, co dzieje się poza szczytem. GPU stoją bezczynnie, gdy flota dobrana pod poniedziałkowy poranek działa bez zmian do niedzielnej nocy.
Co ogranicza pojedynczą replikę
Pamięć GPU mieści wagi modelu i KV cache, który rośnie z długością kontekstu i liczbą równocześnie przetwarzanych sekwencji. Po załadowaniu wag to KV cache wyznacza, ile zapytań replika może przetwarzać w jednej partii, a to wyznacza przepustowość. Artykuł o PagedAttention, na którym opiera się vLLM, pokazał, że marnowana pamięć KV cache ograniczała wielkość partii, a zarządzanie nią stronami podniosło przepustowość przy tym samym opóźnieniu.
W vLLM parametr gpu_memory_utilization określa, ile pamięci zajmuje instancja, według obecnej dokumentacji domyślnie 0,92, a max_model_len i max_num_seqs ograniczają kontekst i równoległość. Gdy KV cache się kończy, vLLM wywłaszcza zapytania i przelicza je ponownie, co według dokumentacji może pogorszyć opóźnienie. Skwantyzowane wagi albo mniejszy typ danych KV cache zwalniają pamięć na więcej równoczesnych zapytań, kosztem jakości, który trzeba przetestować.
Opisz obciążenie, zanim zaczniesz testy
Test na syntetycznych promptach o stałej długości odpowiada na pytanie, którego nikt nie zadał. Przed pomiarem zapisz:
- Liczbę przybyć na sekundę według godziny i dnia tygodnia, z najbardziej obciążonymi pięcioma minutami zamiast średniej godzinowej
- Rozkład tokenów wejściowych i wyjściowych na zapytanie, bo kilka długich zapytań zajmuje dużą część KV cache
- Cele opóźnień dla każdej funkcji, na przykład p95 czasu do pierwszego tokenu i czasu na token wyjściowy
- Która praca jest interaktywna, a która może poczekać, na przykład nocne przetwarzanie dokumentów
Przetestuj jedną replikę przy docelowym opóźnieniu
Benchmark serwowania w vLLM potrafi odtworzyć własny zbiór twoich promptów w wybranym tempie zapytań, z regulowaną nierównomiernością i opcjonalnym limitem równoległości, oraz raportować goodput, czyli zapytania, które spełniły ustalone przez ciebie cele dla pierwszego tokenu, czasu na token i czasu całkowitego. Zwiększaj tempo, aż goodput spadnie poniżej potrzebnego odsetka. To tempo jest pojemnością repliki dla tego obciążenia. Benchmark przepustowości offline odpowiada na inne pytanie, o maksymalną liczbę tokenów na sekundę bez celu opóźnienia, i przydaje się do planowania zadań wsadowych.
W trakcie testu obserwuj metryki samego serwera, ale traktuj je jako wskazówki. Rosnący czas w kolejce przy prawie pełnym KV cache sugeruje presję na pamięć, a spowolnienie generowania przy wolnym cache sugeruje moc obliczeniową, choć oba zjawiska mogą występować razem, a ustawienia schedulera wpływają na każde z nich. Zanim wskażesz ograniczenie, sprawdź liczbę wywłaszczeń, wykorzystanie mocy obliczeniowej i przepustowości pamięci GPU oraz liczbę działających zapytań, a potem powtórz test z kontrolowanymi zmianami równoległości i długości kontekstu, żeby zobaczyć, która z nich zmienia wynik.
Od jednej repliki do floty: przykład obliczeń
Wszystkie liczby są hipotetyczne. Wewnętrzny asystent w dni robocze rano osiąga szczyt 18 zapytań na sekundę, a w nocy i w weekendy spada do 2. Na prawdziwych promptach jedna replika na jednym GPU utrzymuje 99 procent goodputu do 5 zapytań na sekundę. Przy 6 czas w kolejce obniża goodput do 93 procent.
- 1
Repliki na szczyt
18 podzielone przez 5 daje 3,6, więc szczyt uniosą 4 repliki.
- 2
Zapas na awarie
Jedna replika więcej pokrywa awarię węzła lub wdrożenie kroczące, razem 5.
- 3
Spokojne godziny
Przy 2 zapytaniach na sekundę wystarczy 1 replika plus 1 zapasowa.
- 4
Porównaj harmonogramy
Pięć replik całą dobę zużywa około 3650 godzin GPU miesięcznie. Pięć przez 12 godzin w 22 dni robocze i 2 w pozostałych godzinach to około 2250, czyli mniej więcej o 38 procent mniej.
Harmonogram działa tylko wtedy, gdy repliki są gotowe przed porannym wzrostem ruchu. Ładowanie modelu nie trwa chwili, więc skaluj w górę według rozkładu, zamiast czekać, aż urosną kolejki. vLLM opisuje sposoby skrócenia kolejnych uruchomień, na przykład ponowne użycie cache kompilacji. Nocne zadania wsadowe mogą wtedy działać na zapasowej replice zamiast na osobnej flocie.
Zdecyduj, co przejmie ruch ponad plan
Żaden plan nie obejmie każdego skoku. Wybierz z góry jedną z trzech opcji. Ograniczona kolejka utrzymuje przewidywalne opóźnienie i wcześnie odrzuca nadmiar. Model hostowany jako przelew podtrzymuje odpowiedzi, o ile przeszedł te same testy jakości, a wasze zasady dotyczące danych na to pozwalają. Odkładanie mniej pilnej pracy wyprowadza zadania wsadowe poza szczyt. Każdy wybór ma swój koszt, a ustalenie go przed startem chroni przed odruchem kupowania GPU na skok, który zdarza się dwa razy w roku.
Pytania
Czy planować według danych o przepustowości od producenta GPU?
Używaj ich do zawężenia wyboru sprzętu, nie do planowania. Publikowane liczby rzadko pasują do twoich długości promptów i odpowiedzi, modelu i celu opóźnienia, a każdy z tych czynników może zmienić pojemność kilkukrotnie. Przetestuj jedną replikę na własnym ruchu.
Kiedy powtarzać test pojemności?
Po każdej zmianie modelu, jego kwantyzacji, wersji vLLM lub kluczowych ustawień oraz wtedy, gdy długości promptów lub odpowiedzi wyraźnie się przesuną, na przykład gdy nowa funkcja dokłada kontekst z retrievalu. Wersjonuj zbiór testowy razem z wynikami.
Czy Cloudsail może to zrobić dla naszego modelu?
Tak. Testujemy razem z twoim zespołem platformowym na waszym koncie w chmurze, na waszych promptach, i zostawiamy zespołowi skrypty testowe, wyniki i harmonogram skalowania.
Powiązane usługi
Inżynieria i architektura AI
Asystenci, interfejsy głosowe i agenci w produktach, które sprzedajesz, razem z serwowaniem modeli i wyszukiwaniem pod spodem.
Trenowanie własnych modeli
Mały model open-weight wytrenowany do jednego zadania i porównany z twoim obecnym modelem pod względem kosztu i dokładności.
Więcej z bloga
Budżet opóźnień LLM
Jak ustalić, dlaczego funkcja AI działa wolno: rozbij każde zapytanie na kolejkę, retrieval, model i narzędzia, popraw największy element, na który masz wpływ, i mierz ogon rozkładu pod obciążeniem.
Jakość po kwantyzacji
Które testy powtórzyć, zanim skwantyzowany model zastąpi oryginał: jakość zadania, ustrukturyzowane odpowiedzi, długie wejścia, testy zachowania i wydajność serwowania, z porównaniem kosztu na GPU.
Zadania dla małych modeli
Jak znaleźć zadania o dużym wolumenie, z którymi mały model językowy poradzi sobie niezawodnie: lista kontrolna, test przed jakimkolwiek treningiem i porównanie kosztów przy twoim wolumenie.
Porozmawiaj z inżynierem
Przyjdź z jednym zadaniem, które chcesz usprawnić. Rozmowa trwa 30 minut i nie wymaga dostępu do twoich systemów ani danych.
Rezerwacja odbywa się w Kalendarzu Google.
Wolisz najpierw napisać? Zostaw adres e-mail i kilka zdań, a odpowiemy, proponując terminy.
Sprawdź wersję roboczą w swoim programie pocztowym
Wyślij ją stamtąd, a inżynier odpowie ci osobiście, proponując terminy 30-minutowej rozmowy. Jeśli wersja robocza się nie otworzyła, napisz do nas na adres miki@cloudsail.com.