關於 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 提供相關工具,協助您在載入機器學習模型時避免記憶體不足 (OOM) 錯誤。請參閱下表,判斷適合您情況的方法。

情境 解決方案
模型夠小,可放入記憶體。 使用 RunInference 轉換,無需額外設定。RunInference 轉換會在執行緒之間共用模型。如果機器上的每個 CPU 核心都能容納一個模型,管道就可以使用預設設定。
多個訓練方式不同的模型執行相同工作。 使用模型專屬金鑰。詳情請參閱「使用多個訓練方式不同的模型執行 ML 推論」。
一個模型會載入記憶體,所有程序都會共用這個模型。

使用 large_model 參數。詳情請參閱「使用多個訓練方式不同的模型執行 ML 推論」。

如果您要建構自訂模型處理常式,請覆寫 share_model_across_processes 參數,而非使用 large_model 參數。

您必須設定載入至電腦的模型確切數量。

如要精確控管載入的模型數量,請使用 model_copies 參數。

如果您要建構自訂模型處理常式,請覆寫 model_copies 參數。

如要進一步瞭解如何使用 Dataflow 管理記憶體,請參閱排解 Dataflow 記憶體不足錯誤

後續步驟