ペタストーム を使用したデータのロード

この記事では、 Petastorm を使用して Apache Spark から TensorFlow または PyTorch にデータを変換する方法について説明します。 また、Petastorm を使用して 機械学習用のデータを準備する方法を示す例も示します。

Petastormはオープンソースのデータアクセスライブラリです。 これにより、Apache Parquet 形式のデータセットと Apache Spark DataFramesとして既に読み込まれているデータセットから直接、ディープラーニング モデルの単一ノードまたは分散トレーニングと評価が可能になります。 Petastorm は、TensorFlow、PyTorch、PySpark などの一般的な Python ベースの機械学習 (ML) フレームワークをサポートしています。 ペタストームの詳細については、 ペタストーム API のドキュメントを参照してください。

ペタストーム を使用して Spark DataFrames からデータを読み込

Petastorm Spark コンバータ API は、Spark から TensorFlow または PyTorch へのデータ変換を簡素化します。 入力 Spark DataFrame は、最初に Parquet 形式で具体化され、次に tf.data.Dataset または torch.utils.data.DataLoaderとして読み込まれます。 ペタストーム API ドキュメントの「 Spark データセット コンバーター API」セクションを参照してください

推奨されるワークフローは次のとおりです。

  1. Apache Spark を使用して、データを読み込み、必要に応じて前処理します。

  2. Petastorm spark_dataset_converter メソッドを使用して、Spark DataFrame から TensorFlow データセットまたは PyTorch DataLoader にデータを変換します。

  3. トレーニングまたは推論のためにデータを DL フレームワークにフィードします。

キャッシュディレクトリ の設定

Petastorm Spark コンバーターは、入力 Spark DataFrame をユーザー指定のキャッシュ ディレクトリの場所に Parquet 形式でキャッシュします。 キャッシュ ディレクトリは、 file:///dbfs/で始まる DBFS パスである必要があります (たとえば、 dbfs:/tmp/foo/と同じ場所を参照する file:///dbfs/tmp/foo/)。キャッシュ ディレクトリは、次の 2 つの方法で構成できます。

  • クラスター の Spark 構成 で、次の行を追加します。 petastorm.spark.converter.parentCacheDirUrl file:///dbfs/...

  • ノートブックで、 spark.conf.set()を呼び出します。

    from petastorm.spark import SparkDatasetConverter, make_spark_converter
    
    spark.conf.set(SparkDatasetConverter.PARENT_CACHE_DIR_URL_CONF, 'file:///dbfs/...')
    

キャッシュを使用した後に converter.delete() を呼び出して明示的に削除するか、オブジェクト・ストレージでライフサイクル・ルールを設定してキャッシュを暗黙的に管理することができます。

Databricks では、次の 3 つのシナリオで DL トレーニングがサポートされています。

  • 単一ノードのトレーニング

  • 分散ハイパーパラメーターの調整

  • 分散トレーニング

エンド ツー エンドの例については、次のノートブックを参照してください。

ペタストーム を使用して Parquet ファイルを直接ロードする

この方法は、Petastorm Spark コンバーター API よりも推奨されません。

推奨されるワークフローは次のとおりです。

  1. Apache Spark を使用して、データを読み込み、必要に応じて前処理します。

  2. コンパニオン DBFS マウントを持つ DBFS パスに Parquet 形式でデータを保存します。

  3. DBFSマウントポイントを介してペタストーム形式のデータをロードします。

  4. DL フレームワーク内のデータをトレーニングまたは推論に使用します。

エンドツーエンドの例については、 ノートブックの例 を参照してください。

例: TensorFlow または PyTorch を使用したデータの前処理とモデルのトレーニングする

このノートブックの例は、Databricks での次のワークフローを示しています。

  1. Spark を使用してデータを読み込みます。

  2. Petastorm を使用して、Spark DataFrame を TensorFlow データセットに変換します。

  3. トレーニングのために、データを単一ノードの TensorFlow モデルにフィードします。

  4. 分散ハイパーパラメーター調整関数にデータをフィードします。

  5. トレーニングのために分散 TensorFlow モデルにデータをフィードします。

Spark から TensorFlow ノートブック へのデータ変換を簡素化

ノートブックを新しいタブで開く

このノートブックの例は、Databricks での次のワークフローを示しています。

  1. Spark を使用してデータを読み込みます。

  2. Petastorm を使用して Spark DataFrame を PyTorch DataLoader に変換します。

  3. トレーニングのために、データを単一ノードの PyTorch モデルにフィードします。

  4. 分散ハイパーパラメーター調整関数にデータをフィードします。

  5. トレーニングのために分散 PyTorch モデルにデータをフィードします。

Spark から PyTorch ノートブック へのデータ変換を簡素化する

ノートブックを新しいタブで開く

例: データを前処理し、ペタストーム を使用して Parquet ファイルを読み込む

このノートブックの例は、Databricks での次のワークフローを示しています。

  1. Spark を使用して、データを読み込んで前処理します。

  2. [ dbfs:/ml] の下の Parquet を使用してデータを保存します。

  3. 最適化されたFUSEマウント file:/dbfs/mlを介してペタストームを使用してデータをロードします。

  4. トレーニングまたは推論のためにディープラーニングフレームワークにデータをフィードします。

Spark と Petastorm を使用してディープラーニング ノートブック 用のデータを準備する

ノートブックを新しいタブで開く