TFX 管線可讓您在協調器 (例如 Apache Airflow、Apache Beam 和 Kubeflow Pipelines) 上協調您的機器學習 (ML) 工作流程。管線會將您的工作流程組織成一連串的元件,其中每個元件都會執行 ML 工作流程中的一個步驟。TFX 標準元件提供經過驗證的功能,可協助您輕鬆開始建構 ML 工作流程。您也可以在工作流程中加入自訂元件。自訂元件可讓您透過下列方式擴充 ML 工作流程:
- 建構量身打造以符合您需求的元件,例如從專有系統擷取資料。
- 套用資料擴增、向上取樣或向下取樣。
- 根據信賴區間或自動編碼器重製誤差執行異常偵測。
- 與外部系統 (例如服務台) 介接以進行快訊和監控。
- 將標籤套用至未標記的範例。
- 將以 Python 以外的語言建構的工具整合到 ML 工作流程中,例如使用 R 執行資料分析。
透過混合標準元件和自訂元件,您可以建構符合您需求的 ML 工作流程,同時運用 TFX 標準元件內建的最佳做法。
本指南說明瞭解 TFX 自訂元件所需的概念,以及您可以建構自訂元件的不同方式。
TFX 元件剖析
本節提供 TFX 元件組成的概略總覽。如果您是 TFX 管線新手,請閱讀 TFX 管線理解指南,瞭解核心概念。
TFX 元件是由元件規格和執行器類別所組成,兩者會封裝在元件介面類別中。
元件規格定義元件的輸入和輸出合約。此合約會指定元件的輸入和輸出成品,以及用於元件執行的參數。
元件的執行器類別提供元件所執行工作的實作。
元件介面類別會將元件規格與執行器結合,以在 TFX 管線中做為元件使用。
執行階段的 TFX 元件
當管線執行 TFX 元件時,元件會在三個階段中執行
- 首先,「驅動程式」會使用元件規格從中繼資料儲存區擷取必要的成品,並將其傳遞至元件。
- 接下來,「執行器」會執行元件的工作。
- 然後,「發布器」會使用元件規格和執行器的結果,將元件的輸出儲存在中繼資料儲存區中。
大多數自訂元件實作都不需要您自訂「驅動程式」或「發布器」。一般而言,只有在您想要變更管線元件與中繼資料儲存區之間的互動時,才需要修改「驅動程式」和「發布器」。如果您只想變更元件的輸入、輸出或參數,則只需要修改元件規格。
自訂元件的類型
自訂元件有三種類型:以 Python 函式為基礎的元件、以容器為基礎的元件,以及完全自訂元件。以下各節說明不同類型的元件,以及您應在何種情況下使用每種方法。
以 Python 函式為基礎的元件
以 Python 函式為基礎的元件比以容器為基礎的元件或完全自訂元件更容易建構。元件規格是在 Python 函式的引數中使用類型註解來定義,類型註解會說明引數是輸入成品、輸出成品還是參數。函式主體會定義元件的執行器。元件介面是透過將 @component
裝飾器新增至函式來定義。
透過使用 @component
裝飾器裝飾您的函式,並使用類型註解定義函式引數,您可以建立元件,而無需建構元件規格、執行器和元件介面的複雜性。
瞭解如何建構以 Python 函式為基礎的元件。
以容器為基礎的元件
以容器為基礎的元件提供彈性,可將以任何語言編寫的程式碼整合到管線中,前提是您可以在 Docker 容器中執行該程式碼。若要建立以容器為基礎的元件,您必須建構包含元件可執行程式碼的 Docker 容器映像。然後,您必須呼叫 create_container_component
函式來定義
- 元件規格的輸入、輸出和參數。
- 元件執行器執行的容器映像和指令。
此函式會傳回您可以加入管線定義中的元件執行個體。
由於此方法需要將您的程式碼封裝為容器映像,因此比建構以 Python 函式為基礎的元件更複雜。此方法最適合用於在管線中加入非 Python 程式碼,或用於建構具有複雜執行階段環境或依附元件的 Python 元件。
瞭解如何建構以容器為基礎的元件。
完全自訂元件
完全自訂元件可讓您透過定義元件規格、執行器和元件介面類別來建構元件。此方法可讓您重複使用並擴充標準元件,以符合您的需求。
如果現有元件定義的輸入和輸出與您正在開發的自訂元件相同,您可以直接覆寫現有元件的「執行器」類別。這表示您可以重複使用元件規格,並實作衍生自現有元件的新執行器。如此一來,您可以重複使用內建於現有元件的功能,並且僅實作所需的功能。
但是,如果新元件的輸入和輸出是獨一無二的,您可以定義全新的元件規格。
此方法最適合用於重複使用現有的元件規格和執行器。
瞭解如何建構完全自訂元件。