TensorFlow

O Snowflake ML Model Registry oferece suporte a modelos criados usando TensorFlow (modelos derivados de tensorflow.Module) e modelos Keras v2 (keras.Model com Keras versão < 3.0.0).

Nota

Para Keras 3.0.0 ou posterior, use o manipulador do Keras.

As seguintes opções adicionais podem ser usadas no dicionário options quando você chamar log_model:

Opção

Descrição

target_methods

Uma lista dos nomes dos métodos disponíveis no objeto de modelo. Os modelos do TensorFlow têm __call__ como o método de destino padrão. Os modelos do Keras v2 têm predict como o método de destino padrão.

cuda_version

A versão do tempo de execução CUDA a ser usada ao implantar em uma plataforma com GPU; o padrão é 11.8. Se definido manualmente como None, o modelo não poderá ser implementado em uma plataforma com GPU.

multiple_inputs

Se o modelo espera ou não várias entradas de tensores. O padrão é False. Quando True, o modelo aceitará uma lista de tensores como entrada em vez de um único tensor.

Você deve especificar o parâmetro sample_input_data ou signatures ao registrar um modelo TensorFlow para que o registro conheça as assinaturas dos métodos de destino.

Nota

Os modelos do Keras v2 só podem ter um método de destino.

Nota

Ao usar DataFrames pandas (que usam float64 por padrão), certifique-se de que seu modelo do TensorFlow use tf.float64 para variáveis e assinaturas de entrada tf.TensorSpec para evitar erros de incompatibilidade com dtype.

Exemplos

Estes exemplos pressupõem que reg seja uma instância de snowflake.ml.registry.Registry.

Módulo do TensorFlow

O exemplo a seguir demonstra a criação de um modelo do TensorFlow por meio da definição da subclasse tf.Module, registrando-o no Snowflake ML Model Registry e executando a inferência.

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

Modelo sequencial do Keras v2

O exemplo a seguir demonstra o treinamento de um modelo sequencial do Keras v2, seu registro no Snowflake ML Model Registry e a execução da inferência.

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