Xây dựng các thành phần dựa trên Container

Các thành phần dựa trên vùng chứa cung cấp tính linh hoạt để tích hợp mã được viết bằng bất kỳ ngôn ngữ nào vào quy trình của bạn, miễn là bạn có thể thực thi mã đó trong vùng chứa Docker.

Nếu bạn chưa quen với quy trình TFX, hãy tìm hiểu thêm về các khái niệm cốt lõi của quy trình TFX .

Tạo 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 được hỗ trợ bởi các chương trình dòng lệnh được chứa trong vùng chứa. Nếu bạn đã có hình ảnh vùng chứa, bạn có thể sử dụng TFX để tạo thành phần từ hình ảnh đó bằng cách sử dụng hàm create_container_component để khai báo đầu vào và đầu ra. Thông số chức năng:

  • name: Tên của thành phần.
  • đầu vào: Một từ điển ánh xạ tên đầu vào thành các loại. kết quả đầu ra: Một từ điển ánh xạ tên đầu ra thành các tham số loại: Một từ điển ánh xạ tên tham số thành các loại.
  • image: Tên hình ảnh vùng chứa và thẻ hình ảnh tùy chọn.
  • lệnh: Dòng lệnh điểm vào vùng chứa. Không được thực thi trong shell. Dòng lệnh có thể sử dụng các đối tượng giữ chỗ được thay thế tại thời điểm biên dịch bằng đầu vào, đầu ra hoặc tham số. Các đối tượng giữ chỗ có thể được nhập từ tfx.dsl.component.experimental.placeholders . Lưu ý rằng các mẫu Jinja không được hỗ trợ.

Giá trị trả về: một lớp Thành phần kế thừa từ base_comComponent.BaseComponent có thể được khởi tạo và sử dụng bên trong đường dẫn.

Phần giữ chỗ

Đối với một thành phần có đầu vào hoặc đầu ra, command thường cần có phần giữ chỗ được thay thế bằng dữ liệu thực tế khi chạy. Một số phần giữ chỗ được cung cấp cho mục đích này:

  • InputValuePlaceholder : Trình giữ chỗ cho giá trị của tạo phẩm đầu vào. Trong thời gian chạy, phần giữ chỗ này được thay thế bằng chuỗi biểu diễn giá trị của tạo phẩm.

  • InputUriPlaceholder : Trình giữ chỗ cho URI của đối số tạo tác đầu vào. Trong thời gian chạy, phần giữ chỗ này được thay thế bằng URI của dữ liệu của tạo phẩm đầu vào.

  • OutputUriPlaceholder : Trình giữ chỗ cho URI của đối số tạo tác đầu ra. Trong thời gian chạy, trình giữ chỗ này được thay thế bằng URI nơi thành phần sẽ lưu trữ dữ liệu của tạo phẩm đầu ra.

Tìm hiểu thêm về phần giữ chỗ dòng lệnh của thành phần TFX .

Ví dụ về Thành phần dựa trên vùng chứa

Sau đây là ví dụ về thành phần không phải Python có chức năng tải xuống, chuyển đổi và tải lên dữ liệu:

import tfx.v1 as tfx

grep_component = tfx.dsl.components.create_container_component(
    name='FilterWithGrep',
    inputs={
        'text': tfx.standard_artifacts.ExternalArtifact,
    },
    outputs={
        'filtered_text': tfx.standard_artifacts.ExternalArtifact,
    },
    parameters={
        'pattern': str,
    },
    # The component code uses gsutil to upload the data to Google Cloud Storage, so the
    # container image needs to have gsutil installed and configured.
    image='google/cloud-sdk:278.0.0',
    command=[
        'sh', '-exc',
        '''
          pattern="$1"
          text_uri="$3"/data  # Adding suffix, because currently the URI are "directories". This will be fixed soon.
          text_path=$(mktemp)
          filtered_text_uri="$5"/data  # Adding suffix, because currently the URI are "directories". This will be fixed soon.
          filtered_text_path=$(mktemp)

          # Getting data into the container
          gsutil cp "$text_uri" "$text_path"

          # Running the main code
          grep "$pattern" "$text_path" >"$filtered_text_path"

          # Getting data out of the container
          gsutil cp "$filtered_text_path" "$filtered_text_uri"
        ''',
        '--pattern', tfx.dsl.placeholders.InputValuePlaceholder('pattern'),
        '--text', tfx.dsl.placeholders.InputUriPlaceholder('text'),
        '--filtered-text', tfx.dsl.placeholders.OutputUriPlaceholder('filtered_text'),
    ],
)