TensorFlow

Die Snowflake ML Model Registry unterstützt Modelle, die mit TensorFlow erstellt wurden (von tensorflow.Module abgeleitete Modelle) und Keras v2-Modelle (keras.Model mit Keras-Version < 3.0.0).

Bemerkung

Für Keras 3.0.0 oder höher verwenden Sie die Keras-Handler.

Die folgenden zusätzlichen Optionen können im options-Dictionary verwendet werden, wenn Sie log_model abrufen:

Option

Beschreibung

target_methods

Liste mit den Namen der für das Modellobjekt verfügbaren Methoden. TensorFlow-Modelle haben __call__ als Standard-Zielmethode. Keras v2-Modelle haben predict als Standard-Zielmethode.

cuda_version

Die Version der CUDA-Laufzeitumgebung, die beim Bereitstellen auf einer Plattform mit GPU verwendet werden soll. Der Standardwert ist 11.8. Wird das Modell manuell auf None gesetzt, kann es nicht auf einer Plattform mit GPU eingesetzt werden.

multiple_inputs

Ob das Modell mehrere Tensor-Eingaben erwartet. Die Standardeinstellung ist False. Wann True, akzeptiert das Modell eine Liste von Tensoren als Eingabe anstelle eines einzelnen Tensors.

Sie müssen entweder den Parameter sample_input_data oder signatures angeben, wenn Sie ein TensorFlow-Modell protokollieren, damit die Registry die Signaturen der Zielmethoden kennt.

Bemerkung

Keras v2-Modelle können nur eine Zielmethode haben.

Bemerkung

Bei Verwendung von pandas DataFrames (die standardmäßig float64 verwenden) stellen Sie sicher, dass Ihr TensorFlow-Modell tf.float64 für Variablen und tf.TensorSpec-Eingabesignaturen verwendet, um dtype-Konfliktfehler zu vermeiden.

Beispiele

Diese Beispiele gehen davon aus, dass reg eine Instanz von snowflake.ml.registry.Registry ist.

TensorFlow-Modul

Das folgende Beispiel zeigt das Erstellen eines TensorFlow-Modells durch Unterklassen von tf.Module, Protokollieren in der Snowflake ML Model Registry und Ausführen von Ableitungen.

import tensorflow as tf
import pandas as pd

# Define a simple TensorFlow module
class LinearModel(tf.Module):
    def __init__(self, name=None):
        super().__init__(name=name)
        self.weight = tf.Variable(2.0, dtype=tf.float64, name="weight")
        self.bias = tf.Variable(1.0, dtype=tf.float64, name="bias")

    @tf.function(input_signature=[tf.TensorSpec(shape=(None, 1), dtype=tf.float64)])
    def __call__(self, x):
        return self.weight * x + self.bias

# Create model instance
model = LinearModel(name="linear_model")

# Create sample input data as DataFrame
sample_df = pd.DataFrame({"input": [1.0, 2.0, 3.0, 4.0, 5.0]})

# Log the model
model_ref = reg.log_model(
    model=model,
    model_name="my_tf_linear_model",
    version_name="v1",
    sample_input_data=sample_df,
)

# Make predictions (default target method is __call__)
test_df = pd.DataFrame({"input": [6.0, 7.0, 8.0]})
result_df = model_ref.run(test_df)
Copy

Sequenzielles Keras v2-Modell

Das folgende Beispiel zeigt das Training eines sequenziellen Keras v2-Modells und Protokollierung in der Snowflake ML Model Registry und Ausführen von Ableitungen.

import tf_keras as keras
from sklearn import datasets, model_selection

# Load dataset
iris = datasets.load_iris(as_frame=True)
X = iris.data
y = iris.target

# Rename columns for valid Snowflake identifiers
X.columns = [col.replace(' ', '_').replace('(', '').replace(')', '') for col in X.columns]

X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.2)

# Build Keras v2 model
model = keras.Sequential([
    keras.layers.Dense(64, activation='relu', input_shape=(X_train.shape[1],)),
    keras.layers.Dense(32, activation='relu'),
    keras.layers.Dense(3, activation='softmax')
])

model.compile(
    optimizer='adam',
    loss='sparse_categorical_crossentropy',
    metrics=['accuracy']
)

# Train the model
model.fit(X_train, y_train, epochs=50, verbose=0)

# Log the model
model_ref = reg.log_model(
    model=model,
    model_name="my_iris_classifier",
    version_name="v1",
    sample_input_data=X_test,
)

# Make predictions
result_df = model_ref.run(X_test[-10:], function_name="predict")
Copy