TensorFlow

Le registre des modèles ML de Snowflake prend en charge les modèles créés à l’aide de TensorFlow (modèles dérivés de tensorflow.Module) et modèles Keras v2 (keras.Model avec la version Keras < 3.0.0).

Note

Pour Keras 3.0.0 ou ultérieure, utilisez le gestionnaire Keras.

Les options supplémentaires suivantes peuvent être utilisées dans le dictionnaire options lors de l’appel à log_model :

Option

Description

target_methods

Une liste des noms des méthodes disponibles sur l’objet modèle. Les modèles TensorFlow ont __call__ comme méthode cible par défaut. Les modèles Keras v2 ont predict comme méthode cible par défaut.

cuda_version

La version de l’environnement d’exécution CUDA à utiliser lors du déploiement sur une plateforme avec GPU ; la valeur par défaut est 11.8. S’il est défini manuellement sur None, le modèle ne peut pas être déployé sur une plateforme ayant un GPU.

multiple_inputs

Si le modèle attend plusieurs entrées de tenseur. La valeur par défaut est False. Lorsque la valeur est True, le modèle accepte une liste de tenseurs en entrée au lieu d’un seul tenseur.

Vous devez spécifier le paramètre sample_input_data ou signatures lors de la journalisation d’un modèle TensorFlow afin que le registre connaisse les signatures des méthodes cibles.

Note

Les modèles Keras v2 ne peuvent avoir qu’une seule méthode cible.

Note

Lorsque vous utilisez des pandas DataFrames (qui utilisent float64 par défaut), assurez-vous que votre modèle TensorFlow utilise tf.float64 pour les variables et les signatures d’entrée tf.TensorSpec pour éviter les erreurs de correspondance de type dtype.

Exemples

Ces exemples supposent que reg est une instance de snowflake.ml.registry.Registry.

Module TensorFlow

L’exemple suivant montre la création d’un modèle TensorFlow en sous-classant tf.Module, son enregistrement dans le registre de modèles ML de Snowflake et l’exécution d’une inférence.

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

Modèle séquentiel Keras v2

L’exemple suivant illustre l’entraînement d’un modèle séquentiel Keras v2, son enregistrement dans le registre de modèles ML de Snowflake, ainsi que l’exécution d’une inférence.

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