Snowpark ML Data Connector

DataConnector モジュールは、Snowflake データを読み取り、 PyTorch や TensorFlow のような一般的な機械学習フレームワークと互換性のある形式に変換するための統一インターフェイスを提供します。

DataConnector が ML のContainer Runtime に実行される場合、自動的に最適化されたデータ取り込みが使用されます。

注釈

このトピックでは、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を取得します。データセットを反復すると、バッチ化された 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 を渡し、取り込み時にデータをランダムにシャッフルします。これにより、モデル学習時のオーバーフィッティングを防ぐことができます。シャッフルの価値については、 機械学習タスクのためにデータをシャッフルすべき理由について をご参照ください。

バッチ処理

batch_size パラメーターを使用して、データ・バッチのサイズを制御します。バッチはデータ取り込みレベルで効率的に処理されます。PyTorch DataLoaders と併用する場合は、二重バッチを防ぐため、 DataLoader のインスタンス化時に batch_size=None を明示的に渡す必要があります。 DataLoader を使った使用例は PyTorch の使用 をご覧ください。

また、 to_torch_datapipe または to_tf_datasetdrop_last_batch=True を渡すと、最後のバッチが不完全であった場合にそのバッチをドロップすることができます。