Online-Features erstellen und bereitstellen¶
Sie können Online-Features für Workflows für latenzabhängige ML-Inferenzen erstellen und bereitstellen. Aktivieren Sie Online-Features in einer Feature-Ansicht, die Sie erstellen, oder aktualisieren Sie eine vorhandene Feature-Ansicht, um die Online-Bereitstellung zu ermöglichen.
Wichtig
Sie müssen über Snowflake Version 9.26 oder höher und über snowflake-ml-python Version 1.18.0 verfügen, um die Online-Feature-Bereitstellung verwenden zu können.
Die Online-Feature-Bereitstellung bietet die folgenden Vorteile:
Suche nach Punkten mit niedriger Latenz für Inferenz in Echtzeit
Automatische Datensynchronisierung aus Offline-Quellen
Vollständig verwaltete Infrastruktur und Wartung
Flexible Skalierung für anspruchsvolle Workloads
Die Online-Feature-Bereitstellung wird von Online-Feature-Tabellen unterstützt.
Aktualität der Daten¶
Eine Feature-Ansicht mit Online-Feature-Bereitstellung synchronisiert automatisch Daten aus dem Offline-Speicher.
Verwenden Sie den Parameter target_lag, um zu konfigurieren, wie oft Daten mit Ihrer Online-Feature-Tabelle synchronisiert werden sollen. Sie können diesen Wert von einem Minimum von 10 Sekunden auf ein Maximum von 8 Tagen einstellen.
Aktualisierungsmodi¶
Snowflake verwendet die folgenden Aktualisierungsmodi für die Aktualisierung der Daten:
Inkrementelle Aktualisierung: Dies ist der bevorzugte und effizienteste Modus. Snowflake verfolgt Änderungen in den Quellen und führt nur neue oder aktualisierte Zeilen im Online-Speicher zusammen. Dies minimiert die Compute- und E/A-Kosten.
Vollständige Aktualisierung: Dieser Modus löscht alle vorhandenen Daten in der Tabelle und lädt alles aus der Quelle neu. Er ist ressourcenintensiver und wird in Fällen verwendet, in denen eine inkrementelle Aktualisierung nicht möglich ist.
Sie können den Aktualisierungsmodus explizit auf INCREMENTAL oder FULL festlegen. Sie können ihn auch auf AUTO einstellen, damit Snowflake den jeweils effizientesten verfügbaren Aktualisierungsmodus ermitteln kann.
Handhabung von Zeitreihendaten¶
Um Datenkonsistenz sicherzustellen, können Sie einen timestamp_col-Wert angeben. Wenn in der Quelle mehrere Zeilen mit demselben Primärschlüssel gefunden werden, erfasst Snowflake nur die Version mit dem neuesten Zeitstempel. Wenn Sie keine Zeitstempelspalte angeben, hat die zuletzt verarbeitete Zeile Vorrang.
Zugriff für die Erstellung und Bereitstellung von Online-Features gewähren¶
Bevor Sie mit der Verwendung des Online-Feature-Speichers beginnen, müssen Sie den entsprechenden Rollen die erforderlichen Berechtigungen erteilen.
Um die Berechtigungen bereitzustellen, verwenden Sie das unter Zugriffssteuerung mit SQL einrichten beschriebene Zugriffssteuerungsskript. Nachdem Sie das Skript ausgeführt haben, gewähren Sie die folgenden Berechtigungen:
GRANT CREATE ONLINE FEATURE TABLE ON SCHEMA IDENTIFIER($SCHEMA_FQN) TO ROLE IDENTIFIER($FS_ROLE_PRODUCER);
GRANT SELECT, MONITOR ON FUTURE ONLINE FEATURE TABLES IN SCHEMA IDENTIFIER($SCHEMA_FQN) TO ROLE IDENTIFIER($FS_ROLE_CONSUMER);
GRANT SELECT, MONITOR ON ALL ONLINE FEATURE TABLES IN SCHEMA IDENTIFIER($SCHEMA_FQN) TO ROLE IDENTIFIER($FS_ROLE_CONSUMER);
Online-Features mithilfe der Python-API verwalten und bereitstellen¶
Im folgenden Beispiel wird gezeigt, wie Sie die Online-Feature-Bereitstellung konfigurieren, wenn Sie eine neue Feature-Ansicht erstellen. Sie können das OnlineConfig-Objekt verwenden, um die Einstellungen für die Online-Bereitstellung anzugeben, z. B. die Verzögerung bei der Aktualität der Zieldaten.
from snowflake.ml.feature_store import FeatureView
from snowflake.ml.feature_store.feature_view import OnlineConfig
online_config = OnlineConfig(enable=True, target_lag="30 seconds")
fv = FeatureView(
name="MY_FV",
entities=[entity],
feature_df=my_df, # Snowpark DataFrame containing feature transformations
timestamp_col="ts", # optional timestamp column name in the dataframe
refresh_freq="5 minutes",
refresh_mode="AUTO", # refresh mode of the feature data
desc="my feature view", # optional description
online_config=online_config
)
fv = fs.register_feature_view(feature_view=fv, version="v1")
Dies sind die OnlineConfig-Parameter:
Parameter |
Typ |
Beschreibung |
Standard |
|---|---|---|---|
enable |
Boolescher Wert, optional |
Gibt an, ob die Online-Feature-Bereitstellung für die Feature-Ansicht aktiviert werden soll. |
Standard: False |
target_lag |
Zeichenfolge, optional |
Zeichenfolge im Format „<num> (seconds|minutes|hours|days|s|m|h|d)“ unter Angabe der Verzögerung bei der Aktualität der Zieldaten. |
Standard: 10 Sekunden |
Bemerkung
refresh_freq und OnlineConfig.target_lag agieren unabhängig voneinander. Im obigen Beispiel ist die effektive Weitergabeverzögerung der Zieldaten von den Quelldaten, dargestellt durch my_df, zum Online-Datenspeicher refresh_freq + online_config.target_lag.
Feature-Ansicht aktualisieren, um die Online-Feature-Bereitstellung zu aktivieren/deaktivieren¶
Bei bestehenden Feature-Ansichten können Sie die Konfiguration der Online-Feature-Bereitstellung über die Methode update_feature_view aktualisieren. Sie können diese Methode verwenden, um die Online-Feature-Bereitstellung für bestehende Feature-Ansichten zu aktivieren.
Verwenden Sie den folgenden Code, um die Online-Feature-Bereitstellung zu aktivieren.
# Enable online feature serving
fs.update_feature_view(
name="<name>",
version="<version>",
online_config=OnlineConfig(enable=True, target_lag="5 minutes")
)
Verwenden Sie den folgenden Code, um die Online-Feature-Bereitstellung zu deaktivieren.
# Disable online feature serving
fs.update_feature_view(
name="<name>",
version="<version>",
online_config=OnlineConfig(enable=False)
)
Features aus dem Online-Speicher abrufen¶
Um Feature-Werte für eine bestimmte Stichprobe aus dem Online-Speicher abzurufen, verwenden Sie die Methode read_feature_view, und übergeben Sie die Liste der Feature-Namen sowie die Join-Schlüssel der Stichprobe:
fs.read_feature_view(
feature_view=fv,
keys=[["<k_1>", "<k_2>"]],
feature_names=["<feature1>", "<feature2>", "<feature3>"],
store_type=StoreType.ONLINE
)
Online-Datenaktualisierung anhalten/fortsetzen¶
Verwenden Sie den folgenden Code, um die Datenaktualisierung vorübergehend anzuhalten.
fs.suspend_feature_view(feature_view=fv)
Verwenden Sie den folgenden Code, um die Datenaktualisierung fortzusetzen.
fs.resume_feature_view(feature_view=fv)
Diese Vorgänge halten sowohl die Offline-Feature-Ansicht (dynamische Tabelle und zugehörige Aufgabe) als auch die Online-Feature-Tabelle (falls vorhanden) an bzw. setzen sie fort, um einen konsistenten Zustand über alle Speichertypen hinweg sicherzustellen.
Feature-Ansicht manuelles aktualisieren¶
fs.refresh_feature_view(
feature_view=fv,
store_type=<store_type>
)
Das Argument store_type gibt an, ob Offline-Feature-Daten (StoreType.OFFLINE) oder Online-Feature-Daten (StoreType.ONLINE) aktualisiert werden sollen.
Verlauf der Aktualisierung anzeigen¶
fs.get_refresh_history(
feature_view=fv,
store_type=store_type
)
Das Argument store_type gibt an, ob der Aktualisierungsverlauf des Offline-Speichers (StoreType.OFFLINE) oder des Online-Speichers (StoreType.ONLINE) zurückgegeben werden soll.
Erläuterungen zur Kostenstruktur¶
Bei Online-Feature-Tabellen fallen Kosten für die folgenden Verbrauchsmodi an:
Virtual Warehouse Compute: Sowohl bei der Suche nach Schlüsseln als auch bei Datenaufnahmevorgängen verbrauchen Sie Credits für virtuelle Warehouses zu Standardtarifen. Weitere Informationen dazu finden Sie unter Credit-Nutzung für virtuelle Warehouses.
Cloud Services Compute: Erforderlich, um Änderungen in den zugrunde liegenden Basisobjekten zu erkennen und zu bestimmen, wann Aktualisierungsvorgänge erforderlich sind. Weitere Informationen dazu finden Sie unter Credit-Nutzung der Clouddienste.
Hybrid Table Storage: Die Speicherkosten basieren auf einem monatlichen Pauschalpreis pro GB. Dies ist teurer als die Kosten für herkömmlichen Snowflake-Speicher, aber identisch mit den Kosten für das Speichern von Hybridtabellen. Weitere Informationen dazu finden Sie in Tabelle 3(b) der Credit Consumption Table.
Hybrid Table Requests: Diese Anforderungen verwenden Serverlose Credit-Nutzung für Lese-/Schreibvorgänge in Zeilenspeicherclustern. Die Menge der Daten, die in diese Cluster geschrieben oder aus ihnen gelesen werden, wird zur Berechnung des Credit-Verbrauchs verwendet, mit einer Mindestnutzung von 4 KB pro Vorgang. Credits werden auch für Computeressourcen verbraucht, die für die Durchführung von Hintergrundvorgängen verwendet werden, z. B. für die Komprimierung. Weitere Informationen dazu finden Sie in Tabelle 5 der Credit Consumption Table.
Tipp
Eine inkrementelle Aktualisierung kann dabei helfen, die Kosten zu senken. Inkrementelle Aktualisierungen sind im Allgemeinen kosteneffizienter als eine vollständige Aktualisierung, was zu geringeren Kosten für Computeressourcen und Datenaufnahme führt.
Kostenüberwachung¶
Verwenden Sie folgende Ansichten, um die Kosten zu überwachen:
-- Hybrid table request credits
SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.HYBRID_TABLE_USAGE_HISTORY;
-- Storage consumption
SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.STORAGE_USAGE;
SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.DATABASE_STORAGE_USAGE_HISTORY;
-- Overall costs
SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.METERING_HISTORY;