Abbildung 1. Der vollständige Dataflow ML-Workflow.
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 mit MLTransform vorverarbeiten.
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.
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 auf Ihrem Computer nicht genügend Arbeitsspeicher vorhanden sein.
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.
Wenn Sie einen benutzerdefinierten Modell-Handler erstellen, überschreiben Sie anstelle des Parameters large_model den Parameter share_model_across_processes.
Sie müssen die genaue Anzahl der Modelle konfigurieren, die auf Ihren Computer geladen werden.
Mit dem Parameter model_copies können Sie genau festlegen, wie viele Modelle geladen werden.
Wenn Sie einen benutzerdefinierten Modell-Handler erstellen, überschreiben Sie den Parameter model_copies.
[[["Leicht verständlich","easyToUnderstand","thumb-up"],["Mein Problem wurde gelöst","solvedMyProblem","thumb-up"],["Sonstiges","otherUp","thumb-up"]],[["Schwer verständlich","hardToUnderstand","thumb-down"],["Informationen oder Beispielcode falsch","incorrectInformationOrSampleCode","thumb-down"],["Benötigte Informationen/Beispiele nicht gefunden","missingTheInformationSamplesINeed","thumb-down"],["Problem mit der Übersetzung","translationIssue","thumb-down"],["Sonstiges","otherDown","thumb-down"]],["Zuletzt aktualisiert: 2025-08-18 (UTC)."],[[["\u003cp\u003eDataflow ML facilitates both prediction and inference pipelines, as well as data preparation for training ML models.\u003c/p\u003e\n"],["\u003cp\u003eDataflow ML supports both batch and streaming data pipelines, utilizing the \u003ccode\u003eRunInference\u003c/code\u003e API (from Apache Beam 2.40.0) and \u003ccode\u003eMLTransform\u003c/code\u003e API (from Apache Beam 2.53.0).\u003c/p\u003e\n"],["\u003cp\u003eThe system is compatible with model handlers for popular frameworks like PyTorch, scikit-learn, TensorFlow, ONNX, and TensorRT, with options for custom handlers for other frameworks.\u003c/p\u003e\n"],["\u003cp\u003eDataflow ML enables the use of multiple inference models within a single pipeline via the \u003ccode\u003eRunInference\u003c/code\u003e transform and supports the use of GPUs for pipelines that need them.\u003c/p\u003e\n"],["\u003cp\u003eDataflow ML also provides troubleshooting guidance for common issues, including tensor size mismatch errors and out-of-memory errors when dealing with large models.\u003c/p\u003e\n"]]],[],null,["# About Dataflow ML\n\nYou can use Dataflow ML's scale data processing abilities for\n[prediction and inference pipelines](#prediction) and for\n[data preparation for training](#data-prep).\n\n**Figure 1.** The complete Dataflow ML workflow.\n\nRequirements and limitations\n----------------------------\n\n- Dataflow ML supports batch and streaming pipelines.\n- The `RunInference` API is supported in Apache Beam 2.40.0 and later versions.\n- The `MLTransform` API is supported in Apache Beam 2.53.0 and later versions.\n- Model handlers are available for PyTorch, scikit-learn, TensorFlow, ONNX, and TensorRT. For unsupported frameworks, you can use a custom model handler.\n\nData preparation for training\n-----------------------------\n\n- Use the `MLTransform` feature to prepare your data for training ML models. For\n more information, see\n [Preprocess data with `MLTransform`](/dataflow/docs/machine-learning/ml-preprocess-data).\n\n- Use Dataflow with ML-OPS frameworks, such as\n [Kubeflow Pipelines](https://www.kubeflow.org/docs/components/pipelines/v1/introduction/)\n (KFP) or [TensorFlow Extended](https://www.tensorflow.org/tfx) (TFX).\n To learn more, see [Dataflow ML in ML workflows](/dataflow/docs/machine-learning/ml-data).\n\nPrediction and inference pipelines\n----------------------------------\n\nDataflow ML combines the power of Dataflow with\nApache Beam's\n[`RunInference` API](https://beam.apache.org/documentation/ml/about-ml/).\nWith the `RunInference` API, you define the model's characteristics and properties\nand pass that configuration to the `RunInference` transform. This feature\nallows users to run the model within their\nDataflow pipelines without needing to know\nthe model's implementation details. You can choose the framework that best\nsuits your data, such as TensorFlow and PyTorch.\n\nRun multiple models in a pipeline\n---------------------------------\n\nUse the `RunInference` transform to add multiple inference models to\nyour Dataflow pipeline. For more information, including code details,\nsee [Multi-model pipelines](https://beam.apache.org/documentation/ml/about-ml/#multi-model-pipelines)\nin the Apache Beam documentation.\n\nBuild a cross-language pipeline\n-------------------------------\n\nTo use RunInference with a Java pipeline,\n[create a cross-language Python transform](https://beam.apache.org/documentation/programming-guide/#1312-creating-cross-language-python-transforms). The pipeline calls the\ntransform, which does the preprocessing, postprocessing, and inference.\n\nFor detailed instructions and a sample pipeline, see\n[Using RunInference from the Java SDK](https://beam.apache.org/documentation/ml/multi-language-inference/).\n\nUse GPUs with Dataflow\n----------------------\n\nFor batch or streaming pipelines that require the use of accelerators, you can\nrun Dataflow pipelines on NVIDIA GPU devices. For more information, see\n[Run a Dataflow pipeline with GPUs](/dataflow/docs/gpu/use-gpus).\n\nTroubleshoot Dataflow ML\n------------------------\n\nThis section provides troubleshooting strategies and links that you might find\nhelpful when using Dataflow ML.\n\n### Stack expects each tensor to be equal size\n\nIf you provide images of different sizes or word embeddings of different lengths\nwhen using the `RunInference` API, the following error might occur: \n\n 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)']\n\nThis error occurs because the `RunInference` API can't batch tensor elements of\ndifferent sizes. For workarounds, see\n[Unable to batch tensor elements](https://beam.apache.org/documentation/ml/about-ml/#unable-to-batch-tensor-elements)\nin the Apache Beam documentation.\n\n### Avoid out-of-memory errors with large models\n\nWhen you load a medium or large ML model, your machine might run out of memory.\nDataflow provides tools to help avoid out-of-memory (OOM) errors\nwhen loading ML models. Use the following table to determine the appropriate\napproach for your scenario.\n\nFor more information about memory management with Dataflow, see\n[Troubleshoot Dataflow out of memory errors](/dataflow/docs/guides/troubleshoot-oom).\n\nWhat's next\n-----------\n\n- Explore the [Dataflow ML notebooks](https://github.com/apache/beam/tree/master/examples/notebooks/beam-ml) in GitHub.\n- Get in-depth information about using ML with Apache Beam in Apache Beam's [AI/ML pipelines](https://beam.apache.org/documentation/ml/overview/) documentation.\n- Learn more about the [`RunInference` API](https://beam.apache.org/releases/pydoc/current/apache_beam.ml.inference.html#apache_beam.ml.inference.RunInference).\n- Learn about the [metrics](https://beam.apache.org/documentation/ml/runinference-metrics/) that you can use to monitor your `RunInference` transform."]]