關於 Dataflow ML

您可以運用 Dataflow ML 的大規模資料處理能力,建立預測和推論管道,以及準備訓練資料

Dataflow ML 工作流程圖。

圖 1. 完整的 Dataflow ML 工作流程。

需求條件和限制

  • Dataflow ML 支援批次和串流管道。
  • Apache Beam 2.40.0 以上版本支援 RunInference API。
  • Apache Beam 2.53.0 以上版本支援 MLTransform API。
  • 模型處理常式適用於 PyTorch、scikit-learn、TensorFlow、ONNX 和 TensorRT。如要使用不支援的架構,可以採用自訂模型處理常式。

準備訓練資料

預測和推論管道

Dataflow ML 結合了 Dataflow 的強大功能和 Apache Beam 的 RunInference API。您可以使用 RunInference API 定義模型的特徵和屬性,並將該設定傳遞至 RunInference 轉換。這項功能可讓使用者在 Dataflow 管道中執行模型,不必瞭解模型的實作詳細資料。您可以選擇最適合資料的架構,例如 TensorFlow 和 PyTorch。

在管道中執行多個模型

使用 RunInference 轉換,將多個推論模型新增至 Dataflow 管道。如需更多資訊 (包括程式碼詳細資料),請參閱 Apache Beam 說明文件中的「多模型管道」。

建立跨語言管道

如要在 Java 管道中使用 RunInference,請建立跨語言 Python 轉換。管道會呼叫轉換作業,執行預先處理、後續處理和推論。

如需詳細操作說明和範例管道,請參閱「使用 Java SDK 中的 RunInference」。

在 Dataflow 使用 GPU

對於需要使用加速器的批次或串流管道,您可以在 NVIDIA GPU 裝置上執行 Dataflow 管道。詳情請參閱「使用 GPU 執行 Dataflow 管道」。

排解 Dataflow ML 問題

本節提供疑難排解策略和連結,協助您解決使用 Dataflow ML 時遇到的問題。

Stack 預期每個張量的大小都相同

使用 RunInference API 時,如果提供的圖片大小不同,或字詞嵌入的長度不同,可能會發生下列錯誤:

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

發生這項錯誤的原因是 RunInference API 無法批次處理大小不同的張量元素。如需解決方法,請參閱 Apache Beam 說明文件中的「無法批次處理張量元素」。

避免大型模型發生記憶體不足錯誤

載入中型或大型 ML 模型時,機器可能會記憶體不足。 Dataflow 提供相關工具,協助您在載入 ML 模型時避免記憶體不足 (OOM) 錯誤。詳情請參閱「RunInference 轉換最佳做法」。

後續步驟