データのロードと書き込み¶
Snowflake ML を使用して、Snowflakeテーブルとステージから機械学習ワークフローに効率的にデータをロードします。Snowflake ML は、Snowflakeの分散処理を活用した最適化されたデータロード機能を提供し、トレーニングおよび推論ワークフローのデータ取り込みを高速化します。
次を使用してデータをロードし、処理することができます。
Snowflake Notebooks:データを探索し、 ML モデルを構築するためのインタラクティブな開発環境。詳細については、 Notebooks on Container Runtime をご参照ください。
Snowflake ML Jobs:どのような開発環境からでも、 ML ワークロードを非同期で実行できます。詳細については、 Snowflake MLのジョブ をご参照ください。
Both Notebooks and ML Jobs run on the Container Runtime, which provides preconfigured environments optimized for machine learning workloads with distributed processing capabilities. The Container Runtime uses Ray, an open-source framework for distributed computing, to efficiently process data across multiple compute nodes. For more information about the Container Runtime, see Snowflake Container Runtime.
SnowflakeML は、構造化データと非構造化データをロードするための異なる APIs を提供します。
構造化データ(テーブルとデータセット)
DataConnector*:SnowflakeテーブルとSnowflakeデータセットからデータをロードします。詳細については、 Snowflakeテーブルから構造化データをロードする をご参照ください。
DataSink*:データをSnowflakeテーブルに書き戻します。詳細については、 構造化データをSnowflakeテーブルに書き戻します をご参照ください。
非構造化データ(ステージ内ファイル)
DataSource APIs:Snowflakeステージから様々なファイル形式(CSV 、Parquet、画像など)のデータをロードします。詳細については、 Snowflakeステージから非構造化データをロードする をご参照ください。
以下の表は、ユースケースに適した API を選択するのに役立ちます。
データ型 |
データソース |
ローディング用 API |
書き込み用 API |
|---|---|---|---|
構造化 |
Snowflakeテーブル |
DataConnector |
DataSink |
構造化 |
Snowflake Datasets |
DataConnector |
DataSink |
非構造化 |
CSV ファイル(ステージ) |
DataSource に API |
N/A |
非構造化 |
Parquetファイル(ステージ) |
DataSource に API |
N/A |
非構造化 |
その他のステージングされたファイル |
DataSource に API |
N/A |
Snowflakeテーブルから構造化データをロードする¶
Snowflake DataConnector を使用して、SnowflakeテーブルおよびSnowflakeデータセットからSnowflakeノートブックまたはSnowflake ML ジョブに構造化データをロードします。DataConnector は、複数のコンピュートノードにまたがって読み込みを並列化することで、データのロードを高速化します。
DataConnector は、Snowpark DataFrames またはSnowflakeデータセットのいずれかで動作します。
Snowpark DataFrames:Snowflakeテーブルのデータに直接アクセスできます。開発中に使用するのが最適です。
Snowflakeデータセット:バージョン管理されたスキーマレベルのオブジェクト。プロダクションワークフローに最適です。詳細については、 Snowflake Datasets をご参照ください。
読み込みを並列化した後、 DataConnector は、データを以下のデータ構造のいずれかに変換することができます。
pandasデータフレーム
PyTorch データセット
TensorFlow データセット
DataConnector の作成¶
SnowparkDataFrame または Snowflakeデータセットから DataConnector を作成できます。
以下のコードを使用して、Snowpark DataFrame から DataConnector を作成します。
次のコードを使用して、Snowflakeデータセットから DataConnector を作成します。
DataConnector を他の形式に変換する¶
DataConnector を作成した後、さまざまな ML フレームワークで使用できるように、さまざまなデータ構造に変換することができます。
scikit-learnや他のpandas互換ライブラリで使用するために、 DataConnector を pandasデータフレームに変換することができます。
次の例では、Snowflakeテーブルからpandasデータフレームにデータを読み込み、 XGBoost 分類器をトレーニングします。
PyTorch モデルやデータローダーで使用するために、 DataConnector を PyTorch データセットに変換することができます。
以下の例では、Snowflakeテーブルから PyTorch データセットにデータをロードします。
TensorFlow モデルで使用するために、 DataConnector を TensorFlow データセットに変換することができます。データの読み込みはストリーミング方式で行われ、最大限の効率を実現します。
次の例は、 DataConnector を TensorFlow データセットに変換します。
Snowflakeの分散トレーニング APIs の使用¶
最高のパフォーマンスを得るためには、 DataConnector を、pandas、 PyTorch 、 TensorFlow のデータセットに最初に変換するのではなく、Snowflakeの最適化された分散トレーニング APIs に直接渡すことができます。
以下の例では、Snowflakeの分散 XGBoost 推定量を使用して、 XGBoost モデルをトレーニングしています。
PyTorch ディストリビューターでシャーディングを使用する¶
SnowflakePyTorch ディストリビューターを使用した分散トレーニングのために、 ShardedDataConnector を使用してデータを複数のノードにシャードすることができます。
次の例では、複数のプロセスにわたるシャードデータを使用して、数字データセットで PyTorch モデルをトレーニングしています。
Snowflakeステージから非構造化データをロードする¶
Snowflake DataSource APIs を使用して、Snowflakeステージから非構造化データを読み込みます。各ファイル形式にはデータの読み取り方法を定義する対応するデータソースクラスがあります。
以下に、データのロードに使用するファイル形式と対応する APIs を示します。
バイナリファイル:
SFStageBinaryFileDataSourceテキストファイル:
SFStageTextDataSourceCSV ファイル:
SFStageCSVDataSourceParquetファイル:
SFStageParquetDataSource画像ファイル:
SFStageImageDataSource
データの読み込みと処理¶
Snowflakeデータソースを作成するには、以下を指定する必要があります。
データの読み込み元のステージ名
ステージを持つデータベース(デフォルトは現在のセッション)
ステージを持つスキーマ(デフォルトは現在のセッション)
データソースから読み取られるフィルターファイルのパターン(オプション)
データ API またはデータコネクタは、提供されたパス内でファイルパターンに一致するすべてのファイルを検索します。
Snowflakeデータソースを定義すると、データをRayデータセットにロードできます。Rayデータセットを使って、以下のことができます。
Ray APIs でデータセットを使う
DataConnector にデータセットを渡す
必要に応じてpandasまたは PyTorch データセットに変換する。
次の例では次のようにします。
SnowflakeステージからRayデータセットにParquetファイルを読み込みます
データセットを DataConnector に変換します
構造化データをSnowflakeテーブルに書き戻します¶
Snowflake DataSink API を使用して、ノートブックまたは ML ジョブから Snowflakeテーブルに構造化データを書き戻します。変換または予測データセットをSnowflakeに書き込んで、さらなる分析や保存を行うことができます。
データシンクを定義するには、次を指定します。
ステージ名
データベース名(デフォルトは現在のセッション)
スキーマ名(デフォルトは現在のセッション)
特定のファイルに一致するファイルパターン(オプション)
以下の例では、データシンクを定義しています。
データシンクを定義した後、以下のコードを使用してRayデータセットをSnowflakeテーブルに書き込むことができます。
ベストプラクティスと考慮事項¶
最適なパフォーマンスとリソース利用のために、以下のベストプラクティスを検討してください。
並列処理:Rayの分散性を活用したデータソースの実装を設計します。ユースケースに合わせて並列処理と同時実行の引数をカスタマイズします。各ステップでタスクごとに割り当てるリソースの数を手動で定義できます。
分割:デフォルトでは、Rayの内部ロジックはリソースとデータサイズに基づいてデータセットを分割します。ray_ds.repartition(X) を使って、ユースケースに応じてパーティション数をカスタマイズし、多数の小さなタスクと少数の大きなタスクを選択することができます。
ベストプラクティス:追加ガイダンスについては、 Rayデータユーザーガイド に従ってください。
Ray API 詳細:
次のステップ¶
データをロードした後、次のことが可能になります。