Snowpark ML フレームワークコネクタ¶
Snowpark ML には、 PyTorch とTensorflowフレームワークのための、セキュアでスケーラブルなデータプロビジョニングのサポートが含まれています。このワークフローを簡素化するために、Snowpark ML ライブラリは、 FileSet API の上に構築された便利なメソッドにより、 FileSet からのデータを PyTorch Tensorsまたは TensorFlow 記録として提供します。(FileSet は、 SQL クエリの結果の不変スナップショットを、サーバー側で暗号化された内部ステージのファイル形式で表します。)
注釈
このトピックでは、Snowpark ML モジュールがインストールされていることを前提としています。インストールされていない場合は、 Snowpark ML のインストール をご参照ください。
クエリからの FileSet の作成¶
PyTorch または TensorFlow で使用するデータから FileSet を作成する方法については、 FileSet の作成および使用 をご参照ください。その後、次のセクションのいずれかに進みます。
FileSet の PyTorch へのフィード¶
Snowflake FileSet からは PyTorch DataPipe を取得でき、これは PyTorch DataLoader に渡すことができます。DataLoader は FileSet データを反復処理し、バッチ化された PyTorch テンソルを生成します。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 でのデータのシャッフル¶
多くの場合、過剰適合やその他の問題を避けるために、学習データをシャッフルすることには価値があります。シャッフルの価値については、 機械学習タスクのためにデータをシャッフルすべき理由について をご参照ください。
クエリがデータをまだ十分にシャッフルしていない場合は、 FileSet により2つの時点でデータをシャッフルすることができます。
FileSet.make
を使用して FileSet を作成するとき。クエリ内のすべての行は、 FileSet に書き込まれる前にシャッフルされます。これは高品質なグローバルシャッフルであり、大規模なデータセットではコストが上昇する可能性があります。そのため、 FileSet を具体化する際に一度だけ実行されます。
FileSet.make
にキーワード引数としてshuffle=True
を渡します。FileSet から PyTorch DataPipe または TensorFlow データセットを作成するとき。
この時点で、 FileSet のファイルの順番はランダム化され、各ファイルの行の順番もランダム化されます。これは「近似的な」グローバルシャッフルと考えることができます。真のグローバルシャッフルより品質は劣りますが、コストを大幅に低減できます。このステージでシャッフルするには、 FileSet の
to_torch_datapipe
またはto_tf_dataset
メソッドにキーワード引数としてshuffle=True
を渡します。
最良の結果を得るには、 FileSet を作成するときと、 PyTorch または TensorFlow にデータを供給するときの2回シャッフルします。
FileSets でのデータのバッチ処理¶
FileSets にはバッチ処理機能があり、 PyTorch や TensorFlow のバッチ機能と同じ働きをしますが、より効率的です。Snowflakeは、 PyTorch や TensorFlow でバッチ処理を行うのではなく、 FileSet の to_torch_datapipe
と to_tf_dataset
メソッドで batch_size
パラメーターを使用することをお勧めします。PyTorch でバッチ処理機能を無効にするには、 DataLoader
のインスタンス化時に batch_size=None
を明示的に渡す必要があります。
また、 to_torch_datapipe
または to_tf_dataset
に drop_last_batch=True
を渡すと、最後のバッチが不完全であった場合にそのバッチをドロップすることができます。