Ajuda a proteger a Grande Barreira de Corais com TensorFlow em Kaggle Junte Desafio

Construindo componentes baseados em contêineres

Os componentes baseados em contêiner fornecem a flexibilidade para integrar o código escrito em qualquer linguagem em seu pipeline, desde que você possa executar esse código em um contêiner do Docker.

Se você é novo para pipelines TFX, aprender mais sobre os conceitos fundamentais de dutos TFX .

Criação de um componente baseado em contêiner

Os componentes baseados em contêiner são apoiados por programas de linha de comando em contêiner. Se você já tem uma imagem de recipiente, você pode usar TFX para criar um componente-lo usando o create_container_component função de declarar entradas e saídas. Parâmetros de função:

  • Nome: O nome do componente.
  • Entradas: Um dicionário que mapeia nomes de entrada para os tipos. saídas: Um dicionário que mapeia nomes de saída para parâmetros de tipos: Um dicionário que mapeia nomes de parâmetros para tipos.
  • Imagem: nome da imagem Container e, opcionalmente, tag de imagem.
  • comando: Container linha de comando entrypoint. Não executado dentro de um shell. A linha de comando pode usar objetos de espaço reservado que são substituídos em tempo de compilação pela entrada, saída ou parâmetro. Os objetos de espaço reservado podem ser importados de tfx.dsl.component.experimental.placeholders . Observe que os modelos Jinja não são suportados.

Valor de retorno: a classe Component herdando de base_component.BaseComponent que pode ser instanciado e usado dentro do pipeline.

Marcadores

Para um componente que tem entradas ou saídas, o command muitas vezes precisa de ter espaços reservados que são substituídos com dados reais em tempo de execução. Vários marcadores de posição são fornecidos para essa finalidade:

  • InputValuePlaceholder : Um espaço reservado para o valor do artefato de entrada. No tempo de execução, esse espaço reservado é substituído pela representação de string do valor do artefato.

  • InputUriPlaceholder : Um espaço reservado para o URI do argumento de entrada artefato. No tempo de execução, esse espaço reservado é substituído pelo URI dos dados do artefato de entrada.

  • OutputUriPlaceholder : Um espaço reservado para o URI do argumento artefato de saída. No tempo de execução, esse espaço reservado é substituído pelo URI onde o componente deve armazenar os dados do artefato de saída.

Saiba mais sobre TFX espaços reservados de linha de comando componente .

Exemplo de componente baseado em contêiner

A seguir está um exemplo de um componente não Python que baixa, transforma e carrega os dados:

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