Junte-se à comunidade SIG TFX-Addons e ajude a tornar o TFX ainda melhor!

Apache Beam e TFX

Apache feixe fornece uma estrutura para a execução de lote e streaming de processamento de dados trabalhos que são executados em uma variedade de motores de execução. Várias das bibliotecas TFX usam o Beam para executar tarefas, o que permite um alto grau de escalabilidade em clusters de computação. O Beam inclui suporte para uma variedade de mecanismos de execução ou "executores", incluindo um executor direto que é executado em um único nó de computação e é muito útil para desenvolvimento, teste ou pequenas implantações. O Beam fornece uma camada de abstração que permite que o TFX seja executado em qualquer executor compatível sem modificações no código. TFX usa a API Beam Python, portanto, é limitado aos executores que são suportados pela API Python.

Implantação e escalabilidade

Conforme os requisitos de carga de trabalho aumentam, o Beam pode ser escalonado para implantações muito grandes em grandes clusters de computação. Isso é limitado apenas pela escalabilidade do executor subjacente. Os executores em grandes implantações normalmente serão implantados em um sistema de orquestração de contêineres, como Kubernetes ou Apache Mesos, para automatizar a implantação, dimensionamento e gerenciamento de aplicativos.

Veja o Apache feixe documentação para obter mais informações sobre Apache Beam.

Para os usuários do Google Cloud, Dataflow é o corredor recomendado, que fornece uma plataforma serverless e rentável através autoscaling de recursos, reequilíbrio de trabalho dinâmico, profunda integração com outros serviços do Google Cloud, built-in de segurança e monitoramento.

Código Python personalizado e dependências

Uma complexidade notável de usar o Beam em um pipeline TFX é lidar com o código personalizado e / ou as dependências necessárias de módulos Python adicionais. Aqui estão alguns exemplos de quando isso pode ser um problema:

  • preprocessing_fn precisa se referir ao próprio módulo Python do usuário
  • um extrator personalizado para o componente Avaliador
  • módulos personalizados que são subclassificados de um componente TFX

TFX conta com o apoio da Beam para Gerir Python Pipeline Dependências para lidar com dependências Python. Atualmente, existem duas maneiras de gerenciar isso:

  1. Fornecimento de código Python e dependências como pacote de origem
  2. [Dataflow apenas] Usando uma imagem de contêiner como trabalhador

Eles são discutidos a seguir.

Fornecimento de código Python e dependências como pacote de origem

Isso é recomendado para usuários que:

  1. Estão familiarizados com o pacote Python e
  2. Use apenas o código-fonte Python (ou seja, sem módulos C ou bibliotecas compartilhadas).

Por favor, siga um dos caminhos em Gerenciamento Python Pipeline Dependências para fornecer isso usando um dos seguintes beam_pipeline_args:

  • --setup_file
  • --extra_package
  • --requirements_file

Aviso: Em qualquer um dos casos acima, por favor, certifique-se de que a mesma versão do tfx é listado como uma dependência.

[Dataflow apenas] Usando uma imagem de contêiner para um trabalhador

TFX 0.26.0 e acima tem suporte experimental para a utilização de imagem recipiente personalizado para os trabalhadores Dataflow.

Para usar isso, você deve:

  • Construir uma imagem Docker que tem tanto tfx e código personalizado dos usuários e dependências pré-instalado.
    • Para os usuários que (1) o uso tfx>=0.26 e (2) usa python 3.7 para desenvolver suas condutas, a maneira mais fácil de fazer isso é estender a versão correspondente do funcionário tensorflow/tfx imagem:
# You can use a build-arg to dynamically pass in the
# version of TFX being used to your Dockerfile.

ARG TFX_VERSION
FROM tensorflow/tfx:${TFX_VERSION}
# COPY your code and dependencies in
  • Envie a imagem criada para um registro de imagem de contêiner que pode ser acessado pelo projeto usado pelo Dataflow.
    • Usuários do Google Cloud pode considerar o uso Construir Nuvem que bem automatiza os passos acima.
  • Fornecer seguintes beam_pipeline_args :
beam_pipeline_args.extend([
    '--runner=DataflowRunner',
    '--project={project-id}',
    '--worker_harness_container_image={image-ref}',
    '--experiments=use_runner_v2',
])

TODO (b / 171733562): Remova use_runner_v2, uma vez que é o padrão para Dataflow.

TODO (b / 179738639): Criar documentação para saber como recipiente personalizado teste localmente depois https://issues.apache.org/jira/browse/BEAM-5440

Argumentos do Beam Pipeline

Vários componentes TFX dependem do Beam para processamento de dados distribuídos. Eles são configurados com beam_pipeline_args , que é especificado durante durante a criação do gasoduto:

my_pipeline = Pipeline(
    ...,
    beam_pipeline_args=[...])

TFX 0,30 e acima adiciona uma interface, with_beam_pipeline_args , que se estende para o args feixe nível oleoduto por componente:

example_gen = CsvExampleGen(input_base=data_root).with_beam_pipeline_args([...])