TFXパイプラインを理解する

MLOpsは、機械学習(ML)ワークフローの自動化、管理、監査を支援するためにDevOpsプラクティスを適用するプラクティスです。 MLワークフローには、次の手順が含まれます。

  • データを準備、分析、変換します。
  • モデルをトレーニングして評価します。
  • トレーニング済みモデルを本番環境にデプロイします。
  • MLアーティファクトを追跡し、それらの依存関係を理解し​​ます。

これらのステップをアドホックな方法で管理することは、困難で時間がかかる場合があります。

TFXは、Apache Airflow、Apache Beam、Kubeflow PipelinesなどのさまざまなオーケストレーターでMLプロセスをオーケストするのに役立つツールキットを提供することで、MLOpsの実装を容易にします。ワークフローをTFXパイプラインとして実装することにより、次のことができます。

  • MLプロセスを自動化します。これにより、モデルを定期的に再トレーニング、評価、およびデプロイできます。
  • 大規模なデータセットとワークロードを処理するために分散コンピューティングリソースを利用します。
  • さまざまなハイパーパラメータのセットを使用してパイプラインを実行することにより、実験の速度を上げます。

このガイドでは、TFXパイプラインを理解するために必要なコアコンセプトについて説明します。

アーティファクト

TFXパイプラインのステップの出力は、アーティファクトと呼ばれます。ワークフローの後続のステップでは、これらのアーティファクトを入力として使用する場合があります。このように、TFXではワークフローステップ間でデータを転送できます。

たとえば、 ExampleGen標準コンポーネントは、 StatisticsGen標準コンポーネントなどのコンポーネントが入力として使用するシリアル化された例を発行します。

アーティファクトは、 MLメタデータストアに登録されているアーティファクトタイプで強く型付けする必要があります。 MLメタデータで使用される概念の詳細をご覧ください。

アーティファクトタイプには名前があり、そのプロパティのスキーマを定義します。アーティファクトタイプ名は、MLメタデータストア内で一意である必要があります。 TFXは、文字列、整数、浮動小数点などの複雑なデータ型と値型を記述するいくつかの標準アーティファクトタイプを提供します。これらのアーティファクトタイプを再利用するか、 Artifactから派生したカスタムアーティファクトタイプを定義できます。

パラメータ

パラメータは、パイプラインが実行される前に認識されているパイプラインへの入力です。パラメータを使用すると、コードではなく構成を使用して、パイプラインまたはパイプラインの一部の動作を変更できます。

たとえば、パラメータを使用して、パイプラインのコードを変更せずに、さまざまなハイパーパラメータのセットでパイプラインを実行できます。

パラメータを使用すると、さまざまなパラメータセットを使用してパイプラインを実行しやすくなるため、実験の速度を上げることができます。

RuntimeParameterクラスの詳細をご覧ください。

成分

コンポーネントは、TFXパイプラインのステップとして使用できるMLタスクの実装です。コンポーネントは次のもので構成されています。

  • コンポーネントの入力および出力アーティファクト、およびコンポーネントに必要なパラメーターを定義するコンポーネント仕様。
  • データの取り込みと変換、モデルのトレーニングと評価など、MLワークフローのステップを実行するためのコードを実装するエグゼキュータ。
  • パイプラインで使用するためのコンポーネント仕様とエグゼキュータをパッケージ化するコンポーネントインターフェイス。

TFXは、パイプラインで使用できるいくつかの標準コンポーネントを提供します。これらのコンポーネントがニーズを満たさない場合は、カスタムコンポーネントを作成できます。カスタムコンポーネントの詳細をご覧ください

パイプライン

TFXパイプラインは、Apache Airflow、Apache Beam、Kubeflowパイプラインなどのさまざまなオーケストレーターで実行できるMLワークフローのポータブル実装です。パイプラインは、コンポーネントインスタンスと入力パラメータで構成されます。

コンポーネントインスタンスは、出力としてアーティファクトを生成し、通常、入力としてアップストリームコンポーネントインスタンスによって生成されたアーティファクトに依存します。コンポーネントインスタンスの実行シーケンスは、アーティファクトの依存関係の有向非巡回グラフを作成することによって決定されます。

たとえば、次のことを行うパイプラインについて考えてみます。

  • カスタムコンポーネントを使用して、独自のシステムから直接データを取り込みます。
  • StatisticsGen標準コンポーネントを使用してトレーニングデータの統計を計算します。
  • SchemaGen標準コンポーネントを使用してデータスキーマを作成します。
  • ExampleValidator標準コンポーネントを使用して、トレーニングデータに異常がないかチェックします。
  • Transform標準コンポーネントを使用して、データセットに対して特徴エンジニアリングを実行します。
  • Trainer標準コンポーネントを使用してモデルをトレーニングします。
  • Evaluatorコンポーネントを使用して、トレーニングされたモデルを評価します。
  • モデルが評価に合格すると、パイプラインは、カスタムコンポーネントを使用して、トレーニングされたモデルを独自のデプロイメントシステムにエンキューします。

コンポーネントインスタンスの実行シーケンスを決定するために、TFXはアーティファクトの依存関係を分析します。

  • データ取り込みコンポーネントにはアーティファクトの依存関係がないため、グラフの最初のノードにすることができます。
  • StatisticsGenは、データの取り込みによって生成されたに依存しているため、データの取り込み後に実行する必要があります。
  • SchemaGenは、StatisticsGenによって作成された統計に依存しているため、StatisticsGenの後に実行する必要があります。
  • ExampleValidatorは、StatisticsGenによって作成された統計とSchemaGenによって作成されたスキーマに依存するため、StatisticsGenとSchemaGenの後に実行する必要があります。
  • 変換は、データの取り込みによって生成されたとSchemaGenによって作成されたスキーマに依存するため、データの取り込みとSchemaGenの後に実行する必要があります。
  • トレーナーは、データの取り込みによって生成された、SchemaGenによって作成されたスキーマ、およびTransformによって生成された保存済みモデルに依存します。トレーナーは、データの取り込み、SchemaGen、およびTransformの後にのみ実行できます。
  • Evaluatorは、データの取り込みによって生成されたとトレーナーによって生成された保存済みモデルに依存するため、データの取り込みとトレーナーの後に実行する必要があります。
  • カスタムデプロイヤーは、トレーナーによって作成された保存済みモデルとエバリュエーターによって作成された分析結果に依存するため、デプロイヤーはトレーナーとエバリュエーターの後に実行する必要があります。

この分析に基づいて、オーケストレーターは以下を実行します。

  • データの取り込み、StatisticsGen、SchemaGenコンポーネントインスタンスを順番に。
  • ExampleValidatorコンポーネントとTransformコンポーネントは、入力アーティファクトの依存関係を共有し、相互の出力に依存しないため、並行して実行できます。
  • Transformコンポーネントが完了すると、Trainer、Evaluator、およびカスタムのデプロイヤーコンポーネントインスタンスが順番に実行されます。

TFXパイプラインの構築の詳細をご覧ください。

TFXパイプラインテンプレート

TFXパイプラインテンプレートを使用すると、ユースケースに合わせてカスタマイズできるビルド済みのパイプラインを提供することで、パイプライン開発を簡単に開始できます。

TFXパイプラインテンプレートのカスタマイズの詳細をご覧ください。

パイプライン実行

実行は、パイプラインの1回の実行です。

オーケストレーター

オーケストレーターは、パイプラインの実行を実行できるシステムです。 TFXは、Apache AirflowApache BeamKubeflowPipelinesなどのオーケストレーターをサポートしています。 TFXは、オーケストレーターをサポートする実装を指すためにDagRunnerという用語も使用します。