Acerca do Dataflow ML

Pode usar as capacidades de processamento de dados em grande escala do Dataflow ML para pipelines de previsão e inferência e para preparação de dados para preparação.

Diagrama do fluxo de trabalho de ML do Dataflow.

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

Requisitos e limitações

  • O Dataflow ML suporta pipelines em lote e por streaming.
  • A API RunInference é suportada no Apache Beam 2.40.0 e versões posteriores.
  • A API MLTransform é suportada no Apache Beam 2.53.0 e versões posteriores.
  • Os controladores de modelos estão disponíveis para PyTorch, scikit-learn, TensorFlow, ONNX e TensorRT. Para frameworks não suportados, pode usar um controlador de modelo personalizado.

Preparação de dados para a preparação

Pipelines de previsão e inferência

O Dataflow ML combina o poder do Dataflow com a API RunInference do Apache Beam. Com a API RunInference, define as caraterísticas e as propriedades do modelo e transmite essa configuração à transformação RunInference. Esta funcionalidade permite aos utilizadores executar o modelo nos respetivos pipelines do Dataflow sem terem de conhecer os detalhes de implementação do modelo. Pode escolher a framework que melhor se adapta aos seus dados, como o TensorFlow e o PyTorch.

Execute vários modelos num pipeline

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

Crie um pipeline multilingue

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

Para ver instruções detalhadas e um exemplo de pipeline, consulte o artigo Usar o RunInference a partir do SDK Java.

Use GPUs com o Dataflow

Para pipelines de processamento em lote ou streaming que requerem a utilização de aceleradores, pode executar pipelines do Dataflow em dispositivos com GPU NVIDIA. Para mais informações, consulte o artigo Execute um pipeline do Dataflow com GPUs.

Resolva problemas com o Dataflow ML

Esta secção fornece estratégias de resolução de problemas e links que pode considerar úteis quando usa o Dataflow ML.

A função Stack espera que cada tensor tenha o mesmo tamanho

Se fornecer imagens de tamanhos diferentes ou incorporações de palavras de comprimentos diferentes quando usar a API RunInference, pode 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)']

Este erro ocorre porque a API RunInference não consegue processar em lote elementos de tensores de tamanhos diferentes. Para ver soluções alternativas, consulte o artigo Não é possível processar em lote elementos de tensor na documentação do Apache Beam.

Evite erros de falta de memória com modelos grandes

Quando carrega um modelo de ML médio ou grande, a sua máquina pode ficar sem memória. O Dataflow fornece ferramentas para ajudar a evitar erros de falta de memória (OOM) ao carregar modelos de ML. Use a tabela seguinte para determinar a abordagem adequada para o seu cenário.

Cenário Solução
Os modelos são suficientemente pequenos para caberem na memória. Use a transformação RunInference sem configurações adicionais. A transformação RunInference partilha os modelos em vários processos. Se conseguir ajustar um modelo por núcleo da CPU na sua máquina, então o seu pipeline pode usar a configuração predefinida.
Vários modelos preparados de forma diferente estão a realizar a mesma tarefa. Use chaves por modelo. Para mais informações, consulte o artigo Execute a inferência de ML com vários modelos preparados de forma diferente.
Um modelo é carregado na memória e todos os processos partilham este modelo.

Use o parâmetro large_model. Para mais informações, consulte o artigo Execute a inferência de ML com vários modelos preparados de forma diferente.

Se estiver a criar um controlador de modelo personalizado, em vez de usar o parâmetro large_model, substitua o parâmetro share_model_across_processes.

Tem de configurar o número exato de modelos carregados na sua máquina.

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

Se estiver a criar um controlador de modelo personalizado, substitua o parâmetro model_copies.

Para mais informações sobre a gestão de memória com o Dataflow, consulte o artigo Resolva problemas de erros de falta de memória do Dataflow.

O que se segue?