Snowpark ML Data Connector¶
DataConnector 模块提供统一接口,用于读取 Snowflake 数据并将其转换为与热门的机器学习框架(例如 PyTorch 和 TensorFlow)兼容的格式。
DataConnector 在 ML 的容器运行时 中运行时自动使用优化的数据引入。
备注
本主题假定已安装 Snowpark ML 模块。如果尚未安装,请参阅 在本地使用 Snowflake ML。
创建 DataConnector¶
您可以通过多种方式创建 DataConnector 实例:
通过使用
DataConnector.from_sql()
的 SQL 查询通过使用
DataConnector.from_dataframe()
的 Snowpark DataFrame通过使用
DataConnector.from_dataset()
的 Snowflake 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)
与 PyTorch 配合使用¶
要与 PyTorch 配合使用,请使用 to_torch_dataset()
获取IterableDataset,然后将其传递给 PyTorch DataLoader。DataLoader 迭代数据并生成批处理的 PyTorch 张量。数据以流式方式加载,以实现更高的效率。
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)
与 TensorFlow 配合使用¶
要与 TensorFlow 配合使用,请使用 to_tf_dataset()
方法获取 Tensorflow Dataset:迭代 Dataset,从而生成批处理的 TensorFlow 张量。数据以流式方式加载,以实现更高的效率。
tf_ds = connector.to_tf_dataset(
batch_size=4,
shuffle=True,
drop_last_batch=True
)
for batch in tf_ds:
print(batch)
数据处理选项¶
混洗¶
传递 shuffle=True
,在引入期间随机混洗数据。这有助于防止在模特训练期间过度拟合。有关混洗数据的价值的讨论,请参阅 ` 为什么要为机器学习任务混洗数据?<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)>`__
批处理¶
使用 batch_size
参数控制数据批次的大小。批处理在数据引入级得到高效处理。与 PyTorch DataLoaders 配合使用时,您必须在实例化 DataLoader
时显式传递 batch_size=None
,以防止双重批处理。有关与 DataLoader
配合使用的示例,请参阅 与 PyTorch 配合使用
如果最后一批不完整,也可以通过将 drop_last_batch=True
传递给 to_torch_datapipe
或 to_tf_dataset
来删除最后一批。