Membangun komponen berbasis Kontainer

Komponen berbasis kontainer memberikan fleksibilitas untuk mengintegrasikan kode yang ditulis dalam bahasa apa pun ke dalam pipeline Anda, selama Anda dapat mengeksekusi kode tersebut dalam kontainer Docker.

Jika Anda baru mengenal saluran pipa TFX, pelajari lebih lanjut tentang konsep inti saluran pipa TFX .

Membuat Komponen Berbasis Kontainer

Komponen berbasis kontainer didukung oleh program baris perintah dalam kontainer. Jika Anda sudah memiliki gambar container, Anda dapat menggunakan TFX untuk membuat komponen dari gambar tersebut dengan menggunakan fungsi create_container_component untuk mendeklarasikan input dan output. Parameter fungsi:

  • name: Nama komponen.
  • inputs: Kamus yang memetakan nama input ke tipe. outputs: Kamus yang memetakan nama output ke tipe parameter: Kamus yang memetakan nama parameter ke tipe.
  • image: Nama gambar kontainer, dan tag gambar opsional.
  • perintah: Baris perintah titik masuk kontainer. Tidak dieksekusi di dalam shell. Baris perintah dapat menggunakan objek placeholder yang diganti pada waktu kompilasi dengan input, output, atau parameter. Objek placeholder dapat diimpor dari tfx.dsl.component.experimental.placeholders . Perhatikan bahwa template Jinja tidak didukung.

Nilai yang dikembalikan: kelas Komponen yang diwarisi dari base_component.BaseComponent yang dapat dipakai dan digunakan di dalam pipeline.

Penampung

Untuk komponen yang memiliki input atau output, command sering kali memerlukan placeholder yang diganti dengan data aktual saat runtime. Beberapa placeholder disediakan untuk tujuan ini:

  • InputValuePlaceholder : Placeholder untuk nilai artefak masukan. Saat runtime, placeholder ini diganti dengan representasi string dari nilai artefak.

  • InputUriPlaceholder : Placeholder untuk URI argumen artefak masukan. Saat runtime, placeholder ini diganti dengan URI data artefak masukan.

  • OutputUriPlaceholder : Placeholder untuk URI argumen artefak keluaran. Saat runtime, placeholder ini diganti dengan URI tempat komponen harus menyimpan data artefak keluaran.

Pelajari lebih lanjut tentang placeholder baris perintah komponen TFX .

Contoh Komponen Berbasis Kontainer

Berikut ini adalah contoh komponen non-python yang mengunduh, mengubah, dan mengunggah data:

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'),
    ],
)