Informazioni su Dataflow ML

Puoi utilizzare le funzionalità di elaborazione dei dati scalabili di Dataflow ML per pipeline di previsione e inferenza e per preparazione dei dati per l'addestramento.

Diagramma del flusso di lavoro di Dataflow ML.

Figura 1. Il flusso di lavoro completo di Dataflow ML.

Requisiti e limitazioni

  • Dataflow ML supporta le pipeline in batch e in streaming.
  • L'API RunInference è supportata in Apache Beam 2.40.0 e versioni successive.
  • L'API MLTransform è supportata in Apache Beam 2.53.0 e versioni successive.
  • Gli handler dei modelli sono disponibili per PyTorch, scikit-learn, TensorFlow, ONNX e TensorRT. Per i framework non supportati, puoi utilizzare un gestore del modello personalizzato.

Preparazione dei dati per l'addestramento

Pipeline di previsione e inferenza

Dataflow ML combina la potenza di Dataflow con l'API RunInference di Apache Beam. Con l'API RunInference, definisci le caratteristiche e le proprietà del modello e passi la configurazione alla trasformazione RunInference. Questa funzionalità consente agli utenti di eseguire il modello all'interno delle pipeline Dataflow senza dover conoscere i dettagli di implementazione del modello. Puoi scegliere il framework più adatto ai tuoi dati, ad esempio TensorFlow e PyTorch.

Eseguire più modelli in una pipeline

Utilizza la trasformazione RunInference per aggiungere più modelli di inferenza alla pipeline Dataflow. Per ulteriori informazioni, inclusi i dettagli del codice, consulta Pipeline multimodello nella documentazione di Apache Beam.

Creare una pipeline multilingue

Per utilizzare RunInference con una pipeline Java, crea una trasformazione Python cross-language. La pipeline chiama la trasformazione, che esegue la pre-elaborazione, la post-elaborazione e l'inferenza.

Per istruzioni dettagliate e una pipeline di esempio, consulta Utilizzare RunInference dall'SDK Java.

Utilizzare le GPU con Dataflow

Per le pipeline batch o in streaming che richiedono l'utilizzo di acceleratori, puoi eseguire le pipeline Dataflow su dispositivi GPU NVIDIA. Per ulteriori informazioni, consulta Eseguire una pipeline Dataflow con GPU.

Risolvere i problemi di Dataflow ML

Questa sezione fornisce strategie e link per la risoluzione dei problemi che potresti trovare utili quando utilizzi Dataflow ML.

La funzione Stack si aspetta che ogni tensore abbia le stesse dimensioni

Se fornisci immagini di dimensioni diverse o embedding di parole di lunghezze diverse quando utilizzi l'API RunInference, potrebbe verificarsi il seguente errore:

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)']

Questo errore si verifica perché l'API RunInference non può raggruppare elementi tensori di dimensioni diverse. Per le soluzioni alternative, consulta Impossibile raggruppare gli elementi tensore nella documentazione di Apache Beam.

Evitare errori di esaurimento della memoria con modelli di grandi dimensioni

Quando carichi un modello di ML medio o grande, la tua macchina potrebbe esaurire la memoria. Dataflow fornisce strumenti per aiutarti a evitare errori di OOM (out-of-memory) durante il caricamento dei modelli di ML. Utilizza la tabella seguente per determinare l'approccio appropriato per il tuo scenario.

Scenario Soluzione
I modelli sono abbastanza piccoli da rientrare in memoria. Utilizza la trasformazione RunInference senza alcuna configurazione aggiuntiva. La trasformazione RunInference condivide i modelli tra i thread. Se puoi inserire un modello per core della CPU sulla tua macchina, la pipeline può utilizzare la configurazione predefinita.
Più modelli addestrati in modo diverso eseguono la stessa attività. Utilizza chiavi per modello. Per ulteriori informazioni, consulta Eseguire l'inferenza ML con più modelli addestrati in modo diverso.
Un modello viene caricato nella memoria e tutti i processi lo condividono.

Utilizza il parametro large_model. Per ulteriori informazioni, consulta Eseguire l'inferenza ML con più modelli addestrati in modo diverso.

Se stai creando un gestore del modello personalizzato, anziché utilizzare il parametro large_model, sostituisci il parametro share_model_across_processes.

Devi configurare il numero esatto di modelli caricati sulla tua macchina.

Per controllare esattamente quanti modelli vengono caricati, utilizza il parametro model_copies.

Se stai creando un gestore del modello personalizzato, sostituisci il parametro model_copies.

Per ulteriori informazioni sulla gestione della memoria con Dataflow, consulta Risolvere gli errori di esaurimento della memoria di Dataflow.

Passaggi successivi

  • Esplora i notebook Dataflow ML su GitHub.
  • Consulta la documentazione relativa alle pipeline di AI/ML di Apache Beam per informazioni dettagliate sull'utilizzo dell'apprendimento automatico con Apache Beam.
  • Scopri di più sull'API RunInference.
  • Scopri le metriche che puoi utilizzare per monitorare la trasformazione RunInference.