Petastormを使用したデータのロード

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

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

Petastormを使用してSpark DataFramesからデータを読み込む

Petastorm Spark コンバータ API は、Spark から TensorFlow または PyTorch へのデータ変換を簡素化します。 入力 Spark DataFrame は、最初に Parquet 形式で具体化され、次に tf.data.Dataset または torch.utils.data.DataLoaderとして読み込まれます。 Petastorm API ドキュメントの「 Spark Dataset Converter 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 トレーニングがサポートされています。

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

  • 分散ハイパーパラメーターチューニング

  • 分散トレーニング

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

Petastormを使用してParquetファイルを直接ロードする

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

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

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

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

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

  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 へのデータ変換を簡素化するノートブック

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

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

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

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

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

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

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

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

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