É 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.
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
Use o recurso
MLTransform
para preparar seus dados para o treinamento de modelos de ML. Para mais informações, consulte Pré-processar dados comMLTransform
.Use o Dataflow com frameworks de ML-OPS, como o Kubeflow Pipelines (KFP) ou o TensorFlow Extended (TFX). Para saber mais, consulte Dataflow ML em fluxos de trabalho de ML.
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 Se você estiver criando um gerenciador de modelo personalizado, em vez de usar o parâmetro
|
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
Se você estiver criando um gerenciador de modelo personalizado, substitua o parâmetro
|
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
- Conheça os notebooks de ML do Dataflow no GitHub.
- Consulte informações detalhadas sobre como usar o ML com o Apache Beam na documentação de pipelines de IA/ML do Apache Beam.
- Saiba mais sobre a API
RunInference
. - Saiba mais sobre as
métricas
que podem ser usadas para monitorar a transformação do
RunInference
.