TFXユーザーガイド

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

序章

TFX は、TensorFlow に基づく、Google の実稼働規模の機械学習 (ML) プラットフォームです。機械学習システムの定義、起動、監視に必要な共通コンポーネントを統合するための構成フレームワークと共有ライブラリを提供します。

TFX 1.0

TFX 1.0.0が利用可能になったことをお知らせします。これは、安定した公開 API とアーティファクトを提供する TFX の最初のベータ版後のリリースです。将来の TFX パイプラインは、このRFCで定義された互換性の範囲内でアップグレードした後も動作し続けることが保証されます。

インストール

パイソンPyPI

pip install tfx

夜間パッケージ

TFX は、Google Cloud のhttps://pypi-nightly.tensorflow.orgでナイトリー パッケージもホストしています。最新のナイトリー パッケージをインストールするには、次のコマンドを使用してください。

pip install --extra-index-url https://pypi-nightly.tensorflow.org/simple --pre tfx

これにより、TensorFlow Model Analysis (TFMA)、TensorFlow Data Validation (TFDV)、TensorFlow Transform (TFT)、TFX Basic Shared Libraries (TFX-BSL)、ML Metadata (MLMD) など、TFX の主要な依存関係のナイトリー パッケージがインストールされます。

TFXについて

TFX は、運用環境で ML ワークフローを構築および管理するためのプラットフォームです。 TFX は以下を提供します。

  • ML パイプラインを構築するためのツールキット。 TFX パイプラインを使用すると、Apache Airflow、Apache Beam、Kubeflow Pipelines などの複数のプラットフォームで ML ワークフローを調整できます。

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

  • パイプラインの一部として、または ML トレーニング スクリプトの一部として使用できる一連の標準コンポーネント。 TFX 標準コンポーネントは、ML プロセスの構築を簡単に開始するのに役立つ実績のある機能を提供します。

    TFX 標準コンポーネントの詳細をご覧ください

  • 多くの標準コンポーネントの基本機能を提供するライブラリ。 TFX ライブラリを使用して、この機能を独自のカスタム コンポーネントに追加したり、個別に使用したりできます。

    TFX ライブラリの詳細をご覧ください

TFX は、TensorFlow に基づく、Google の実稼働規模の機械学習ツールキットです。機械学習システムの定義、起動、監視に必要な共通コンポーネントを統合するための構成フレームワークと共有ライブラリを提供します。

TFX 標準コンポーネント

TFX パイプラインは、スケーラブルで高性能な機械学習タスク用に特別に設計されたML パイプラインを実装する一連のコンポーネントです。これには、モデリング、トレーニング、推論の提供、およびオンライン、ネイティブ モバイル、および JavaScript ターゲットへの展開の管理が含まれます。

通常、TFX パイプラインには次のコンポーネントが含まれます。

  • ExampleGenは、入力データセットを取り込み、必要に応じて分割するパイプラインの最初の入力コンポーネントです。

  • StatisticsGenは、データセットの統計を計算します。

  • SchemaGenは統計を調べて、データ スキーマを作成します。

  • ExampleValidatorは、データセット内の異常値と欠損値を探します。

  • Transformは、データセットに対して特徴エンジニアリングを実行します。

  • トレーナーはモデルをトレーニングします。

  • チューナーは、モデルのハイパーパラメーターを調整します。

  • Evaluatorはトレーニング結果の詳細な分析を実行し、エクスポートされたモデルを検証して、本番環境にプッシュするのに「十分」であることを確認するのに役立ちます。

  • InfraValidatorは、モデルが実際にインフラストラクチャから提供可能であることを確認し、不適切なモデルがプッシュされるのを防ぎます。

  • Pusherはモデルをサービング インフラストラクチャにデプロイします。

  • BulkInferrerは、ラベルのない推論リクエストを使用してモデルでバッチ処理を実行します。

次の図は、これらのコンポーネント間のデータの流れを示しています。

コンポーネント フロー

TFX ライブラリ

TFX には、ライブラリとパイプライン コンポーネントの両方が含まれています。この図は、TFX ライブラリとパイプライン コンポーネントの関係を示しています。

ライブラリとコンポーネント

TFX には、パイプライン コンポーネントの作成に使用されるライブラリである Python パッケージがいくつか用意されています。これらのライブラリを使用してパイプラインのコンポーネントを作成し、コードがパイプラインの固有の側面に集中できるようにします。

TFX ライブラリには次のものがあります。

  • TensorFlow Data Validation (TFDV)は、機械学習データを分析および検証するためのライブラリです。拡張性が高く、TensorFlow と TFX とうまく連携するように設計されています。 TFDV には以下が含まれます。

    • トレーニング データとテスト データの要約統計量のスケーラブルな計算。
    • データ分布と統計のためのビューアーとの統合、およびデータセットのペアのファセット比較 (ファセット)。
    • 必要な値、範囲、語彙などのデータに関する期待を記述する自動データスキーマ生成。
    • スキーマの検査に役立つスキーマ ビューア。
    • いくつか例を挙げると、欠落している機能、範囲外の値、または間違った機能タイプなどの異常を識別するための異常検出。
    • どの機能に異常があるかを確認し、それらを修正するために詳細を確認できる異常ビューアー。
  • TensorFlow Transform (TFT)は、TensorFlow でデータを前処理するためのライブラリです。 TensorFlow Transform は、次のようなフルパスを必要とするデータに役立ちます。

    • 入力値を平均と標準偏差で正規化します。
    • すべての入力値に対して語彙を生成することにより、文字列を整数に変換します。
    • 観測されたデータ分布に基づいて浮動小数点数をバケットに割り当てて、浮動小数点数を整数に変換します。
  • TensorFlowは、TFX を使用したモデルのトレーニングに使用されます。トレーニング データとモデリング コードを取り込み、SavedModel の結果を作成します。また、入力データの前処理のために TensorFlow Transform によって作成された機能エンジニアリング パイプラインも統合します。

    KerasTunerは、モデルのハイパーパラメーターを調整するために使用されます。

  • TensorFlow Model Analysis (TFMA)は、TensorFlow モデルを評価するためのライブラリです。 TensorFlow と一緒に使用して、分析の基礎となる EvalSavedModel を作成します。これにより、ユーザーは、トレーナーで定義された同じメトリックを使用して、分散された方法で大量のデータでモデルを評価できます。これらのメトリクスは、データのさまざまなスライスに対して計算し、Jupyter ノートブックで視覚化できます。

  • TensorFlow Metadata (TFMD)は、TensorFlow で機械学習モデルをトレーニングするときに役立つメタデータの標準表現を提供します。メタデータは、入力データの分析中に手動または自動で生成される場合があり、データの検証、調査、および変換のために使用される場合があります。メタデータのシリアル化形式には、次のものがあります。

    • 表形式のデータを記述するスキーマ (例: tf.Examples)。
    • そのようなデータセットに関する要約統計のコレクション。
  • ML メタデータ (MLMD)は、ML 開発者およびデータ サイエンティストのワークフローに関連するメタデータを記録および取得するためのライブラリです。ほとんどの場合、メタデータは TFMD 表現を使用します。 MLMD は、 SQL-LiteMySQL 、およびその他の同様のデータ ストアを使用して永続性を管理します。

支える技術

必須

  • Apache Beamは、バッチとストリーミングの両方のデータ並列処理パイプラインを定義するためのオープン ソースの統合モデルです。 TFX は、Apache Beam を使用してデータ並列パイプラインを実装します。パイプラインは、Apache Flink、Apache Spark、 Google Cloud Dataflowなど、Beam がサポートする分散処理バックエンドの 1 つによって実行されます。

オプション

Apache Airflow や Kubeflow などのオーケストレーターを使用すると、ML パイプラインの構成、運用、監視、保守が容易になります。

  • Apache Airflowは、ワークフローをプログラムで作成、スケジュール、監視するためのプラットフォームです。 TFX は Airflow を使用して、ワークフローをタスクの有向非巡回グラフ (DAG) として作成します。 Airflow スケジューラは、指定された依存関係に従いながら、ワーカーの配列でタスクを実行します。豊富なコマンド ライン ユーティリティにより、DAG で複雑な手術を簡単に実行できます。豊富なユーザー インターフェイスにより、実稼働環境で実行されているパイプラインを簡単に視覚化し、進行状況を監視し、必要に応じて問題をトラブルシューティングできます。ワークフローをコードとして定義すると、ワークフローの保守、バージョン管理、テスト、およびコラボレーションが容易になります。

  • Kubeflowは、Kubernetes での機械学習 (ML) ワークフローのデプロイをシンプル、ポータブル、スケーラブルにすることに専念しています。 Kubeflow の目標は、他のサービスを再作成することではなく、ML 用の最善の組み合わせのオープンソース システムをさまざまなインフラストラクチャに展開する簡単な方法を提供することです。 Kubeflow Pipelinesは、Kubeflow での再現可能なワークフローの構成と実行を可能にし、実験やノートブック ベースのエクスペリエンスと統合します。 Kubernetes 上の Kubeflow Pipelines サービスには、ホストされたメタデータ ストア、コンテナー ベースのオーケストレーション エンジン、ノートブック サーバー、およびユーザーが複雑な ML パイプラインを大規模に開発、実行、管理するのに役立つ UI が含まれます。 Kubeflow Pipelines SDK を使用すると、コンポーネントの作成と共有、およびプログラムによるパイプラインの構成が可能になります。

移植性と相互運用性

TFX は、 Apache Airflow、 Apache BeamKubeflowなど、複数の環境やオーケストレーション フレームワークに移植できるように設計されています。また、オンプレミスを含むさまざまなコンピューティング プラットフォームや、 Google Cloud Platform (GCP)などのクラウド プラットフォームにも移植できます。特に、TFX は、トレーニングと予測用のCloud AI Platformや、ML ライフサイクルの他のいくつかの側面の分散データ処理用のCloud Dataflowなどのサーバー マネージド GCP サービスと相互運用します。

モデルと SavedModel

モデル

モデルは、トレーニング プロセスの出力です。これは、トレーニング プロセス中に学習された重みのシリアル化されたレコードです。これらの重みは、後で新しい入力例の予測を計算するために使用できます。 TFX と TensorFlow の場合、「モデル」は、その時点までに学習された重みを含むチェックポイントを指します。

「モデル」は、予測がどのように計算されるかを表す TensorFlow 計算グラフ (つまり、Python ファイル) の定義も参照する場合があることに注意してください。 2 つの感覚は、文脈に基づいて交換可能に使用される場合があります。

保存されたモデル

  • SavedModelとは: TensorFlow モデルの普遍的で、言語に依存せず、気密性があり、回復可能なシリアル化です。
  • 重要な理由: 高レベルのシステムが単一の抽象化を使用して TensorFlow モデルを生成、変換、および消費できるようにします。

SavedModel は、本番環境で TensorFlow モデルを提供するため、またはネイティブ モバイルまたは JavaScript アプリケーション用にトレーニング済みのモデルをエクスポートするために推奨されるシリアル化形式です。たとえば、予測を行うためにモデルを REST サービスに変換するには、モデルを SavedModel としてシリアル化し、TensorFlow Serving を使用してそれを提供できます。詳細については、TensorFlow モデルの提供を参照してください。

スキーマ

一部の TFX コンポーネントは、スキーマと呼ばれる入力データの記述を使用します。スキーマはschema.protoのインスタンスです。スキーマはプロトコル バッファの一種で、より一般的には「protobuf」として知られています。スキーマは、特徴値のデータ型、特徴がすべての例に存在する必要があるかどうか、許容される値の範囲、およびその他のプロパティを指定できます。 TensorFlow Data Validation (TFDV) を使用する利点の 1 つは、トレーニング データからタイプ、カテゴリ、および範囲を推測してスキーマを自動的に生成することです。

スキーマ protobuf からの抜粋を次に示します。

...
feature {
  name: "age"
  value_count {
    min: 1
    max: 1
  }
  type: FLOAT
  presence {
    min_fraction: 1
    min_count: 1
  }
}
feature {
  name: "capital-gain"
  value_count {
    min: 1
    max: 1
  }
  type: FLOAT
  presence {
    min_fraction: 1
    min_count: 1
  }
}
...

次のコンポーネントはスキーマを使用します。

  • TensorFlow データ検証
  • TensorFlow 変換

典型的な TFX パイプラインでは、TensorFlow Data Validation がスキーマを生成し、それが他のコンポーネントによって消費されます。

TFX による開発

TFX は、ローカル コンピューターでの調査、実験、開発からデプロイまで、機械学習プロジェクトのすべてのフェーズに強力なプラットフォームを提供します。コードの重複を回避し、トレーニング/サービング スキューの可能性を排除するために、モデル トレーニングとトレーニング済みモデルのデプロイの両方に TFX パイプラインを実装し、トレーニングと推論の両方にTensorFlow Transformライブラリを活用するTransformコンポーネントを使用することを強くお勧めします。そうすることで、同じ前処理と分析コードを一貫して使用し、トレーニングに使用されるデータと本番環境でトレーニング済みのモデルに供給されるデータとの違いを回避し、そのコードを 1 回記述することでメリットを得ることができます。

データの探索、視覚化、およびクリーニング

データの探索、視覚化、およびクリーニング

TFX パイプラインは通常、入力データを受け取り、tf.Examples としてフォーマットするExampleGenコンポーネントで始まります。多くの場合、これはデータがトレーニング データセットと評価データセットに分割された後に行われるため、実際には ExampleGen コンポーネントの 2 つのコピー (トレーニング用と評価用に 1 つずつ) が存在します。これには通常、 StatisticsGenコンポーネントとSchemaGenコンポーネントが続き、データを調べてデータ スキーマと統計を推測します。スキーマと統計はExampleValidatorコンポーネントによって消費され、データ内の異常、欠損値、および不正なデータ型を探します。これらのコンポーネントはすべて、 TensorFlow Data Validationライブラリの機能を活用しています。

TensorFlow Data Validation (TFDV)は、データセットの初期調査、視覚化、およびクリーニングを行う際に役立つツールです。 TFDV はデータを調べて、データの種類、カテゴリ、および範囲を推測し、異常や欠損値を自動的に特定するのに役立ちます。また、データセットを調べて理解するのに役立つ視覚化ツールも提供します。パイプラインが完了したら、 MLMDからメタデータを読み取り、Jupyter ノートブックで TFDV の視覚化ツールを使用してデータを分析できます。

最初のモデルのトレーニングとデプロイに続いて、TFDV を使用して、推論リクエストからデプロイされたモデルへの新しいデータを監視し、異常やドリフトを探すことができます。これは、傾向や季節性の結果として時間の経過とともに変化する時系列データに特に役立ち、データに問題がある場合やモデルを新しいデータで再トレーニングする必要がある場合に通知するのに役立ちます。

データの可視化

TFDV (通常は StatisticsGen、SchemaGen、および ExampleValidator) を使用するパイプラインのセクションを通じてデータの最初の実行を完了したら、Jupyter スタイルのノートブックで結果を視覚化できます。追加の実行では、データがモデルとアプリケーションにとって最適になるまで、調整しながらこれらの結果を比較できます。

最初にML メタデータ (MLMD)にクエリを実行してこれらのコンポーネントの実行結果を見つけ、次に TFDV の視覚化サポート API を使用してノートブックに視覚化を作成します。これにはtfdv.load_statistics()tfdv.visualize_statistics( ) が含まれます。この視覚化を使用すると、データセットの特性をよりよく理解し、必要に応じて変更できます。

モデルの開発とトレーニング

機能エンジニアリング

典型的な TFX パイプラインには、 TensorFlow Transform (TFT)ライブラリの機能を活用して特徴エンジニアリングを実行するTransformコンポーネントが含まれます。 Transform コンポーネントは、SchemaGen コンポーネントによって作成されたスキーマを使用し、データ変換を適用して、モデルのトレーニングに使用される機能を作成、結合、および変換します。欠損値のクリーンアップと型の変換も、推論要求のために送信されたデータにも存在する可能性がある場合は、変換コンポーネントで実行する必要があります。 TFX でのトレーニング用の TensorFlow コードを設計する際には、いくつかの重要な考慮事項があります

モデリングとトレーニング

Transform コンポーネントの結果は、 Trainerコンポーネント中に TensorFlow のモデリング コードにインポートされて使用される SavedModel です。この SavedModel には、Transform コンポーネントで作成されたすべてのデータ エンジニアリング変換が含まれているため、トレーニングと推論の両方でまったく同じコードを使用して同一の変換が実行されます。 Transform コンポーネントの SavedModel を含むモデリング コードを使用して、トレーニング データと評価データを使用し、モデルをトレーニングできます。

Estimator ベースのモデルを使用する場合、モデリング コードの最後のセクションでは、モデルを SavedModel と EvalSavedModel の両方として保存する必要があります。 EvalSavedModel として保存すると、トレーニング時に使用されるメトリクスが評価中にも利用できるようになります (これは keras ベースのモデルには必要ないことに注意してください)。 EvalSavedModel を保存するには、 TensorFlow Model Analysis (TFMA)ライブラリを Trainer コンポーネントにインポートする必要があります。

import tensorflow_model_analysis as tfma
...

tfma.export.export_eval_savedmodel(
        estimator=estimator,
        export_dir_base=eval_model_dir,
        eval_input_receiver_fn=receiver_fn)

オプションのTunerコンポーネントを Trainer の前に追加して、モデルのハイパーパラメーター (レイヤー数など) を調整できます。指定されたモデルとハイパーパラメーターの検索空間を使用して、チューニング アルゴリズムは目的に基づいて最適なハイパーパラメーターを見つけます。

モデルのパフォーマンスの分析と理解

モデル分析

最初のモデルの開発とトレーニングに続いて、モデルのパフォーマンスを分析して実際に理解することが重要です。典型的な TFX パイプラインには、開発のこのフェーズに強力なツールセットを提供するTensorFlow Model Analysis (TFMA)ライブラリの機能を活用するEvaluatorコンポーネントが含まれます。 Evaluator コンポーネントは、上記でエクスポートしたモデルを使用し、モデルのパフォーマンスを視覚化および分析するときに使用できるtfma.SlicingSpecのリストを指定できるようにします。各SlicingSpecは、カテゴリ特徴の特定のカテゴリや数値特徴の特定の範囲など、調べたいトレーニング データのスライスを定義します。

たとえば、これは、顧客のさまざまなセグメントに対するモデルのパフォーマンスを理解しようとする場合に重要です。これは、年間の購入、地理的データ、年齢層、または性別によってセグメント化される可能性があります。これは、支配的なグループのパフォーマンスが、重要でありながら小規模なグループの許容できないパフォーマンスを覆い隠す可能性がある、ロングテールを持つデータセットにとって特に重要です。たとえば、あなたのモデルは平均的な従業員にはうまく機能するかもしれませんが、幹部スタッフには悲惨な結果をもたらすかもしれません。

モデルの分析と可視化

モデルをトレーニングし、トレーニング結果に対して ( TFMAを利用する) Evaluatorコンポーネントを実行して、データの最初の実行を完了したら、Jupyter スタイルのノートブックで結果を視覚化できます。追加の実行では、結果がモデルとアプリケーションにとって最適になるまで、調整しながらこれらの結果を比較できます。

最初にML メタデータ (MLMD)にクエリを実行してこれらのコンポーネントの実行結果を見つけ、次に TFMA の視覚化サポート API を使用してノートブックに視覚化を作成します。これにはtfma.load_eval_resultstfma.view.render_slicing_metricsが含まれます。この視覚化を使用すると、モデルの特性をよりよく理解し、必要に応じて変更できます。

モデルのパフォーマンスの検証

モデルのパフォーマンスを分析する一環として、ベースライン (現在提供しているモデルなど) に対してパフォーマンスを検証する必要がある場合があります。モデルの検証は、候補モデルとベースライン モデルの両方をEva​​luatorコンポーネントに渡すことによって実行されます。エバリュエーターは、候補とベースラインの両方のメトリック (AUC、損失など) を、対応する差分メトリックのセットと共に計算します。次に、しきい値を適用して、モデルを本番環境にゲートプッシュするために使用できます。

モデルを提供できることの検証

インフラ検証

トレーニング済みのモデルをデプロイする前に、モデルがサービス インフラストラクチャで本当にサービス可能かどうかを検証する必要がある場合があります。これは、新しく公開されたモデルによってシステムが予測を提供するのを妨げないようにするために、実稼働環境で特に重要です。 InfraValidatorコンポーネントは、サンドボックス環境でモデルのカナリア デプロイを行い、オプションで実際のリクエストを送信して、モデルが正しく機能することを確認します。

導入対象

満足のいくモデルを開発してトレーニングしたら、推論リクエストを受け取る 1 つ以上のデプロイ ターゲットにデプロイします。 TFX は、3 つのクラスのデプロイ ターゲットへのデプロイをサポートしています。 SavedModels としてエクスポートされたトレーニング済みモデルは、これらのデプロイ ターゲットのいずれかまたはすべてにデプロイできます。

コンポーネント フロー

推論: TensorFlow サービング

TensorFlow Serving (TFS)は、本番環境向けに設計された、機械学習モデル用の柔軟で高性能なサービス提供システムです。それは SavedModel を消費し、REST または gRPC インターフェイスのいずれかを介して推論リクエストを受け入れます。 1 つ以上のネットワーク サーバー上で一連のプロセスとして実行され、いくつかの高度なアーキテクチャの 1 つを使用して同期と分散計算を処理します。 TFS ソリューションの開発と展開の詳細については、 TFS のドキュメントを参照してください。

典型的なパイプラインでは、 Trainerコンポーネントでトレーニングされた SavedModel は、最初にInfraValidatorコンポーネントでインフラ検証されます。 InfraValidator はカナリア TFS モデル サーバーを起動して、SavedModel を実際に提供します。検証に合格すると、 Pusherコンポーネントが最後に SavedModel を TFS インフラストラクチャにデプロイします。これには、複数のバージョンとモデルの更新の処理が含まれます。

ネイティブ モバイルおよび IoT アプリケーションでの推論: TensorFlow Lite

TensorFlow Liteは、開発者がネイティブ モバイルおよび IoT アプリケーションでトレーニング済みの TensorFlow モデルを使用できるようにするためのツール スイートです。 TensorFlow Serving と同じ SavedModel を使用し、量子化やプルーニングなどの最適化を適用して、結果として得られるモデルのサイズとパフォーマンスを最適化し、モバイル デバイスや IoT デバイスでの実行の課題に対応します。 TensorFlow Lite の使用に関する詳細については、TensorFlow Lite のドキュメントを参照してください。

JavaScript での推論: TensorFlow JS

TensorFlow JSは、ブラウザおよび Node.js で ML モデルをトレーニングおよびデプロイするための JavaScript ライブラリです。 TensorFlow Serving および TensorFlow Lite と同じ SavedModel を使用し、それらを TensorFlow.js Web 形式に変換します。 TensorFlow JS の使用の詳細については、TensorFlow JS のドキュメントを参照してください。

Airflow を使用した TFX パイプラインの作成

詳細については、気流ワークショップを確認してください

Kubeflow で TFX パイプラインを作成する

設定

Kubeflow では、パイプラインを大規模に実行するために Kubernetes クラスターが必要です。 Kubeflow クラスターをデプロイするためのオプションをガイドする Kubeflow デプロイ ガイドラインを参照してください。

TFX パイプラインを構成して実行する

TFX on Cloud AI Platform Pipeline のチュートリアルに従って、Kubeflow で TFX サンプル パイプラインを実行してください。 TFX コンポーネントは、Kubeflow パイプラインを構成するためにコンテナー化されています。このサンプルは、パイプラインを構成して大規模なパブリック データセットを読み取り、トレーニングとデータ処理のステップをクラウドで大規模に実行する機能を示しています。

パイプライン アクションのコマンド ライン インターフェース

TFX は、Apache Airflow、Apache Beam、Kubeflow などのさまざまなオーケストレーターで、パイプラインの作成、更新、実行、一覧表示、削除など、あらゆるパイプライン アクションを実行するのに役立つ統合 CLI を提供します。詳細については、こちらの指示に従ってください。