MLOps は、DevOps プラクティスを適用して、機械学習 (ML) ワークフローの自動化、管理、および監査を支援するプラクティスです。 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 Pipelines などのさまざまなオーケストレータで実行できる ML ワークフローの移植可能な実装です。パイプラインは、コンポーネント インスタンスと入力パラメーターで構成されます。
コンポーネント インスタンスは出力としてアーティファクトを生成し、通常は上流のコンポーネント インスタンスによって生成されたアーティファクトに入力として依存します。コンポーネント インスタンスの実行シーケンスは、アーティファクトの依存関係の有向非巡回グラフを作成することによって決定されます。
たとえば、次の処理を行うパイプラインについて考えてみます。
- カスタム コンポーネントを使用して、専用システムから直接データを取り込みます。
- StatisticsGen 標準コンポーネントを使用してトレーニング データの統計を計算します。
- SchemaGen 標準コンポーネントを使用してデータ スキーマを作成します。
- ExampleValidator 標準コンポーネントを使用して、トレーニング データの異常をチェックします。
- Transform 標準コンポーネントを使用して、データセットに対して特徴量エンジニアリングを実行します。
- Trainer 標準コンポーネントを使用してモデルをトレーニングします。
- Evaluator コンポーネントを使用してトレーニング済みモデルを評価します。
- モデルが評価に合格すると、パイプラインは、カスタム コンポーネントを使用して、トレーニング済みのモデルを独自のデプロイ システムのキューに入れます。
コンポーネント インスタンスの実行シーケンスを決定するために、TFX はアーティファクトの依存関係を分析します。
- データ取り込みコンポーネントにはアーティファクトの依存関係がないため、グラフの最初のノードになることができます。
- StatisticsGen は、データの取り込みによって生成される例に依存するため、データの取り込み後に実行する必要があります。
- SchemaGen は、StatisticsGen によって作成された統計に依存するため、StatisticsGen の後に実行する必要があります。
- ExampleValidator は、StatisticsGen によって作成された統計と SchemaGen によって作成されたスキーマに依存するため、StatisticsGen および SchemaGen の後に実行する必要があります。
- 変換は、データの取り込みによって生成された例と SchemaGen によって作成されたスキーマに依存するため、データの取り込みと SchemaGen の後に実行する必要があります。
- トレーナーは、データの取り込みによって生成された例、SchemaGen によって作成されたスキーマ、および Transform によって生成された保存されたモデルに依存します。トレーナーは、データの取り込み、SchemaGen、および変換の後にのみ実行できます。
- Evaluator は、データの取り込みによって生成された例と、トレーナーによって生成された保存されたモデルに依存するため、データの取り込みとトレーナーの後に実行する必要があります。
- カスタム デプロイヤーは、トレーナーによって生成された保存済みのモデルと、エバリュエーターによって作成された分析結果に依存するため、デプロイヤーはトレーナーとエバリュエーターの後に実行する必要があります。
この分析に基づいて、オーケストレーターが実行されます。
- データの取り込み、StatisticsGen、SchemaGen コンポーネントのインスタンスが順番に表示されます。
- ExampleValidator コンポーネントと Transform コンポーネントは、入力アーティファクトの依存関係を共有し、互いの出力に依存しないため、並行して実行できます。
- Transform コンポーネントが完了すると、Trainer、Evaluator、およびカスタム Deployer コンポーネントのインスタンスが順番に実行されます。
TFX パイプラインの構築の詳細については、こちらをご覧ください。
TFX パイプライン テンプレート
TFX パイプライン テンプレートは、ユース ケースに合わせてカスタマイズできるビルド済みのパイプラインを提供することで、パイプライン開発を簡単に開始できるようにします。
TFX パイプライン テンプレートのカスタマイズの詳細については、こちらをご覧ください。
パイプライン実行
実行は、パイプラインの 1 回の実行です。
オーケストレーター
Orchestrator は、パイプラインの実行を実行できるシステムです。 TFX は、 Apache Airflow 、 Apache Beam 、 Kubeflow Pipelinesなどのオーケストレーターをサポートしています。 TFX では、 DagRunnerという用語も使用して、オーケストレーターをサポートする実装を指します。