Conectores do Snowpark ML Framework

O Snowpark ML inclui suporte para provisionamento de dados seguro e escalonável para as estruturas PyTorch e Tensorflow, que esperam dados em seus próprios formatos específicos. Para simplificar esse fluxo de trabalho, a biblioteca Snowpark ML fornece métodos convenientes criados com base em FileSet API para fornecer dados de um FileSet como tensores PyTorch ou registros TensorFlow. (Um FileSet representa um instantâneo imutável do resultado de uma consulta SQL na forma de arquivos em um estágio criptografado interno do lado do servidor.)

Nota

Este tópico pressupõe que o módulo Snowpark ML esteja instalado. Caso contrário, consulte Instalação do Snowpark ML.

Criação de um FileSet a partir de uma consulta

Consulte Criação e utilização de um FileSet para obter informações sobre como criar um FileSet a partir dos dados que você deseja usar com PyTorch ou TensorFlow. Em seguida, continue em uma das seguintes seções:

Alimentação de um FileSet para PyTorch

A partir de um FileSet do Snowflake, você pode obter um PyTorch DataPipe, que pode ser passado para um PyTorch DataLoader. O DataLoader itera sobre os dados FileSet e produz tensores PyTorch em lote. Crie o DataPipe usando o método to_torch_datapipe de FileSet e depois passe o DataPipe para o DataLoader do PyTorch:

from torch.utils.data import DataLoader

# See later sections about shuffling and batching
pipe = fileset_df.to_torch_datapipe(
    batch_size=4,
    shuffle=True,
    drop_last_batch=True)

for batch in DataLoader(pipe, batch_size=None, num_workers=0):
    print(batch)
    break
Copy

Alimentação de um FileSet para TensorFlow

Você pode obter um conjunto de dados TensorFlow de um FileSet do Snowflake usando o método to_tf_dataset do FileSet:

import tensorflow as tf

# See following sections about shuffling and batching
ds = fileset_df.to_tf_dataset(
    batch_size=4,
    shuffle=True,
    drop_last_batch=True)

for batch in ds:
    print(batch)
    break
Copy

A iteração sobre o conjunto de dados produz tensores em lote.

Embaralhamento de dados em FileSets

Muitas vezes vale a pena embaralhar os dados de treinamento para evitar o sobreajuste e outros problemas. Para uma discussão sobre o valor do embaralhamento, consulte Por que os dados deveriam ser embaralhados para tarefas de machine learning?

Se sua consulta ainda não embaralhar seus dados o suficiente, um FileSet poderá embaralhar os dados em dois momentos:

  • Quando o FileSet é criado usando FileSet.make.

    Todas as linhas da sua consulta são embaralhadas antes de serem gravadas no FileSet. Este é um embaralhamento global de alta qualidade e pode ser caro com conjuntos de dados grandes. Portanto, ele é realizado apenas uma vez, ao materializar o FileSet. Passe shuffle=True como argumento de palavra-chave para FileSet.make.

  • Quando você cria um conjunto de dados PyTorch DataPipe ou TensorFlow a partir de um FileSet.

    Neste ponto, a ordem dos arquivos no FileSet é aleatória, assim como a ordem das linhas em cada arquivo. Isto pode ser considerado um embaralhamento global “aproximado”. Ele tem uma qualidade inferior em comparação com um verdadeiro embaralhamento global, mas é muito mais barato. Para embaralhar neste estágio, passe shuffle=True como um argumento de palavra-chave para o método to_torch_datapipe ou to_tf_dataset do FileSet.

Para obter melhores resultados, embaralhe duas vezes: ao criar o FileSet e ao alimentar os dados para PyTorch ou TensorFlow.

Colocação de dados em lote em FileSets

FileSets têm um recurso de lote que funciona da mesma forma que a funcionalidade de lote no PyTorch e TensorFlow, mas é mais eficiente. Snowflake recomenda que você use o parâmetro batch_size nos métodos to_torch_datapipe e to_tf_dataset de FileSet em vez de o PyTorch ou TensorFlow fazer a colocação em lote. Com PyTorch, para desativar sua funcionalidade de lote, você deve passar explicitamente batch_size=None ao instanciar 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.