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 |
|---|---|
|
Une liste des noms des méthodes disponibles sur l’objet modèle. Les modèles TensorFlow ont |
|
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 |
|
Si le modèle attend plusieurs entrées de tenseur. La valeur par défaut est |
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)
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")