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)
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を取得します。データセットを反復すると、バッチ化された 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
を渡し、取り込み時にデータをランダムにシャッフルします。これにより、モデル学習時のオーバーフィッティングを防ぐことができます。シャッフルの価値については、 機械学習タスクのためにデータをシャッフルすべき理由について をご参照ください。
バッチ処理¶
batch_size
パラメーターを使用して、データ・バッチのサイズを制御します。バッチはデータ取り込みレベルで効率的に処理されます。PyTorch DataLoaders と併用する場合は、二重バッチを防ぐため、 DataLoader
のインスタンス化時に batch_size=None
を明示的に渡す必要があります。 DataLoader
を使った使用例は PyTorch の使用 をご覧ください。
また、 to_torch_datapipe
または to_tf_dataset
に drop_last_batch=True
を渡すと、最後のバッチが不完全であった場合にそのバッチをドロップすることができます。