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
将 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
迭代数据集将生成批处理张量。
在 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_datapipe
或to_tf_dataset
方法。
为获得最佳结果,请随机混洗两次:创建 FileSet 和将数据提供给 PyTorch 或 TensorFlow 时。
批处理 FileSets 中的数据¶
FileSets 具有批处理功能,其工作方式与 PyTorch 和 TensorFlow 中的批处理功能相同,但效率更高。Snowflake 建议您在 FileSet 的 to_torch_datapipe
和 to_tf_dataset
方法中使用 batch_size
参数,而不是让 PyTorch 或 TensorFlow 进行批处理。使用 PyTorch 时,若要禁用其批处理功能,必须在实例化 DataLoader
时显式传递 batch_size=None
。
如果最后一批不完整,也可以通过将 drop_last_batch=True
传递给 to_torch_datapipe
或 to_tf_dataset
来删除最后一批。