Path: blob/master/site/ja/tfx/guide/understanding_tfx_pipelines.md
25118 views
TFX パイプラインを理解する
MLOps は 機械学習(ML)ワークフローの自動化、管理、および監査を実施しやすくするために DevOps の実践を適用した手法です。ML ワークフローには次のステップが含まれます。
データを準備、分析、および変換する。
モデルをトレーニングして評価する。
トレーニング済みのモデルを本番にデプロイする。
ML アーティファクトを追跡し、その依存関係を理解する。
これらのステップをアドホック式に管理するのは困難であり面倒になることがあります。
TFX は、ML プロセスを Apache Airflow、Apache Beam、Kubeflow Pipelines などのさまざまなオーケストレータに統合しやすくするツールキットを提供することで、MLOps を実装しやすくしています。ワークフローを TFX パイプラインで実装すると、次のことを行えるようになります。
モデルを定期的に再トレーニングし、評価してデプロイできるように、ML プロセスを自動化する。
分散化された計算リソースを使用して、ダ規模なデータセットやワークロードを処理する。
パイプラインをさまざまなハイパーパラメータの組み合わせで実行することで、実験を加速させる。
このガイドでは、TFX パイプラインを理解するために必要な基本概念を説明します。
アーティファクト
TFX パイプラインのステップの出力はアーティファクトと呼ばれています。ワークフローの後続のステップでは、これらのアーティファクトが入力として使用されます。このようにすることで、TFX ではワークフローステップ間でデータを転送することができます。
たとえば、ExampleGen
標準コンポーネントはシリアル化された Example を出力し、その出力は StatisticsGen
などの標準コンポーネントによって入力として使用されます。
アーティファクトはアーティファクト型という ML メタデータストアに登録されている型を使って強力に型付けされている必要があります。詳細は、ML メタデータで使用されている概念をご覧ください。
アーティファクト型には名前があり、そのプロパティのスキーマを定義しています。アーティファクト型名は ML メタデータストアで一意である必要があります。TFX には、文字列、整数、浮動小数点数などの複雑なデータ型や値の型を記述する標準アーティファクト型{: .external }が備わっています。または、Artifact
{: .external } から派生したカスタムアーティファクト型を定義することも可能です。
パラメータ
パラメータはパイプラインが実行される前にわかっているパイプラインへの入力です。パラメータを指定することで、コードの代わりに構成を通じてパイプラインやその一部の動作を変更することができます。
たとえば、パイプラインのコードを変更せずに、パラメータを使ってさまざまなハイパーパラメータのセットでパイプラインを実行することができます。
パラメータを使用すると、さまざまなパラメータのセットでパイプラインを実行しやすくなるため、実験を加速させることができます。
詳細は、RuntimeParameter クラス{: .external }をご覧ください。
コンポーネント
コンポーネントは、TFX パイプラインでステップとして使用できる ML タスクの実装です。コンポーネントは次の項目で構成されています。
コンポーネント仕様: コンポーネントの入力/出力アーティファクト、およびコンポーネントの必須パラメーターを定義します。
Executor: データの変換と取り込みやモデルのトレーニングと評価など、ML ワークフローのステップを実行するコードを実装します。
コンポーネントインターフェース: パイプラインで使用できるようにコンポーネント仕様と Executor をパッケージ化します。
TFX には、パイプラインで使用できる標準コンポーネントが複数備わっています。これらのコンポーネントでニーズを満たせない場合は、カスタムコンポーネントを構築することができます。カスタムコンポーネントについて詳しくお読みください。
パイプライン
TFX パイプラインは ML ワークフローの移植可能な実装で、Apache Airflow、Apache Beam、Kubeflow Pipelines などのさまざまなオーケストレータで実行することができます。パイプラインはコンポーネントのインスタンスと入力パラメーターで構成されています。
コンポーネントインスタンスは、アーティファクトを出力として生成し、通常は上流のコンポーネントインスタンスが生成したアーティファクトを入力として使用しています。コンポーネントインスタンスの実行シーケンスは、アーティファクト依存関係の有効非巡回グラフを作成することで決定されます。
たとえば、次のことを行うパイプラインがあったとします。
カスタムコンポーネントを使用して独自システムから直接データを取り込む。
StaticsGen 標準コンポーネントを使用して training データ用の統計を計算する。
SchemaGen 標準コンポーネントを使用してデータスキーマを作成する。
ExampleValidator 標準コンポーネントを使用して training データの異常をチェックする。
Transform 標準コンポーネントを使用してデータセットに特徴量エンジニアリングを実施する。
Trainer 標準コンポーネントを使用してモデルをトレーニングする。
Evaluator コンポーネントを使用してトレーニング済みのモデルを評価する。
モデルが評価に合格すると、パイプラインはカスタムコンポーネントを使用して、トレーニング済みモデルを独自のデプロイシステムのキューに挿入する。
コンポーネントインスタンスの実行シーケンスを決定するために、TFX はアーティファクト依存関係を分析します。
データ取り込みコンポーネントにはアーティファクト依存関係が存在しないため、グラフの最初のノードになります。
StatisticsGen はデータの取り込みによって生成された Example に依存するため、データ取り込みの後に実行される必要があります。
SchemaGen は SataticsGen が作成した統計に依存するため、StatisticsGen の後に実行される必要があります。
ExampleValidator は SataticsGen が作成した統計と SchemaGen が作成したスキーマに依存するため、StatisticsGen と SchemaGen の後に実行される必要があります。
Transform はデータの取り込みによって生成された Example と SchemaGen が作成したスキーマに依存するため、データ取り込みと SchemaGen の後に実行される必要があります。
Trainer はデータの取り込みによって生成された Example と SchemaGen が作成したスキーマと Transform が生成した保存済みのモデルに依存するため、Trainer はデータ取り込み、SchemaGen、および Transform の後でのみ実行される必要があります。
Evaluator はデータの取り込みによって生成された Example と Trainer が生成した保存済みのモデルに依存するため、データ取り込みと Trainer の後に実行される必要があります。
カスタムデプロイヤーは Trainer が生成した保存済みのモデルと Evaluator が作成した分析結果に依存するため、デプロイヤーは Trainer と Evaluator の後に実行される必要があります。
上記の分析に基づくと、オーケストレータは次のように実行します。
データ取り込み、StatisticsGen、SchemaGen コンポーネントインスタンスを順に実行します。
ExampleValidator と Transform コンポーネントは入力アーティファクト依存関係を共有しており、互いの出力には依存していないため、並行して実行できます。
Transform コンポーネントが完了したら、Trainer、Evaluator、カスタムデプロイヤーコンポーネントインスタンスを順に実行します。
詳細は、TFX パイプラインを構築するをご覧ください。
TFX パイプラインテンプレート
TFX パイプラインテンプレートを使うと、事前構築済みのパイプラインをユースケースに合わせてカスタマイズできるため、パイプラインの作成をより簡単に行えます。
詳細は、TFX パイプラインテンプレートをカスタマイズするをご覧ください。
パイプラインラン
ランはパイプラインの 1 回の実行を指します。
オーケストレータ
オーケストレータは、パイプラインランを実行できるシステムです。TFX は、Apache Airflow、Apache Beam、Kubeflow Pipelines などのオーケストレータをサポートしています。TFX ではオーケストレータをサポートする実装を DagRunner という用語で呼んでいます。