Snowpark ML Framework Connectors

Snowpark ML 支持为 PyTorch 和 Tensorflow 框架提供安全、可扩展的数据配置,这两个框架都需要自己特定格式的数据。为了简化此工作流程,Snowpark ML 库提供了构建在 FileSet API 之上的便捷方法,以 PyTorch Tensors 或 TensorFlow Records 的形式提供来自 FileSet 的数据。(A FileSet 表示内部服务器端加密暂存区中以文件形式呈现的 SQL 查询结果的不可变快照。)

备注

本主题假定已安装 Snowpark ML 模块。如果尚未安装,请参阅 安装 Snowpark ML

从查询中创建 FileSet

有关根据要用于 PyTorch 或 TensorFlow 的数据创建 FileSet 的信息,请参阅 创建并使用 FileSet。然后继续执行以下部分之一:

将 FileSet 提供给 PyTorch

从 Snowflake FileSet 中,您可以获得 PyTorch DataPipe,可以将其传递给 PyTorch DataLoader。DataLoader 迭代 FileSet 数据并生成批处理的 PyTorch Tensors。使用 FileSet 的 to_torch_datapipe 方法创建 DataPipe,然后将 DataPipe 传递给 PyTorch 的 DataLoader

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

将 FileSet 提供给 TensorFlow

您可以使用 FileSet 的 to_tf_dataset 方法,从 Snowflake FileSet 获取 TensorFlow 数据集:

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

迭代数据集将生成批处理张量。

在 FileSets 中混洗数据

对避免过度拟合和其他问题来说,对训练数据进行混洗通常很有价值。有关混洗数据的价值的讨论,请参阅 ` 为什么要为机器学习任务混洗数据? <https://datascience.stackexchange.com/questions/24511/why-should-the-data-be-shuffled-for-machine-learning-tasks (https://datascience.stackexchange.com/questions/24511/why-should-the-data-be-shuffled-for-machine-learning-tasks)>`__

如果您的查询尚未充分混洗数据,则 FileSet 可以出于以下两点对数据进行混洗:

  • 当使用 FileSet 创建 FileSet.make 时。

    查询中的所有行在写入 FileSet 之前都会进行混洗。这是一次高质量的全局混洗,对于大型数据集来说可能很昂贵。因此,仅在具体化 FileSet 时执行一次。将 shuffle=True 作为关键字实参传递给 FileSet.make

  • 当您从 FileSet 创建 PyTorch DataPipe 或 TensorFlow 数据集时。

    此时,FileSet 中的文件顺序是随机的,每个文件中行的顺序也是随机的。这可以被认为是“近似”的全局混洗。它的质量低于真正的全局混洗,但价格要便宜得多。若要在此暂存区进行混洗,请将 shuffle=True 作为关键字实参传递给 FileSet 的 to_torch_datapipeto_tf_dataset 方法。

为获得最佳结果,请随机混洗两次:创建 FileSet 和将数据提供给 PyTorch 或 TensorFlow 时。

批处理 FileSets 中的数据

FileSets 具有批处理功能,其工作方式与 PyTorch 和 TensorFlow 中的批处理功能相同,但效率更高。Snowflake 建议您在 FileSet 的 to_torch_datapipeto_tf_dataset 方法中使用 batch_size 参数,而不是让 PyTorch 或 TensorFlow 进行批处理。使用 PyTorch 时,若要禁用其批处理功能,必须在实例化 DataLoader 时显式传递 batch_size=None

如果最后一批不完整,也可以通过将 drop_last_batch=True 传递给 to_torch_datapipeto_tf_dataset 来删除最后一批。

语言: 中文