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