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
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
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 paraFileSet.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étodoto_torch_datapipe
outo_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
.