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 entre 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 dimensionado 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:
- Fornecimento de código Python e dependências como pacote de origem
- [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:
- Estão familiarizados com o pacote Python e
- 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áriotensorflow/tfx
imagem:
- Para os usuários que (1) o uso
# 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([...])