Service Management und Skalierung¶
Sobald ein Modell bei Snowpark Container Services (SPCS) eingesetzt wird, müssen Sie dessen Lebenszyklus, Ressourcenverbrauch und Zuverlässigkeit verwalten. Auf dieser Seite werden Standardoperationen, Beobachtbarkeit und die Konfiguration der hohen Verfügbarkeit für Produktionsworkloads behandelt.
Verwalten von Diensten¶
Snowpark Container-Dienste bieten eine SQL-Weboberfläche für die Verwaltung von Diensten. Sie können die Befehle DESCRIBE SERVICE und ALTER SERVICE für SPCS-Dienste verwenden, die von Snowflake Model Serving erstellt wurden, genauso wie für die Verwaltung aller anderen SPCS-Dienste. Sie können beispielsweise Folgendes tun:
Ändern Sie MIN_INSTANCES und andere Eigenschaften eines Dienstes
Einen Dienst verwerfen (löschen)
Einen Dienst für ein anderes Konto freigeben
Änderung der Eigentümerschaft eines Services (der neue Eigentümer muss READ-Zugriff auf das Modell haben)
Bemerkung
Wenn der Eigentümer eines Dienstes aus irgendeinem Grund den Zugriff auf das zugrunde liegende Modell verliert, funktioniert der Dienst nach einem Neustart nicht mehr. Er läuft weiter, sobald er neu gestartet wird.
Um die Reproduzierbarkeit und Fehlersuchbarkeit zu gewährleisten, dürfen Sie die Spezifikation eines bestehenden Inferenzdienstes nicht ändern. Sie können jedoch die Spezifikation kopieren, sie anpassen und die angepasste Spezifikation verwenden, um Ihren eigenen Dienst zum Hosten des Modells zu erstellen. Diese Methode schützt jedoch nicht davor, dass das zugrunde liegende Modell gelöscht wird. Außerdem wird die Herkunft nicht verfolgt. Es ist am besten, Snowflake Model Serving die Erstellung von Diensten zu gestatten.
Skalieren von Diensten¶
Bemerkung
Ab snowflake-ml-python 1.25.0 können Sie die Skalierungsgrenzen für Ihren Inferenzdienst definieren, indem Sie „min_instances“ und „max_instances“ innerhalb der Methode „create_service“ festlegen.
Funktionsweise der automatischen Skalierung¶
Der Dienst wird mit der in „min_instances“ angegebenen Anzahl von Knoten initialisiert und dynamisch innerhalb Ihres definierten Bereichs skaliert, der auf dem Echtzeit-Datenverkehr und der Hardware-Auslastung basiert.
Skalierung auf Null (automatisches Anhalten): Wenn „min_instances“ auf 0 (Standard) gesetzt ist, wird der Dienst automatisch ausgesetzt, wenn 30 Minuten lang kein Datenverkehr festgestellt wird.
Skalierungslatenz: Skalierungstrigger werden normalerweise nach einer Minute aktiviert, nachdem die erforderliche Bedingung erfüllt ist. Beachten Sie, dass die gesamte Einrichtungszeit diese Trigger-Periode zuzüglich der Zeit enthält, die für die Bereitstellung und Initialisierung neuer Dienstinstanzen benötigt wird.
Best Practices für die Konfiguration¶
Parameter |
Empfohlene Strategie |
|---|---|
min_instances |
Legen Sie für Produktionsworkloads 1 oder mehr fest, um eine sofortige Verfügbarkeit sicherzustellen und Verzögerungen beim Kaltstart zu vermeiden. |
max_instances |
Stellen Sie dies ein, um Spitzenlasten zu erfüllen und gleichzeitig eine Obergrenze für den Ressourcenverbrauch und die Kosten einzuhalten. |
Aussetzen von Diensten¶
Der Standardwert „min_instances=0“ ermöglicht es dem Dienst, nach 30 Minuten Inaktivität automatisch anzuhalten. Eingehende Anforderungen lösen ein Fortsetzen aus, wobei die Gesamtverzögerung durch die Verfügbarkeit des Computepools und die Ladezeit des Modells (Startverzögerung) bestimmt wird.
Um einen Service manuell anzuhalten oder fortzusetzen, verwenden Sie den Befehl ALTER SERVICE.
ALTER SERVICE my_service [ SUSPEND | RESUME ];
Löschen von Modellen¶
Sie können Modelle und Modellversionen wie gewohnt über die SQL-Weboberfläche oder die Python-API verwalten, mit der Einschränkung, dass ein Modell oder eine Modellversion, das/die von einem Dienst verwendet wird (unabhängig davon, ob es/sie läuft oder ausgesetzt ist), nicht gelöscht werden kann. Um ein Modell oder eine Version zu löschen, müssen Sie zuerst den Dienst löschen.
Überwachen von Diensten¶
Wenn Sie Modelle in Snowpark Container Services ausführen, können Sie den Zustand des Dienstes überwachen und Probleme beheben, indem Sie auf Containerprotokolle und Metriken zugreifen. Modellbereitstellungsdienste erstellen Protokolle, die Ihnen helfen können, das Verhalten von Diensten zu verstehen, Fehler zu diagnostizieren und die Leistung zu optimieren.
Umfassende Informationen zur Überwachung von SPCS-Diensten, einschließlich Zugriff auf Metriken und Protokolle, finden Sie unter Überwachen von Diensten.
In Snowsight¶
Sie können Modellbereitstellungsdienste in Snowsight überwachen:
Wählen Sie im Navigationsmenü Monitoring » Services & jobs aus.
Wählen Sie auf der Registerkarte Services Ihren Dienst aus, um die Seite mit den Dienstdetails anzuzeigen.
Auf der Registerkarte Overview werden Informationen zum Dienst angezeigt, darunter Computepool, Endpunkte und die Anzahl der Instanzen.
Die Registerkarten Logs, Metrics und Events bieten Protokolle, Leistungsmetriken und Dienstereignisse (z. B. Bereitstellung von Instanzen und Herunterfahren). Filtern Sie die Ergebnisse wie erforderlich nach Instanz und Containername.
Zugreifen auf Dienstprotokolle¶
Sie können mit einer der folgenden Methoden auf die Protokolle Ihres Modells zugreifen, das Dienste bereitstellt:
Verwenden der Diensthilfsfunktion¶
Die Bereitstellung von Modellen enthält eine integrierte Hilfsfunktion, die Protokolle aus der Ereignistabelle für aktive oder angehaltene Dienste abruft:
-- Retrieve logs using the service helper function
SELECT * FROM TABLE(mydb.myschema.my_model_service!SPCS_GET_LOGS())
WHERE
timestamp > dateadd(hour, -1, current_timestamp())
AND instance_id = 0 -- choose all instances or one particular
AND container_name = 'model-inference';
Direktes Abfragen der Ereignistabelle¶
Wenn Sie eine Ereignistabelle für Ihr Konto konfiguriert haben, können Sie diese direkt abfragen, um Dienstprotokolle abzurufen:
-- Find the event table for your account
SHOW PARAMETERS LIKE 'event_table' IN ACCOUNT;
-- Query the event table for model service logs
SELECT TIMESTAMP, RESOURCE_ATTRIBUTES, RECORD_ATTRIBUTES, VALUE
FROM <current_event_table_for_your_account>
WHERE timestamp > dateadd(hour, -1, current_timestamp())
AND RESOURCE_ATTRIBUTES:"snow.service.name" = '<model_service_name>'
AND RECORD_TYPE = 'LOG'
AND RESOURCE_ATTRIBUTES:"snow.service.container.instance" = '0' -- choose all instances or one particular
AND RESOURCE_ATTRIBUTES:"snow.service.container.name" = 'model-inference'
ORDER BY timestamp DESC
LIMIT 10;
Verwenden der Systemfunktion (nur Ausführung von Instanzen)¶
Für das Echtzeit-Debugging von aktiven Containern können Sie die Funktion SYSTEM$GET_SERVICE_LOGS verwenden:
-- Retrieve logs from a specific service instance
SELECT SYSTEM$GET_SERVICE_LOGS('model_service_name', '0', 'model-inference', 10);
Bemerkung
Der Containername für Modellinferenzdienste lautet „model-inference“. Zur Fehlerbehebung bei der Image-Erstellung verwenden Sie „model-build“ als Containernamen.
Zugreifen auf Dienstmetriken¶
Modellbereitstellungsdienste geben Kennzahlen zu Leistung und Integrität aus, mit denen Sie die Auslastung von Ressourcen, die Anforderungsraten, die Latenz und andere operative Eigenschaften überwachen können. Diese Metriken werden in der Ereignistabelle erfasst und können abgefragt werden, um die Leistung des Dienstes im Laufe der Zeit zu analysieren.
Weitere Informationen zu SPCS-Dienstmetriken finden Sie unter Zugriff auf Ereignistabelle für Dienstmetriken.
Verwenden der Diensthilfsfunktion¶
Modellbereitstellungsdienste enthalten eine integrierte Hilfsfunktion, die Metriken aus der Ereignistabelle für aktive oder angehaltene Dienste abruft:
-- Retrieve metrics using the service helper function
SELECT *
FROM TABLE(mydb.myschema.my_model_service!SPCS_GET_METRICS())
WHERE
timestamp > dateadd(hour, -1, current_timestamp())
AND instance_id = 0 -- choose all instances or one particular
AND container_name = 'model-inference';
Direktes Abfragen der Ereignistabelle¶
Sie können die Ereignistabelle direkt abfragen, um bestimmte Metriken abzurufen und zu filtern:
-- Find the event table for your account
SHOW PARAMETERS LIKE 'event_table' IN ACCOUNT;
-- Query the event table for model service metrics
SELECT
timestamp,
RESOURCE_ATTRIBUTES:"snow.service.container.instance" as instance,
RESOURCE_ATTRIBUTES:"snow.service.container.name" as container,
RECORD:metric:"name" as metric,
value
FROM my_event_table_db.my_event_table_schema.my_event_table
WHERE timestamp > DATEADD(hour, -1, CURRENT_TIMESTAMP())
AND RESOURCE_ATTRIBUTES:"snow.service.name" = '<model_service_name>'
AND RECORD_TYPE = 'METRIC'
AND RESOURCE_ATTRIBUTES:"snow.service.container.instance" = '0' -- choose all instances or one particular
AND RESOURCE_ATTRIBUTES:"snow.service.container.name" = 'model-inference'
ORDER BY timestamp DESC
LIMIT 100;
Fehlertoleranz¶
In jedem verteilten System treten Fehler auf. Für geschäftskritische Workloads liegt es an den Benutzenden, den Dienst so zu konfigurieren, dass er gegenüber Knoten- und Zonenfehlern Ausfallsicherheit bietet.
Ausfallsicherheit gegenüber Knotenfehlern¶
Um Standard-Knotenausfälle zu tolerieren, empfiehlt Snowflake eine Überbereitstellung von 50 % oder die Beibehaltung von mindestens 3 Instanzen (je nachdem, welcher Wert höher ist).
Beispiel: Wenn Sie 4 Instanzen benötigen, um Spitzenlasten zu unterstützen, sollten Sie 6 Instanzen bereitstellen
Ausfallsicherheit gegenüber Zonenfehlern¶
Für geschäftskritische Workloads, die Ausfallsicherheit gegen einen vollständigen Zonenausfall erfordern, können Sie einen verteilten Computepool beim Erstellen eines Dienstes verwenden. Verteilte Computepools werden mit dem Parameter PLACEMENT_GROUP erstellt, der auf DISTRIBUTED gesetzt ist. Weitere Informationen zu verteilten Computepools finden Sie unter Platzierung des Computepools.
Konfigurationsanleitung¶
Konvertieren eines bestehenden Pools¶
Warnung
Sie können diese Einstellung bei einem aktiven Pool nicht ändern. Sie müssen ihn zuerst anhalten.
ALTER COMPUTE POOL my_pool SUSPEND;
ALTER COMPUTE POOL my_pool
SET PLACEMENT_GROUP = 'DISTRIBUTED';
ALTER COMPUTE POOL my_pool RESUME;
Zurücksetzen eines bestehenden Pools¶
Warnung
Sie können diese Einstellung bei einem aktiven Pool nicht ändern. Sie müssen ihn zuerst anhalten.
ALTER COMPUTE POOL my_pool SUSPEND;
ALTER COMPUTE POOL my_pool
UNSET PLACEMENT_GROUP;
ALTER COMPUTE POOL my_pool RESUME;
Überprüfung¶
Um zu bestätigen, dass Ihr Pool für HA korrekt konfiguriert ist, überprüfen Sie die Spalte „placement_group“:
DESCRIBE COMPUTE POOL my_service_pool;