TensorFlow Serving to elastyczny, wysokowydajny system obsługujący modele uczenia maszynowego, zaprojektowany z myślą o środowiskach produkcyjnych. TensorFlow Serving ułatwia wdrażanie nowych algorytmów i eksperymentów przy zachowaniu tej samej architektury serwera i interfejsów API. TensorFlow Serving zapewnia gotową integrację z modelami TensorFlow, ale można go łatwo rozszerzyć w celu obsługi innych typów modeli.
Kluczowe idee
Aby zrozumieć architekturę TensorFlow Serving, musisz zrozumieć następujące kluczowe pojęcia:
Serwowalne
Servables są główną abstrakcją w TensorFlow Serving. Serwable to podstawowe obiekty używane przez klientów do wykonywania obliczeń (na przykład wyszukiwanie lub wnioskowanie).
Rozmiar i szczegółowość Servable jest elastyczna. Pojedynczy obiekt udostępniany może zawierać wszystko, od pojedynczego fragmentu tabeli przeglądowej, przez pojedynczy model, po krotkę modeli wnioskowania. Serwable mogą być dowolnego typu i interfejsu, co zapewnia elastyczność i przyszłe ulepszenia, takie jak:
- wyniki transmisji strumieniowej
- eksperymentalne API
- asynchroniczne tryby pracy
Obiekty udostępniane nie zarządzają własnym cyklem życia.
Typowe usługi serwisowe obejmują:
- TensorFlow SavedModelBundle (
tensorflow::Session
) - tabela przeglądowa do osadzania lub wyszukiwania słownictwa
Serwowalne wersje
TensorFlow Serving może obsłużyć jedną lub więcej wersji serwowalnego w okresie istnienia pojedynczej instancji serwera. Umożliwia to ładowanie nowych konfiguracji algorytmów, wag i innych danych w czasie. Wersje umożliwiają równoczesne ładowanie więcej niż jednej wersji serwowalnego, wspierając stopniowe wdrażanie i eksperymentowanie. W czasie udostępniania klienci mogą zażądać najnowszej wersji lub określonego identyfikatora wersji dla konkretnego modelu.
Obsługiwane strumienie
Serwowalny strumień to sekwencja wersji udostępnianego elementu posortowana według rosnących numerów wersji.
Modele
TensorFlow Serving reprezentuje model jako jeden lub więcej obiektów serwowalnych. Model uczony maszynowo może zawierać jeden lub więcej algorytmów (w tym wyuczone wagi) oraz tabele wyszukiwania lub osadzania.
Model złożony można reprezentować w jeden z następujących sposobów:
- wiele niezależnych serwisów
- pojedynczy kompozyt serwowalny
Serwable może również odpowiadać ułamkowi modelu. Na przykład duża tabela przeglądowa może zostać podzielona na fragmenty w wielu instancjach TensorFlow Serving.
Ładowarki
Programy ładujące zarządzają cyklem życia serwera. Loader API zapewnia wspólną infrastrukturę niezależną od konkretnych algorytmów uczenia się, danych lub przypadków użycia produktów. W szczególności moduły ładujące standaryzują interfejsy API do ładowania i rozładowywania serwowalnego.
Źródła
Źródła to moduły wtyczek, które wyszukują i udostępniają serwable. Każde źródło zapewnia zero lub więcej serwowalnych strumieni. Dla każdego serwowalnego strumienia źródło dostarcza jedną instancję Loader dla każdej wersji, którą udostępnia do załadowania. (Źródło jest w rzeczywistości połączone z zerem lub większą liczbą SourceAdapter, a ostatni element w łańcuchu emituje moduły ładujące).
Interfejs TensorFlow Serving dla Źródeł może wykrywać serwable z dowolnych systemów pamięci masowej. TensorFlow Serving zawiera typowe implementacje źródeł referencyjnych. Na przykład Źródła mogą uzyskiwać dostęp do mechanizmów takich jak RPC i sondować system plików.
Źródła mogą utrzymywać stan, który jest współdzielony przez wiele serwowali lub wersji. Jest to przydatne w przypadku serwerów, które używają aktualizacji różnicowych między wersjami.
Wersje aspiracyjne
Wersje aspirowane reprezentują zestaw możliwych do serwowania wersji, które powinny być załadowane i gotowe. Źródła przekazują ten zestaw serwowalnych wersji dla pojedynczego serwowalnego strumienia na raz. Kiedy źródło przekazuje menedżerowi nową listę aspirowanych wersji, zastępuje poprzednią listę dla tego możliwego do wyświetlenia strumienia. Menedżer usuwa wszystkie poprzednio wczytane wersje, które nie pojawiają się już na liście.
Zobacz zaawansowany samouczek , aby zobaczyć, jak w praktyce działa ładowanie wersji.
Menedżerowie
Menedżerowie zajmują się całym cyklem życia elementów serwisowych, w tym:
- wczytywanie serwowalnych
- służąc Serwowalne
- rozładowywanie serwowalnych
Menedżerowie słuchają Źródeł i śledzą wszystkie wersje. Menedżer próbuje spełnić żądania Źródeł, ale może odmówić załadowania aspirowanej wersji, jeśli, powiedzmy, wymagane zasoby nie są dostępne. Menedżerowie mogą również odroczyć „rozładunek”. Na przykład menedżer może poczekać z wyładowaniem do zakończenia ładowania nowszej wersji, w oparciu o zasady gwarantujące, że co najmniej jedna wersja jest ładowana przez cały czas.
TensorFlow Serving Managers zapewnia prosty, wąski interfejs — GetServableHandle()
— dla klientów, aby uzyskać dostęp do załadowanych instancji serwowalnych.
Rdzeń
Wykorzystując standardowe interfejsy API TensorFlow Serving, TensorFlow Serving Core zarządza następującymi aspektami obiektów serwowalnych:
- koło życia
- metryka
TensorFlow Serving Core traktuje serwable i programy ładujące jako nieprzezroczyste obiekty.
Życie serwowalnego
Mówiąc ogólnie:
- Źródła tworzą programy ładujące dla wersji udostępnianych.
- Ładowacze są wysyłane jako Aspirad Versions do Menedżera, który ładuje i obsługuje je na żądanie klientów.
Bardziej szczegółowo:
- Wtyczka Source tworzy Loader dla określonej wersji. Loader zawiera wszelkie metadane potrzebne do załadowania Servable.
- Źródło używa wywołania zwrotnego, aby powiadomić menedżera o wersji aspirowanej.
- Menedżer stosuje skonfigurowaną politykę wersji w celu określenia następnej akcji do wykonania, która może polegać na usunięciu poprzednio załadowanej wersji lub załadowaniu nowej wersji.
- Jeśli Manager stwierdzi, że jest to bezpieczne, daje Loaderowi wymagane zasoby i mówi Loaderowi, aby załadował nową wersję.
- Klienci proszą menedżera o udostępniany, określając wersję bezpośrednio lub po prostu prosząc o najnowszą wersję. Menedżer zwraca uchwyt dla elementu udostępnianego.
Załóżmy na przykład, że źródło reprezentuje wykres TensorFlow z często aktualizowanymi wagami modeli. Wagi są przechowywane w pliku na dysku.
- Źródło wykrywa nową wersję wag modelu. Tworzy Loader, który zawiera wskaźnik do danych modelu na dysku.
- Źródło powiadamia Menedżera dynamicznego o planowanej wersji.
- Menedżer dynamiczny stosuje zasady dotyczące wersji i decyduje o załadowaniu nowej wersji.
- Menedżer dynamiczny informuje program ładujący, że jest wystarczająca ilość pamięci. Loader tworzy instancję wykresu TensorFlow z nowymi wagami.
- Klient żąda dojścia do najnowszej wersji modelu, a Menedżer dynamiczny zwraca dojście do nowej wersji obiektu udostępnianego.
Rozciągliwość
TensorFlow Serving udostępnia kilka punktów rozszerzeń, w których można dodać nowe funkcje.
Polityka wersji
Zasady dotyczące wersji określają kolejność ładowania i rozładowywania wersji w ramach jednego obsługiwanego strumienia.
TensorFlow Serving zawiera dwie zasady, które uwzględniają większość znanych przypadków użycia. Są to zasady zachowania dostępności (unikaj pozostawiania wczytanych wersji zerowych; zwykle ładuj nową wersję przed zwolnieniem starej) oraz zasady zachowania zasobów (unikaj jednoczesnego ładowania dwóch wersji, co wymaga podwojenia zasobów; wyładuj starą wersję przed załadowaniem nowy). W celu prostego korzystania z TensorFlow Serving, gdy ważna jest dostępność obsługi modelu, a koszty zasobów niskie, zasady zachowania dostępności zapewnią, że nowa wersja zostanie załadowana i gotowa przed zwolnieniem starej. W przypadku wyrafinowanego wykorzystania TensorFlow Serving, na przykład zarządzania wersjami w wielu instancjach serwera, Polityka Zachowania Zasobów wymaga najmniej zasobów (brak dodatkowego bufora do ładowania nowych wersji).
Źródło
Nowe źródła mogą obsługiwać nowe systemy plików, oferty w chmurze i backendy algorytmów. TensorFlow Serving udostępnia kilka typowych elementów konstrukcyjnych, które ułatwiają i przyspieszają tworzenie nowych źródeł. Na przykład TensorFlow Serving zawiera narzędzie do owijania zachowania sondowania wokół prostego źródła. Źródła są ściśle powiązane z programami ładującymi pod kątem określonych algorytmów i serwerów obsługujących dane.
Zobacz dokument Źródło niestandardowe , aby uzyskać więcej informacji na temat tworzenia źródła niestandardowego.
Ładowarki
Moduły ładujące są punktem rozszerzeń do dodawania algorytmów i zaplecza danych. TensorFlow jest jednym z takich backendów algorytmów. Na przykład możesz zaimplementować nowy moduł ładujący, aby załadować, zapewnić dostęp i zwolnić wystąpienie nowego typu serwowalnego modelu uczenia maszynowego. Przewidujemy stworzenie Loaderów dla tablic przeglądowych i dodatkowych algorytmów.
Zapoznaj się z dokumentem Niestandardowy serwer , aby dowiedzieć się, jak utworzyć niestandardowy serwer.
Dozownik
Grupowanie wielu żądań w jedno żądanie może znacznie obniżyć koszt przeprowadzania wnioskowania, szczególnie w przypadku obecności akceleratorów sprzętowych, takich jak procesory graficzne. TensorFlow Serving zawiera widżet grupowania żądań, który umożliwia klientom łatwe grupowanie wniosków specyficznych dla typu w żądaniach w żądania wsadowe, które systemy algorytmów mogą wydajniej przetwarzać. Więcej informacji można znaleźć w Przewodniku wsadowym .