Wymagania dotyczące kontenera niestandardowego do prognozowania

Aby używać niestandardowego kontenera do wyświetlania podpowiedzi z modelu wytrenowanego na zamówienie, musisz przesłać obraz kontenera Dexie z uruchomionym serwerem HTTP. W tym dokumencie opisano wymagania, jakie musi spełniać obraz kontenera, aby był on zgodny z sztuczną inteligencją. W dokumencie opisano też, jak po wejściu w interakcję z kontenerem niestandardowym AI działa z kontenerem niestandardowym. Innymi słowy, ten dokument opisuje, co należy wziąć pod uwagę podczas projektowania obrazu kontenera do użycia z sztuczną inteligencją.

Aby dowiedzieć się, jak korzystać z niestandardowego obrazu kontenera do wyświetlania podpowiedzi, przeczytaj artykuł Korzystanie z niestandardowego kontenera.

Wymagania dotyczące obrazu kontenera

Jeśli obraz kontenera Docker działa jako kontener, musi on działać z serwerem HTTP. W szczególności kontener musi nasłuchiwać i reagować na testy lojalnościowe, kontrole stanu i żądania prognoz. W poniższych podsekcjach szczegółowo opisano te wymagania.

Serwer HTTP możesz zaimplementować w dowolny sposób, używając dowolnego języka programowania, o ile spełnia on wymagania opisane w tej sekcji. Możesz na przykład napisać niestandardowy serwer HTTP, korzystając z platformy internetowej, takiej jak Flask, lub oprogramowania do systemów uczących się, które działa z serwerem HTTP, takim jak TensorFlow Serving, TorchServe lub Serwer KFSer wymi.

Uruchamianie serwera HTTP

Serwer HTTP możesz uruchomić, korzystając z instrukcji ENTRYPOINT, instrukcji CMD lub obu tych elementów w pliku Dockerfile, którego używasz do tworzenia obrazu kontenera. Przeczytaj o interakcji między CMD a ENTRYPOINT.

Podczas tworzenia zasobu Model możesz też określić pola containerSpec.command i containerSpec.args, by zastąpić ENTRYPOINT i CMD. Określenie jednego z tych pól pozwala użyć obrazu kontenera, który w przeciwnym razie nie spełniałby wymagań z powodu niezgodności (lub nieistnienia) ENTRYPOINT lub CMD.

Niezależnie od tego, które polecenie uruchomisz w momencie uruchomienia kontenera, upewnij się, że to polecenie będzie działać przez czas nieokreślony. Na przykład nie uruchamiaj polecenia, które uruchamia serwer HTTP w tle, a następnie zamyka je. Jeśli to zrobisz, kontener zostanie zamknięty natychmiast po uruchomieniu.

Serwer HTTP musi nasłuchiwać żądań na 0.0.0.0 na wybranym porcie. Podczas tworzenia Model podaj ten port w polu containerSpec.ports. Aby dowiedzieć się, jak kontener może uzyskać dostęp do tej wartości, przeczytaj sekcję tego dokumentu o zmiennej środowiskowej AIP_HTTP_PORT.

Testy lojalnościowe

Gdy w kontenerze zacznie działać funkcja sprawdzania poprawności działania Androida, jest wykonywana weryfikacja. Gdy wdrożysz wytrenowany model niestandardowy w Endpoint zasobie, system Verx AI użyje sondowania TCP, aby spróbować nawiązać połączenie TCP z kontenerem na skonfigurowanym port. Sonda wykonuje do czterech prób nawiązania połączenia, czekając 10 sekund po każdym niepowodzeniu. Jeśli w tym momencie próbnik jeszcze nie nawiązał połączenia, system AI ponownie uruchomi kontener.

Serwer HTTP nie musi wykonywać żadnych specjalnych czynności w celu obsługi tych testów. Dopóki nasłuchuje on żądań na skonfigurowanym porcie, próbnik lojalności może nawiązać połączenie.

Kontrole stanu

W czasie rzeczywistym, gdy serwer HTTP jest sprawdzany pod kątem poprawności działania, może sprawdzać poprawność stanu serwera HTTP. Usługa wysyła żądania HTTP GET do konfigurowalnej ścieżki kontroli stanu na serwerze. Podaj tę ścieżkę w polu containerSpec.healthRoute podczas tworzenia Model. Aby dowiedzieć się, jak kontener może uzyskać dostęp do tej wartości, przeczytaj sekcję tego dokumentu o zmiennej środowiskowej AIP_HEALTH_ROUTE.

Skonfiguruj serwer HTTP, aby odpowiadał na każde żądanie kontroli stanu w następujący sposób:

  • Jeśli serwer jest gotowy do obsługi żądań prognoz, odpowiedz na prośbę o sprawdzenie stanu w ciągu 10 sekund, podając kod stanu 200 OK. Treść treści odpowiedzi nie ma znaczenia. Alerty wertexu są ignorowane.

    Ta odpowiedź oznacza, że serwer działa prawidłowo.

  • Jeśli serwer nie jest gotowy do obsługi żądań prognoz, nie odpowiadaj na żądanie kontroli stanu w ciągu 10 sekund lub nie wysyłaj kodu stanu z wyjątkiem 200 OK. Na przykład w odpowiedzi podaj kod stanu 503 Service Unavailable.

    Ta odpowiedź (lub jej brak) oznacza, że serwer jest w złym stanie.

Jeśli sonda stanu odbierze z Twojego serwera nieprawidłową odpowiedź (w tym brak odpowiedzi w ciągu 10 sekund), w ciągu 10 sekund zostanie wysłana do trzech dodatkowych kontroli stanu. W tym czasie systemertex AI nadal uważa Twój serwer za sprawny. Jeśli sonda otrzyma prawidłową odpowiedź na którąkolwiek z tych kontroli, od razu powróci ona do zaplanowanego harmonogramu kontroli stanu. Jeśli jednak sonda otrzyma cztery kolejne nieprzydatne odpowiedzi, wtedy systemertex AI przestanie kierować ruch do kontenera. (Jeśli zasób DeployedModel jest skalowany tak, by korzystał z wielu węzłów prognozowania, wtedy sztuczna inteligencja werteksów kieruje żądania do innych, sprawnych kontenerów).

Ertex AI nie uruchamia ponownie kontenera; Zamiast tego próbka stanu wysyła do kontrolowanego serwera tymczasowe żądania kontroli stanu. Jeśli otrzyma prawidłową odpowiedź, oznacza to, że kontener jest w dobrym stanie i zaczyna kierować do niego ruch z prognoz.

Praktyczne wskazówki

W niektórych przypadkach wystarczy, że serwer HTTP w kontenerze zawsze będzie odpowiadać kodem stanu 200 OK na kontrolę stanu. Jeśli kontener wczytuje zasoby przed uruchomieniem serwera, kontener nie jest w dobrym stanie w okresie uruchamiania i w okresach awarii serwera HTTP. W pozostałych przypadkach reaguje on w prawidłowy sposób.

Aby uzyskać bardziej złożoną konfigurację, możesz celowo zaprojektować serwer HTTP, który będzie w określonych momentach reagować na kontrolę stanu. Możesz na przykład zablokować ruch prognozy do węzła na określony czas, aby kontener mógł wykonywać prace konserwacyjne.

Żądania prognoz

Gdy klient wysyła żądanie projects.locations.endpoints.predict do interfejsu API AndroidaexPex, system AIX przekazuje to żądanie jako żądanie HTTP POST do konfigurowalnej ścieżki prognozowania na serwerze. Podaj tę ścieżkę w polu containerSpec.predictRoute podczas tworzenia Model. Aby dowiedzieć się, jak kontener może uzyskać dostęp do tej wartości, przeczytaj sekcję tego dokumentu o zmiennej środowiskowej AIP_PREDICT_ROUTE.

Poproś o wymagania

Każde żądanie prognozy musi mieć co najmniej 1,5 MB. Serwer HTTP musi akceptować żądania prognoz z nagłówkiem HTTP Content-Type: application/json i treściami JSON w następującym formacie:

{
  "instances": INSTANCES,
  "parameters": PARAMETERS
}

W tych żądaniach:

  • INSTANCES to tablica zawierająca co najmniej jedną wartość JSON dowolnego typu. Każda wartość reprezentuje instancję, dla której podajesz prognozę.

  • PARAMETERS to obiekt JSON zawierający dowolne parametry wymagane przez kontener do wyświetlania podpowiedzi w instancjach. Poleertex AI uznaje pole parameters za opcjonalne, więc możesz zaprojektować kontener tak, by tego wymagał, używaj go tylko wtedy, gdy go podasz, lub zignoruj go.

Dowiedz się więcej o wymaganiach dotyczących treści żądania.

Wymagania dotyczące odpowiedzi

Każda odpowiedź na prognozę musi mieć co najmniej 1,5 MB. Serwer HTTP musi wysyłać odpowiedzi z treściami JSON o następującym formacie:

{
  "predictions": PREDICTIONS
}

W tych odpowiedziach zastąp PREDICTIONS tablicą wartości JSON reprezentujących podpowiedzi wygenerowane przez kontener dla każdej INSTANCES w odpowiednim żądaniu.

Gdy Twój serwer HTTP wyśle tę odpowiedź, zanim przywróci ją klientowi, zacznie dodawać pole deployedModelId. To pole określa, który element DeployedModel w elemencie Endpoint wysyła odpowiedź. Dowiedz się więcej o formacie treści odpowiedzi.

Wymagania dotyczące publikowania obrazów w kontenerach

Obraz kontenera musisz przekazać do Rejestru artefaktów lub Rejestru kontenera, by użyć go w połączeniu z telefonami internetowymi. Dowiedz się, jak przekazać obraz kontenera do rejestru artefaktów lub przekazać obraz kontenera do rejestru kontenerów.

W szczególności musisz przekazać obraz kontenera do repozytorium, które spełnia poniższe wymagania dotyczące lokalizacji i uprawnień.

Lokalizacja

Jeśli używasz Rejestru artefaktów, repozytorium musi używać regionu odpowiadającego regionalnemu punktowi końcowemu, w którym planujesz utworzyć element Model. Jeśli na przykład planujesz utworzyć Model w punkcie końcowym us-central1-aiplatform.googleapis.com, pełna nazwa obrazu kontenera musi zaczynać się od us-central1-docker.pkg.dev/. Nie używaj repozytorium multiregionalnego jako obrazu kontenera.

Jeśli korzystasz z kontenera, Twoje repozytorium może używać dowolnej z nazw hosta rejestru.

Uprawnienia

Tworząc Model, musisz mieć uprawnienia do pobierania obrazu kontenera. W szczególności:

Agent usług kręgowychertex w Twoim projekcie to konto usługi zarządzane przez Google, które umożliwia firmie Interex AI korzystanie z innych usług Google Cloud. To konto usługi ma adres e-mail service-PROJECT_NUMBER@gcp-sa-aiplatform.iam.gserviceaccount.com, gdzie PROJECT_NUMBER jest zastępowany przez numer projektu projektu kręgowego AI.

Jeśli obraz kontenera został przekazany do tego samego projektu Google Cloud, w którym używasz sztucznej inteligencji, nie musisz konfigurować żadnych uprawnień. Domyślne uprawnienia przypisane do agenta usług kręgowychertex są wystarczające.

Jeśli natomiast obraz kontenera został przekazany do innego projektu Google Cloud niż ten, w którym używasz sztucznej inteligencji, musisz przypisać rolę Czytnika rejestru artefaktów dla repozytorium artefaktów Agent usług internetowychexTex lub nadaj rolę Przeglądarka obiektów pamięci dla zasobnika Cloud Storage, którego używa kontener kontenera.

Uzyskiwanie dostępu do artefaktów modelu

Podczas tworzenia niestandardowego szkolenia Model bez kontenera niestandardowego musisz określić identyfikator URI katalogu Cloud Storage z artefaktami modelu w polu artifactUri. . Gdy tworzysz Model z kontenerem niestandardowym, udostępnianie artefaktów modelu w Cloud Storage jest opcjonalne.

Jeśli obraz kontenera zawiera artefakty potrzebne do wyświetlania podpowiedzi, nie musisz wczytywać plików z Cloud Storage. Jeśli jednak podasz artefakty modelu, określając pole artifactUri, kontener musi załadować te artefakty po uruchomieniu. Po uruchomieniu kontenera przez system uprawniający do korzystania z treści werteksów, zmienna środowiskowa AIP_STORAGE_URI zostaje ustawiona na identyfikator URI Cloud Storage zaczynający się od gs://. Polecenie punktu początkowego kontenera może pobrać katalog określony przez ten identyfikator URI, by uzyskać dostęp do artefaktów modelu.

Pamiętaj, że wartość zmiennej środowiskowej AIP_STORAGE_URI nie jest identyczna z identyfikatorem URI Cloud Storage określonym w polu artifactUri podczas tworzenia Model. Zamiast tego AIP_STORAGE_URI wskazuje kopię katalogu artefaktów modelu w innym zasobniku Cloud Storage, którym zarządza sztuczna inteligencja. Tworząc Model, wypełniamy ten katalog werteksie. Nie możesz zaktualizować zawartości katalogu. Jeśli chcesz użyć nowych artefaktów modelu, musisz utworzyć nowy element Model.

Konto usługi, którego domyślnie używa kontener, ma uprawnienia do odczytu z tego identyfikatora URI.

Jeśli natomiast określisz niestandardowe konto usługi podczas wdrażania Model na urządzeniu Endpoint, system Verex AI automatycznie przydzieli wskazane konto usługi Storage Object Viewer (roles/storage.objectViewer) roli zasobnika Cloud Identyfikator URI.

Do wczytywania artefaktów modelu użyj dowolnej biblioteki, która obsługuje dane domyślne aplikacji (ADC). nie musisz bezpośrednio konfigurować uwierzytelniania.

Zmienne środowiskowe dostępne w kontenerze

Po uruchomieniu polecenie punktu początkowego kontenera może odwoływać się do zmiennych środowiska skonfigurowanych ręcznie, a także do zmiennych ustawionych automatycznie przez systemexample.com. W tej sekcji opisano wszystkie sposoby ustawiania zmiennych środowiskowych oraz szczegółowe informacje na temat zmiennych ustawianych automatycznie przez systemexample.com.

Zmienne ustawione w obrazie kontenera

Aby ustawić zmienne środowiskowe w obrazie kontenera podczas jego tworzenia, użyj DockeraENV instrukcji. Nie ustawiaj żadnych zmiennych środowiska, które zaczynają się od prefiksu AIP_.

Polecenie punktu początkowego kontenera może używać tych zmiennych środowiska, ale nie można odwoływać się do nich w żadnym z pól interfejsu API Model.

Zmienne ustawione przez sztuczną inteligencję

Po uruchomieniu kontenera przez system uprawniający do korzystania z treści w pionie ustawia w nim następujące zmienne środowiskowe. Każda zmienna zaczyna się od prefiksu AIP_. Nie ustawiaj ręcznie żadnych zmiennych środowiska korzystających z tego prefiksu.

Polecenie punktu początkowego kontenera ma dostęp do tych zmiennych. Aby dowiedzieć się, które pola interfejsu APIexPex mogą też odwoływać się do tych zmiennych, przeczytaj dokumentację interfejsu API ModelContainerSpec.

Nazwa zmiennej Wartość domyślna Jak skonfigurować wartość Szczegóły
AIP_ACCELERATOR_TYPE Bez ustawienia Po wdrożeniu plikuModel jakoDeployedModel doEndpoint zasób, ustawdedicatedResources.machineSpec.acceleratorType pole. W razie potrzeby ta zmienna określa typ akceleratora używanego przez instancję maszyny wirtualnej, na której działa kontener.
Identyfikator AIP_DEPLOYED_MODEL_ID Ciąg cyfr określający DeployedModel, do którego został wdrożony ten kontener Model. Brak możliwości konfiguracji Jest to wartość pola DeployedModel id.
AIP_ENDPOINT_ID Ciąg cyfr określający Endpoint, na którym został wdrożony kontener Model. Brak możliwości konfiguracji Ta wartość jest ostatnim segmentemEndpoint użytkownikaname pole (następująca liczba:endpoints/ ).
AIP_FRAMEWORK CUSTOM_CONTAINER Brak możliwości konfiguracji
AIP_HEALTH_ROUTE /v1/endpoints/ENDPOINT/deployedModels/DEPLOYED_MODEL

W tym ciągu zastąp ENDPOINT wartością zmiennej AIP_ENDPOINT_ID, a DEPLOYED_MODEL - wartością zmiennej AIP_DEPLOYED_MODEL_ID.
Podczas tworzenia Model ustaw pole containerSpec.healthRoute. Zmienne te określają ścieżkę HTTP w kontenerze, do którego jest wysyłana kontrola stanu.
AIP_HTTP_PORT 8080 Podczas tworzenia Model ustaw pole containerSpec.ports. Pierwszy wpis w tym polu staje się wartością AIP_HTTP_PORT. Do tego portu w kontenerze AI wysyła sprawdzanie poprawności działania, sprawdzanie stanu i żądania prognozy. Serwer HTTP kontenera musi nasłuchiwać żądań na tym porcie.
AIP_MACHINE_TYPE Brak wartości domyślnej, należy skonfigurować Gdy wdrażasz Model jako DeployedModel w zasobie Endpoint, ustaw pole dedicatedResources.machineSpec.machineType. Ta zmienna określa typ maszyny wirtualnej, na której działa kontener.
AIP_MODE PREDICTION Brak możliwości konfiguracji Ta zmienna oznacza, że kontener działa na sztucznej inteligencji kręgów, by wyświetlać podpowiedzi online. Możesz użyć tej zmiennej środowiskowej, by dodać niestandardową logikę do kontenera, by działała w wielu środowiskach komputerowych, ale korzystała tylko z określonych ścieżek kodu w przypadku korzystania z sztucznej inteligencji.
AIP_MODE_VERSION 1.0.0 Brak możliwości konfiguracji Ta zmienna oznacza wersję niestandardowych wymagań kontenera (tego dokumentu), których spełnienie przez systemertex.pl wymaga. Ten dokument jest aktualizowany zgodnie z wersją semantyki.
AIP_MODEL_NAME Wartość zmiennej AIP_ENDPOINT_ID Brak możliwości konfiguracji Zobacz wiersz AIP_ENDPOINT_ID. Ta zmienna istnieje ze względu na zgodność.
AIP_PREDICT_ROUTE /v1/endpoints/ENDPOINT/deployedModels/DEPLOYED_MODEL:predict

W tym ciągu zastąp ENDPOINT wartością zmiennej AIP_ENDPOINT_ID, a DEPLOYED_MODEL - wartością zmiennej AIP_DEPLOYED_MODEL_ID.
Podczas tworzenia Model ustaw pole containerSpec.predictRoute. Ta zmienna określa ścieżkę HTTP w kontenerze, do której przekierowuje żądania prognozy.
AIP_PROJECT_NUMBER Numer projektu projektu Google Cloud, w którym używasz sztucznej inteligencji Brak możliwości konfiguracji
AIP_STORAGE_URI
  • Jeśli nie ustawisz pola artifactUri podczas tworzenia Model: pusty ciąg
  • Jeśli ustawisz pole artifactUri podczas tworzenia Model: identyfikator URI usługi Cloud Storage (rozpoczynający się od gs://) określający katalog w zasobniku zarządzanym przez systemexample.com
Brak możliwości konfiguracji Ta zmienna określa w razie potrzeby katalog zawierający kopię artefaktów modelu.
AIP_VERSION_NAME Wartość zmiennej AIP_DEPLOYED_MODEL_ID Brak możliwości konfiguracji Zobacz wiersz AIP_DEPLOYED_MODEL_ID. Ta zmienna istnieje ze względu na zgodność.

Zmienne ustawione w zasobie Model

Podczas tworzenia Model możesz ustawić dodatkowe zmienne środowiskowe w polu containerSpec.env.

Polecenie punktu początkowego kontenera ma dostęp do tych zmiennych. Aby dowiedzieć się, które pola interfejsu APIexPex mogą też odwoływać się do tych zmiennych, przeczytaj dokumentację interfejsu API ModelContainerSpec.

Co dalej?