Snowpark ML Data Connector¶
O módulo DataConnector oferece uma interface unificada para ler os dados do Snowflake e convertê-los em formatos compatíveis com estruturas populares de aprendizado de máquina, como PyTorch e TensorFlow.
DataConnector usa automaticamente a ingestão de dados otimizada ao ser executado no Container Runtime para ML.
Nota
Este tópico pressupõe que o módulo Snowpark ML esteja instalado. Caso contrário, consulte Como usar o Snowflake ML localmente.
Criação de uma DataConnector¶
Você pode criar uma instância do DataConnector de várias maneiras:
A partir de uma consulta em SQL usando
DataConnector.from_sql()
De um Snowpark DataFrame usando
DataConnector.from_dataframe()
De um Snowflake Dataset usando
DataConnector.from_dataset()
from snowflake.ml import dataset
from snowflake.ml.data import DataConnector
# Create a DataConnector from a SQL query
connector = DataConnector.from_sql("SELECT * FROM my_table", session=session)
# Create a DataConnector from a Snowpark DataFrame
df = session.table(my_table)
connector = DataConnector.from_dataframe(df)
# Create a DataConnector from a Snowflake Dataset
ds = dataset.load_dataset(session, "my_dataset", "v1")
connector = DataConnector.from_dataset(ds)
Uso com PyTorch¶
Para uso com PyTorch, use to_torch_dataset()
para obter um IterableDataset que pode então ser passado para um PyTorch DataLoader. O DataLoader itera sobre os dados e produz tensores PyTorch em lote. Os dados são carregados de forma contínua para máxima eficiência.
from torch.utils.data import DataLoader
torch_ds = connector.to_torch_dataset(
batch_size=4,
shuffle=True,
drop_last_batch=True
)
for batch in DataLoader(torch_ds, batch_size=None, num_workers=0):
print(batch)
Uso com TensorFlow¶
Para uso com TensorFlow, use o método to_tf_dataset()
para obter um Tensorflow Dataset: a iteração sobre o conjunto de dados produz tensores TensorFlow em lote. Os dados são carregados de forma contínua para máxima eficiência.
tf_ds = connector.to_tf_dataset(
batch_size=4,
shuffle=True,
drop_last_batch=True
)
for batch in tf_ds:
print(batch)
Opções de processamento de dados¶
Embaralhamento¶
Passe shuffle=True
para embaralhar aleatoriamente os dados durante a ingestão. Isso pode ajudar a evitar o ajuste excessivo durante o treinamento do modelo. Para uma discussão sobre o valor do embaralhamento, consulte Por que os dados deveriam ser embaralhados para tarefas de machine learning?
Loteamento¶
Use o parâmetro batch_size
para controlar o tamanho dos lotes de dados. O processamento em lote é feito de forma eficiente no nível de ingestão de dados. Ao usar com PyTorch DataLoaders, você deve passar explicitamente batch_size=None
ao instanciar DataLoader
para evitar a duplicação de lotes. Consulte Uso com PyTorch para ver um exemplo de uso com o DataLoader
Você também pode descartar o último lote se ele estiver incompleto, passando drop_last_batch=True
para to_torch_datapipe
ou para to_tf_dataset
.