Load data using Petastorm | Databricks on AWS [2021/10/20時点]の翻訳です。
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
Petastormはオープンソースのデータアクセスライブラリです。このライブラリは、Apache Parquetフォーマットのデータセット、すでにApache Sparkデータフレームとしてロードされているデータセットから直接ディープラーニングモデルに対する、シングルノード、分散処理によるトレーニングおよび評価を可能にします。PetastormはTensorflow、PyTorch、PySparkのような町名なPythonベースの機械学習(ML)フレームワークをサポートしています。Petastormの詳細に関しては、Petastorm GitHub pageやPetastorm API documentationをご覧ください。
Petastormを用いたSparkデータフレームからのデータロード
Petastorm Spark converter APIは、SparkからTensorflow、PyTorchへのデータ変換をシンプルにします。入力されたSparkデータフレームは、最初にParquetフォーマットとしてマテリアライズされ、tf.data.Dataset
やtorch.utils.data.DataLoader
としてロードされます。Petastorm APIドキュメントのSpark Dataset Converter API sectionをご覧ください。
お勧めのワークフローは以下のようになります。
- Sparkを用いてロードし、場合によってはデータ処理を行います。
- Petastormの
spark_dataset_converter
メソッドを用いて、SparkデータフレームからTensorFlow DatasetやPyTorch DataLoaderにデータを変換します。 - トレーニング、推論のためにデータをDLフレームワークに投入します。
キャッシュディレクトリの設定
Petastorm Sparkコンバーターは、入力されたSparkデータフレームをParquetフォーマットでユーザーが指定したキャッシュディレクトリにキャッシュします。キャッシュディレクトリは、file:///dbfs/
で始まるDBFS FUSEパスである必要があります。例えば、file:///dbfs/tmp/foo/
はdbfs:/tmp/foo/
と同じ場所を参照します。2つの方法でキャッシュディレクトリを設定することができます。
-
クラスターのSpark設定に以下の行を追加します。
petastorm.spark.converter.parentCacheDirUrl file:///dbfs/...
-
ノートブックで
spark.conf.set()
を呼び出します。Pythonfrom 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 converter APIよりはお勧めしません。
お勧めするワークフローは以下の通りとなります。
- Apace Sparkを用いてデータをロードし、場合によってはデータ処理を行います。
- FUSEマウントを持つDBFSパスにデータをParquetフォーマットで保存します。
- FUSEマウントポイント経由でPeatastormフォーマットでデータをロードします。
- トレーニング、推論のためにDLフレームワークでデータを使用します。
エンドツーエンドのサンプルに関しては、サンプルノートブックをご覧ください。
サンプル
SparkからTensorFlowへのデータ変換をシンプルに
SparkからPyTorchへのデータ変換をシンプルに
ディープラーニング向けにデータを準備するためにSparkとPetastormを使う