環境:
私のテキスト入力パイプラインは現在、次の 2 つの主要部分で構成されています。
私は。複雑なテキストの前処理とtf.SequenceExamples
tfrecords へのエクスポート (カスタム トークン化、語彙の作成、統計計算、正規化、および完全なデータセットと個々の例ごとのその他多数)。これは、データ構成ごとに 1 回行われます。
Ⅱ.トレーニング中にもかなりの処理を行う tf.Dataset (TFRecords) パイプライン (string_split
文字、テーブル ルックアップ、バケット化、条件付きフィルタリングなど)。
元のデータセットは、複数の場所 (BigQuery、GCS、RDS など) に存在します。
問題:
問題は、本番データセットが急速に (数テラバイト) 増加するにつれて、可能なデータ構成ごとに tfrecords ファイルを再作成することが現実的でないことです (パート 1 には多数のハイパーパラメーターがあります)。言うまでもなく、または tfrecords のサイズが大きくなると、tf.Dataset
読み取り速度が驚くほど遅くなります。tf.SequenceExamples
かなりの数の可能な解決策があります:
- Apache Beam + Cloud DataFlow + feed_dict;
- tf.Transform;
- Apache Beam + Cloud DataFlow + tf.Dataset.from_generator;
- tensorflow/エコシステム + Hadoop または Spark
- tf.contrib.cloud.BigQueryReader
、しかし、次のいずれも私の要件を完全に満たしていないようです:
- パート I のように、BigQuery、GCS、RDS などからのオンザフライ データのストリーミングと処理。
- データ (プロトス?) を何らかの方法で直接送信して
tf.Dataset
、パート II で使用します。 - トレーニングと推論の両方で高速で信頼性があります。
(オプション) データの選択された部分に対していくつかのフルパス統計を事前に計算できること。
編集: Python 3 のサポートは素晴らしいでしょう。
tf.data.Dataset
パイプラインに最も適した選択肢は何ですか? この場合のベストプラクティスは何ですか?
前もって感謝します!