Sobre a ML do Dataflow

É possível usar as habilidades de processamento de dados em escala da ML do Dataflow para pipelines de previsão e inferência e para preparação de dados para treinamento.

Diagrama do fluxo de trabalho de ML do Dataflow.

Figura 1. O fluxo de trabalho completo do Dataflow ML.

Requisitos e limitações

  • A ML do Dataflow é compatível com pipelines em lote e de streaming.
  • A API RunInference é compatível com o Apache Beam 2.40.0 e versões mais recentes.
  • A API MLTransform é compatível com o Apache Beam 2.53.0 e versões mais recentes.
  • Os gerenciadores de modelos estão disponíveis para PyTorch, scikit-learn, TensorFlow, ONNX e TensorRT. Para frameworks incompatíveis, use um gerenciador de modelos personalizado.

Preparação de dados para treinamento

Pipelines de previsão e inferência

A ML do Dataflow combina a capacidade do Dataflow com a API RunInference do Apache Beam. Com a API RunInference, você define as características e propriedades do modelo e transmite essa configuração para a transformação do RunInference. Esse recurso permite que os usuários executem o modelo nos pipelines do Dataflow sem que precisem conhecer os detalhes de implementação do modelo. Escolha o framework mais adequado aos seus dados, como o TensorFlow e o PyTorch.

Executar vários modelos em um pipeline

Use a transformação RunInference para adicionar vários modelos de inferência ao pipeline do Dataflow. Para mais informações, incluindo detalhes de código, consulte Pipelines de vários modelos na documentação do Apache Beam.

Criar um pipeline em várias linguagens

Para usar o RunInference com um pipeline do Java, crie uma transformação do Python entre linguagens. O pipeline chama a transformação, que faz o pré-processamento, o pós-processamento e a inferência.

Para instruções detalhadas e um pipeline de amostra, consulte Como usar o RunInference do SDK do Java.

Usar GPUs com o Dataflow

Para pipelines em lote ou de streaming que exigem o uso de aceleradores, é possível executar pipelines do Dataflow em dispositivos GPU NVIDIA. Para mais informações, consulte Executar um pipeline do Dataflow com GPUs.

Resolver problemas na ML do Dataflow

Nesta seção, você verá estratégias de solução de problemas e links que podem ser úteis ao usar a ML do Dataflow.

A pilha espera que cada tensor seja do mesmo tamanho

Se você fornecer imagens de diferentes tamanhos ou embeddings de palavras de tamanhos diferentes ao usar a API RunInference, poderá ocorrer o seguinte erro:

File "/beam/sdks/python/apache_beam/ml/inference/pytorch_inference.py", line 232, in run_inference batched_tensors = torch.stack(key_to_tensor_list[key]) RuntimeError: stack expects each tensor to be equal size, but got [12] at entry 0 and [10] at entry 1 [while running 'PyTorchRunInference/ParDo(_RunInferenceDoFn)']

Esse erro ocorre porque a API RunInference não pode agrupar elementos do tensor de tamanhos diferentes. Para soluções alternativas, consulte Não é possível agrupar elementos do tensor na documentação do Apache Beam.

Evite erros de falta de memória com modelos grandes

Ao carregar um modelo de ML médio ou grande, a máquina pode ficar sem memória. O Dataflow oferece ferramentas para evitar erros de falta de memória (OOM, na sigla em inglês) ao carregar modelos de ML. Use a tabela a seguir para determinar a abordagem adequada para seu cenário.

Cenário Solução
Os modelos são pequenos o suficiente para caber na memória. Use a transformação RunInference sem configurações adicionais. A transformação RunInference compartilha os modelos entre linhas de execução. Se você conseguir encaixar um modelo por núcleo de CPU na máquina, o pipeline poderá usar a configuração padrão.
Vários modelos treinados de maneira diferente estão realizando a mesma tarefa. Use chaves por modelo. Para mais informações, consulte Executar inferência de ML com vários modelos treinados de maneira diferente.
Um modelo é carregado na memória, e todos os processos compartilham esse modelo.

Use o parâmetro large_model. Para mais informações, consulte Executar inferência de ML com vários modelos treinados de maneira diferente.

Se você estiver criando um gerenciador de modelo personalizado, em vez de usar o parâmetro large_model, substitua o parâmetro share_model_across_processes.

Você precisa configurar o número exato de modelos carregados na máquina.

Para controlar exatamente quantos modelos são carregados, use o parâmetro model_copies.

Se você estiver criando um gerenciador de modelo personalizado, substitua o parâmetro model_copies.

Para mais informações sobre o gerenciamento de memória com o Dataflow, consulte Resolver erros de falta de memória no Dataflow.

A seguir