Hiểu các thành phần tùy chỉnh TFX

Các đường ống TFX cho phép bạn sắp xếp quy trình công việc học máy (ML) của mình trên các trình điều phối, chẳng hạn như: Apache Airflow, Apache Beam và Kubeflow Pipelines. Các đường ống sắp xếp quy trình làm việc của bạn thành một chuỗi các thành phần, trong đó mỗi thành phần thực hiện một bước trong quy trình làm việc ML của bạn. Các thành phần tiêu chuẩn TFX cung cấp chức năng đã được chứng minh để giúp bạn bắt đầu xây dựng quy trình làm việc ML một cách dễ dàng. Bạn cũng có thể bao gồm các thành phần tùy chỉnh trong quy trình làm việc của mình. Các thành phần tùy chỉnh cho phép bạn mở rộng quy trình làm việc ML của mình bằng cách:

  • Xây dựng các thành phần được điều chỉnh để đáp ứng nhu cầu của bạn, chẳng hạn như nhập dữ liệu từ một hệ thống độc quyền.
  • Áp dụng tăng dữ liệu, lấy mẫu lên hoặc lấy mẫu xuống.
  • Thực hiện phát hiện bất thường dựa trên khoảng tin cậy hoặc lỗi tái tạo mã tự động.
  • Giao tiếp với các hệ thống bên ngoài như bàn trợ giúp để cảnh báo và giám sát.
  • Áp dụng nhãn cho các ví dụ không được gắn nhãn.
  • Tích hợp các công cụ được xây dựng bằng các ngôn ngữ khác ngoài Python vào quy trình làm việc ML của bạn, chẳng hạn như thực hiện phân tích dữ liệu bằng R.

Bằng cách kết hợp các thành phần tiêu chuẩn và các thành phần tùy chỉnh, bạn có thể xây dựng quy trình làm việc ML đáp ứng nhu cầu của mình đồng thời tận dụng các phương pháp hay nhất được tích hợp trong các thành phần tiêu chuẩn TFX.

Hướng dẫn này mô tả các khái niệm cần thiết để hiểu các thành phần tùy chỉnh TFX và các cách khác nhau mà bạn có thể tạo các thành phần tùy chỉnh.

Giải phẫu của một thành phần TFX

Phần này cung cấp tổng quan cấp cao về thành phần của thành phần TFX. Nếu bạn chưa quen với đường ống TFX, hãy tìm hiểu các khái niệm cốt lõi bằng cách đọc hướng dẫn để hiểu đường ống TFX .

Các thành phần TFX bao gồm một đặc tả thành phần và một lớp thực thi được đóng gói trong một lớp giao diện thành phần.

Đặc tả thành phần xác định hợp đồng đầu vào và đầu ra của thành phần. Hợp đồng này chỉ định các tạo tác đầu vào và đầu ra của thành phần và các tham số được sử dụng để thực thi thành phần.

Lớp thực thi của một thành phần cung cấp việc triển khai cho công việc được thực hiện bởi thành phần.

Một lớp giao diện thành phần kết hợp đặc tả thành phần với trình thực thi để sử dụng như một thành phần trong đường dẫn TFX.

Các thành phần TFX trong thời gian chạy

Khi một đường ống chạy một thành phần TFX, thành phần đó được thực thi theo ba giai đoạn:

  1. Đầu tiên, Trình điều khiển sử dụng đặc tả thành phần để truy xuất các tạo tác cần thiết từ kho siêu dữ liệu và chuyển chúng vào thành phần.
  2. Tiếp theo, Executor thực hiện công việc của thành phần.
  3. Sau đó, Publisher sử dụng đặc tả thành phần và kết quả từ trình thực thi để lưu trữ kết quả đầu ra của thành phần trong kho siêu dữ liệu.

Giải phẫu thành phần

Hầu hết các triển khai thành phần tùy chỉnh không yêu cầu bạn tùy chỉnh Trình điều khiển hoặc Nhà xuất bản. Thông thường, các sửa đổi đối với Trình điều khiển và Nhà xuất bản chỉ cần thiết nếu bạn muốn thay đổi sự tương tác giữa các thành phần của đường dẫn và kho siêu dữ liệu. Nếu bạn chỉ muốn thay đổi đầu vào, đầu ra hoặc tham số cho thành phần của mình, bạn chỉ cần sửa đổi đặc tả thành phần .

Các loại thành phần tùy chỉnh

Có ba loại thành phần tùy chỉnh: thành phần dựa trên hàm Python, thành phần dựa trên vùng chứa và thành phần hoàn toàn tùy chỉnh. Các phần sau đây mô tả các loại thành phần khác nhau và các trường hợp bạn nên sử dụng từng cách tiếp cận.

Các thành phần dựa trên hàm Python

Các thành phần dựa trên hàm Python dễ xây dựng hơn các thành phần dựa trên vùng chứa hoặc các thành phần tùy chỉnh hoàn toàn. Đặc tả thành phần được xác định trong các đối số của hàm Python bằng cách sử dụng chú thích kiểu mô tả nếu một đối số là một cấu phần đầu vào, cấu phần đầu ra hoặc một tham số. Phần thân hàm xác định trình thực thi của thành phần. Giao diện thành phần được xác định bằng cách thêm trình trang trí @component vào chức năng của bạn.

Bằng cách trang trí hàm của bạn với trình trang trí @component và xác định các đối số của hàm với chú thích kiểu, bạn có thể tạo một thành phần mà không cần phải xây dựng đặc tả thành phần, trình thực thi và giao diện thành phần phức tạp.

Tìm hiểu cách xây dựng các thành phần dựa trên hàm Python .

Các thành phần dựa trên vùng chứa

Các thành phần dựa trên vùng chứa cung cấp sự linh hoạt để tích hợp mã được viết bằng bất kỳ ngôn ngữ nào vào đường dẫn của bạn, miễn là bạn có thể thực thi mã đó trong vùng chứa Docker. Để tạo thành phần dựa trên vùng chứa, bạn phải xây dựng hình ảnh vùng chứa Docker chứa mã thực thi của thành phần của bạn. Sau đó, bạn phải gọi hàm create_container_component để xác định:

  • Các đầu vào, đầu ra và thông số của đặc điểm kỹ thuật thành phần của bạn.
  • Hình ảnh vùng chứa và lệnh mà trình thực thi thành phần chạy.

Hàm này trả về một thể hiện của một thành phần mà bạn có thể đưa vào định nghĩa đường ống của mình.

Cách tiếp cận này phức tạp hơn so với việc xây dựng một thành phần dựa trên hàm Python, vì nó yêu cầu đóng gói mã của bạn dưới dạng hình ảnh vùng chứa. Cách tiếp cận này phù hợp nhất để bao gồm mã không phải Python trong đường dẫn của bạn hoặc để xây dựng các thành phần Python với môi trường thời gian chạy phức tạp hoặc phụ thuộc.

Tìm hiểu cách xây dựng các thành phần dựa trên vùng chứa .

Các thành phần tùy chỉnh hoàn toàn

Các thành phần hoàn toàn tùy chỉnh cho phép bạn xây dựng các thành phần bằng cách xác định đặc tả thành phần, trình thực thi và các lớp giao diện thành phần. Cách tiếp cận này cho phép bạn sử dụng lại và mở rộng một thành phần tiêu chuẩn để phù hợp với nhu cầu của bạn.

Nếu một thành phần hiện có được xác định với các đầu vào và đầu ra giống như thành phần tùy chỉnh mà bạn đang phát triển, bạn có thể chỉ cần ghi đè lớp Executor của thành phần hiện có. Điều này có nghĩa là bạn có thể sử dụng lại một đặc tả thành phần và triển khai một trình thực thi mới có nguồn gốc từ một thành phần hiện có. Bằng cách này, bạn sử dụng lại chức năng được tích hợp trong các thành phần hiện có và chỉ triển khai chức năng được yêu cầu.

Tuy nhiên, nếu các đầu vào và đầu ra của thành phần mới của bạn là duy nhất, bạn có thể xác định một đặc tả thành phần hoàn toàn mới.

Cách tiếp cận này là tốt nhất để sử dụng lại các thông số kỹ thuật và trình thực thi thành phần hiện có.

Tìm hiểu cách xây dựng các thành phần hoàn toàn tùy chỉnh .