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)
Copy

与 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)
Copy

与 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)
Copy

数据处理选项

混洗

传递 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_datapipeto_tf_dataset 来删除最后一批。

语言: 中文