Path: blob/master/site/ja/tfx/guide/custom_function_component.md
25118 views
カスタム Python 関数コンポーネント
Python 関数ベースのコンポーネント定義を使用すると、コンポーネント仕様クラス、実行クラス、およびコンポーネントインターフェイスクラスを定義する手間が省けるため、TFX カスタムコンポーネントを簡単に作成できます。このコンポーネント定義スタイルでは、型ヒントで注釈が付けられた関数を記述します。型ヒントは、コンポーネントの入力アーティファクト、出力アーティファクト、およびパラメータを記述します。
次の例のように、簡単にカスタムコンポーネントを作成できます。
内部的には、これは BaseComponent
{: .external } のサブクラスであるカスタムコンポーネントとその Spec クラスおよび Executor クラスを定義します。
注意: 以下で説明する機能(関数に @component(use_beam=True)
でアノテーションを付けた BaseBeamComponent ベースのコンポーネント)は実験的なものであり、下位互換性の保証はありません。
BaseBeamComponent
{: .external } のサブクラスを定義して、TFX パイプラインごとの共有構成でビームパイプラインを使用できるようにする、つまり、パイプラインをコンパイルするときに beam_pipeline_args
(Chicago Taxi Pipeline Example{: .external })を使用する場合、次の例のように、デコレータで use_beam=True
を設定し、関数にデフォルト値 None
で別の BeamComponentParameter
を追加できます。
TFX パイプラインが初めての方は、TFX パイプラインの中心的概念の学習をご確認ください。
入力、出力、およびパラメータ
TFX では、入力と出力は、基になるデータの場所とそれに関連付けられたメタデータプロパティを記述するアーティファクトオブジェクトとして追跡されます。この情報は ML メタデータに保存されます。アーティファクトは、int、float、bytes、unicode 文字列などの複雑なデータ型または単純なデータ型を記述できます。
パラメータは、パイプラインの構築時に認識されているコンポーネントへの引数(int、float、bytes、または Unicode 文字列)です。パラメータは、引数と、トレーニングの反復回数、ドロップアウト率、その他の構成などのハイパーパラメータをコンポーネントに指定するのに役立ちます。パラメータは、ML メタデータで追跡される際に、コンポーネント実行のプロパティとして保存されます。
注:現在、出力された単純なデータ型の値は、実行時に不明であるため、パラメータとして使用できません。同様に、入力された単純なデータ型の値は、現在、パイプラインの構築時に既知の具象値を取ることはできません。TFX の今後のリリースでは、この制限が削除される可能性があります。
定義
カスタムコンポーネントを作成するには、カスタムロジックを実装する関数を記述し、tfx.dsl.component.experimental.decorators
モジュールからの@component
デコレータ{: .external }でデコレートします。コンポーネントの入力スキーマと出力スキーマを定義するには、tfx.dsl.component.experimental.annotations
モジュールの注釈を使用して、関数の引数と戻り値に注釈を付けます。
それぞれの入力アーティファクトに、
InputArtifact[ArtifactType]
の型ヒント注釈を適用します。ArtifactType
を、tfx.types.Artifact
のサブクラスであるアーティファクトの型に置き換えます。これらの入力はオプションの引数にすることができます。それぞれの出力アーティファクトに、
OutputArtifact[ArtifactType]
の型ヒント注釈を適用します。ArtifactType
を、tfx.types.Artifact
のサブクラスであるアーティファクトの型に置き換えます。コンポーネントの出力アーティファクトは、関数の入力引数として渡す必要があります。これにより、コンポーネントは、システム管理の場所に出力を書き込み、適切なアーティファクトメタデータプロパティを設定できます。この引数はオプションにすることも、デフォルト値で定義することもできます。パラメータごとに、型ヒント注釈
Parameter[T]
を使用します。T
をパラメータの方に置き換えます。現在サポートされているプリミティブ Python 型は、bool
、int
、float
、str
、およびbytes
のみです。ビームパイプラインの場合は、型ヒント注釈
BeamComponentParameter[beam.Pipeline]
を使用します。デフォルト値をNone
に設定します。値None
は、BaseBeamExecutor
{: .external } の_make_beam_pipeline()
によって作成されたインスタンス化されたビームパイプラインに置き換えられます。パイプラインの構築時に不明な単純なデータ型の入力(
int
、float
、str
、またはbytes
)には、それぞれ型ヒントT
を使用してください。TFX 0.22 リリースでは、この型の入力のパイプライン構築時に具象値を渡すことができないことに注意してください。(前のサクションで説明したように、代わりにParameter
注釈を使用します)。この引数はオプションにすることも、デフォルト値で定義することもできます。コンポーネントに単純なデータ型の出力(int
、float
、str
、またはbytes
)がある場合、戻り値型の注釈としてTypedDict
を使い、適切な dict オブジェクトを戻して、これらの出力を返すことができます。
関数の本体では、入力アーティファクトと出力アーティファクトはtfx.types.Artifact
オブジェクトとして渡されます。.uri
を調べて、システム管理の場所を取得し、プロパティを読み取り/設定できます。入力パラメータと単純なデータ型の入力は、指定された型のオブジェクトとして渡されます。単純なデータ型の出力はディクショナリとして返される必要があります。鍵は適切な出力名であり、値は期待される戻り値です。
完成した関数コンポーネントは次のようになります。
上記の例では、MyTrainerComponent
を Python 関数ベースのカスタムコンポーネントとして定義しています。このコンポーネントは、入力としてexamples
アーティファクトを消費し、出力としてmodel
アーティファクトを生成します。コンポーネントはartifact_instance.uri
を使用して、システム管理の場所でアーティファクトの読み取りまたは書き込みを行います。コンポーネントはnum_iterations
入力パラメータとdropout_hyperparameter
の単純なデータ型値を取り、コンポーネントは単純なデータ型の出力値としてloss
とaccuracy
メトリックを出力します。出力されたmodel
アーティファクトは、Pusher
コンポーネントにより使用されます。