Sie können die Verarbeitungsfunktionen für große Datenmengen von Dataflow ML für Vorhersage- und Inferenzpipelines sowie für die Datenvorbereitung für das Training verwenden.
Anforderungen und Einschränkungen
- Dataflow ML unterstützt Batch- und Streamingpipelines.
- Die
RunInference
API wird in Apache Beam 2.40.0 und höheren Versionen unterstützt. - Die
MLTransform
API wird in Apache Beam 2.53.0 und höheren Versionen unterstützt. - Modell-Handler sind für PyTorch, scikit-learn, TensorFlow, OnNX und TensorRT verfügbar. Für nicht unterstützte Frameworks können Sie einen benutzerdefinierten Modell-Handler verwenden.
Datenvorbereitung für das Training
Verwenden Sie die Funktion
MLTransform
, um Ihre Daten für das Training von ML-Modellen vorzubereiten. Weitere Informationen finden Sie unter Daten mitMLTransform
vorverarbeiten.Verwenden Sie Dataflow mit ML-OPS-Frameworks wie Kubeflow Pipelines (KFP) oder TensorFlow Extended (TFX). Weitere Informationen finden Sie unter Dataflow ML in ML-Workflows.
Vorhersage- und Inferenzpipelines
Dataflow ML kombiniert die Leistungsfähigkeit von Dataflow mit der RunInference
API von Apache Beam.
Mit der RunInference
API definieren Sie die Merkmale und Eigenschaften des Modells und übergeben diese Konfiguration an die RunInference
-Transformation. Mit diesem Feature können Nutzer das Modell in ihren Dataflow-Pipelines ausführen, ohne die Implementierungsdetails des Modells zu kennen. Sie können das Framework auswählen, das am besten zu Ihren Daten passt, z. B. TensorFlow und PyTorch.
Mehrere Modelle in einer Pipeline ausführen
Mit der RunInference
-Transformation können Sie Ihrer Dataflow-Pipeline mehrere Inferenzmodelle hinzufügen. Weitere Informationen und Codedetails finden Sie in der Apache Beam-Dokumentation unter Multi-Modell-Pipelines.
Mehrsprachige Pipeline erstellen
Wenn Sie RunInference mit einer Java-Pipeline verwenden möchten, erstellen Sie eine sprachübergreifende Python-Transformation. Die Pipeline ruft die Transformation auf, die die Vor- und Nachverarbeitung sowie die Inferenz ausführt.
Eine ausführliche Anleitung und eine Beispielpipeline finden Sie unter RunInference aus dem Java SDK verwenden.
GPUs mit Dataflow verwenden
Für Batch- oder Streaming-Pipelines, für die Beschleuniger erforderlich sind, können Sie Dataflow-Pipelines auf NVIDIA-GPU-Geräten ausführen. Weitere Informationen finden Sie unter Dataflow-Pipeline mit GPUs ausführen.
Fehlerbehebung für Dataflow ML
In diesem Abschnitt finden Sie Strategien und Links zur Fehlerbehebung, die Ihnen bei der Verwendung von Dataflow ML helfen können.
Für „Stack“ muss jeder Tensor dieselbe Größe haben.
Wenn Sie bei der Verwendung der RunInference
API Bilder verschiedener Größen oder Wort-Embeddings verschiedener Längen angeben, kann der folgende Fehler auftreten:
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)']
Dieser Fehler tritt auf, weil die RunInference
API keine Tensor-Elemente unterschiedlicher Größe im Batch verarbeiten kann. Informationen zu Umgehungslösungen finden Sie in der Apache Beam-Dokumentation unter Tensorelemente können nicht als Batch verarbeitet werden.
Nicht genügend Arbeitsspeicherfehler bei großen Modellen vermeiden
Wenn Sie ein mittleres oder großes ML-Modell laden, kann es sein, dass auf Ihrem Computer nicht genügend Arbeitsspeicher vorhanden ist. Dataflow bietet Tools, mit denen Sie OOM-Fehler (Out-of-Memory) beim Laden von ML-Modellen vermeiden können. Anhand der folgenden Tabelle können Sie den geeigneten Ansatz für Ihr Szenario ermitteln.
Szenario | Lösung |
---|---|
Die Modelle sind klein genug, um in den Arbeitsspeicher zu passen. |
Verwenden Sie die RunInference -Transformation ohne zusätzliche Konfigurationen. Bei der RunInference -Transformation werden die Modelle für alle Threads freigegeben. Wenn Sie auf Ihrem Computer ein Modell pro CPU-Kern unterbringen können, kann für Ihre Pipeline die Standardkonfiguration verwendet werden.
|
Mehrere unterschiedlich trainierte Modelle führen dieselbe Aufgabe aus. | Verwenden Sie pro Modell eindeutige Schlüssel. Weitere Informationen finden Sie unter ML-Inferenzen mit mehreren unterschiedlich trainierten Modellen ausführen. |
Ein Modell wird in den Arbeitsspeicher geladen und alle Prozesse teilen sich dieses Modell. |
Verwenden Sie den Parameter Wenn Sie einen benutzerdefinierten Modell-Handler erstellen, überschreiben Sie stattdessen den Parameter |
Sie müssen die genaue Anzahl der Modelle konfigurieren, die auf Ihren Computer geladen werden. |
Mit dem Parameter Wenn Sie einen benutzerdefinierten Modell-Handler erstellen, überschreiben Sie den Parameter |
Weitere Informationen zur Arbeitsspeicherverwaltung mit Dataflow finden Sie unter Fehlerbehebung bei Dataflow-Fehlern aufgrund von fehlerhaftem Arbeitsspeicher.
Nächste Schritte
- Dataflow ML-Notebooks auf GitHub
- Ausführliche Informationen zur Verwendung von ML mit Apache Beam finden Sie in der Dokumentation zu KI/ML-Pipelines in Apache Beam.
- Weitere Informationen zur
RunInference
API - Informationen zu den Messwerten, mit denen Sie die
RunInference
-Transformation überwachen können.