最適資源配置

適合的解決方案功能會使用 Apache Beam 資源提示,為管道自訂工作站資源。您可以針對特定管道步驟指定多種不同資源,進一步提升管道彈性和功能,並節省潛在成本。您可以將成本較高的資源套用至需要這些資源的管道步驟,並將成本較低的資源套用至其他管道步驟。使用適當的調整大小,為整個管道或特定管道步驟指定資源需求。

支援與限制

啟用最適資源配置

如要開啟適當調整功能,請在管道中使用一或多個可用資源提示。在管道中使用資源提示時,系統會自動啟用適當的調整。詳情請參閱本文的「使用資源提示」一節。

可用的資源提示

以下是可用的資源提示。

資源提示 說明
min_ram

以 GB 為單位,分配給工作站的 RAM 最低量。 Dataflow 會將這個值做為下限,分配記憶體給新的工作站 (水平調度) 或現有工作站 (垂直調度)。

例如:

min_ram=NUMBERGB
  • 請將 NUMBER 替換為管道或管道步驟所需的「最小」工作站記憶體值
  • min_ram 是每位工作人員的匯總規格。這不是每個 vCPU 的規格。舉例來說,如果您設定 min_ram=15GB,Dataflow 會將工作站中所有 vCPU 的可用記憶體總和設為至少 15 GB。
accelerator

使用者提供的 GPU 分配量,可讓您控管管道及其步驟中的 GPU 使用量和費用。將要附加至 Dataflow 工作站的 GPU 類型和數量指定為標記的參數。

例如:

accelerator="type:GPU_TYPE;count:GPU_COUNT;machine_type:MACHINE_TYPE;CONFIGURATION_OPTIONS"
  • GPU_TYPE 替換為要使用的 GPU 類型。如需 Dataflow 支援的 GPU 類型清單,請參閱Dataflow 支援的 GPU
  • GPU_COUNT 替換為要使用的 GPU 數量。
  • 選用:將 MACHINE_TYPE 替換為要搭配 GPU 使用的機器類型。
    • 機型必須與所選 GPU 類型相容。如要瞭解 GPU 類型和相容的機器類型,請參閱 GPU 平台
    • 如果您在accelerator資源提示和工作站機型管道選項中都指定了機型,則系統會在適當調整時忽略管道選項。
  • 如要在 Dataflow 中使用 NVIDIA GPU,請設定 install-nvidia-driver 設定選項

如要進一步瞭解如何使用 GPU,請參閱「在 Dataflow 使用 GPU」。

資源提示巢狀結構

資源提示會套用至管道轉換階層,如下所示:

  • min_ram:轉換中的值會評估為轉換本身和轉換階層中所有父項設定的值中,最大的 min_ram 提示值。
    • 舉例來說,如果內部轉換提示將 min_ram 設為 16 GB,而階層中的外部轉換提示將 min_ram 設為 32 GB,則整個轉換的所有步驟都會使用 32 GB 的提示。
    • 舉例來說,如果內部轉換提示將 min_ram 設為 16 GB,而階層中的外部轉換提示將 min_ram 設為 8 GB,則外部轉換中不在內部轉換的所有步驟都會使用 8 GB 的提示,而內部轉換中的所有步驟都會使用 16 GB 的提示。
  • accelerator:轉換階層中最內層的值優先。
    • 舉例來說,如果階層中的內部轉換 accelerator 提示與外部轉換 accelerator 提示不同,系統會將內部轉換 accelerator 提示用於內部轉換。

為整個管道設定的提示會視為在最外層的個別轉換中設定。

使用資源提示

您可以針對整個管道或管道步驟設定資源提示。

管道資源提示

從指令列執行管道時,您可以在整個管道中設定資源提示。

如要設定 Python 環境,請參閱 Python 教學課程

範例:

    python my_pipeline.py \
        --runner=DataflowRunner \
        --resource_hints=min_ram=numberGB \
        --resource_hints=accelerator="type:type;count:number;install-nvidia-driver" \
        ...

管道步驟資源提示

您可以透過程式輔助方式,在管道步驟 (轉換) 中設定資源提示。

Java

如要安裝 Java 適用的 Apache Beam SDK,請參閱「安裝 Apache Beam SDK」。

您可以使用 ResourceHints 類別,以程式輔助方式在管道轉換中設定資源提示。

以下範例說明如何在管道轉換中,以程式輔助方式設定資源提示。

pcoll.apply(MyCompositeTransform.of(...)
    .setResourceHints(
        ResourceHints.create()
            .withMinRam("15GB")
            .withAccelerator(
    "type:nvidia-l4;count:1;install-nvidia-driver")))

pcoll.apply(ParDo.of(new BigMemFn())
    .setResourceHints(
        ResourceHints.create().withMinRam("30GB")))

如要以程式輔助方式在整個管道中設定資源提示,請使用 ResourceHintsOptions 介面

Python

如要安裝 Apache Beam SDK for Python,請參閱「安裝 Apache Beam SDK」。

您可以使用 PTransforms.with_resource_hints 類別,以程式輔助方式在管道轉換中設定資源提示。詳情請參閱 ResourceHint 類別

以下範例說明如何在管道轉換中,以程式輔助方式設定資源提示。

pcoll | MyPTransform().with_resource_hints(
    min_ram="4GB",
    accelerator="type:nvidia-tesla-l4;count:1;install-nvidia-driver")

pcoll | beam.ParDo(BigMemFn()).with_resource_hints(
    min_ram="30GB")

如要在整個管道中設定資源提示,請在執行管道時使用 --resource_hints 管道選項。如需範例,請參閱「管道資源提示」。

Go

Go 不支援資源提示。

支援多個加速器

在管道中,不同的轉換可以有不同的加速器設定。包括需要不同機器類型的設定。如果提供管道層級的設定,這些轉換層級的加速器設定會優先採用。

最佳擬合和融合

在某些情況下,使用不同資源提示設定的轉換,可能會在相同工作站集區的工作站上執行,這是融合最佳化程序的一部分。融合轉換時,Dataflow 會在滿足轉換所設資源提示聯集的環境中執行轉換。在某些情況下,這包括整個管道。

如果無法合併資源提示,就不會發生融合。舉例來說,不同 GPU 的資源提示無法合併,因此這些轉換不會融合。

您也可以在管道中加入一個作業,利用它來強制 Dataflow 具體化中繼 PCollection,防止融合。如果您想將 GPU 或高記憶體機器等昂貴資源,與不需要這些特殊資源的緩慢或運算成本高昂步驟隔離,這項功能就特別實用。在這種情況下,您可能需要強制在耗用 CPU 的緩慢步驟與需要昂貴 GPU 或高記憶體機器的步驟之間中斷融合,並支付與中斷融合相關的具體化成本。詳情請參閱「防止融合」。

串流最適資源配置

如果是串流工作,您可以設定 --experiments=enable_streaming_rightfitting 管道選項,啟用右側調整功能。

如果管道涉及資源需求不同的階段,適當的調整可能可以提升管道效能。

範例:含有 CPU 密集型階段和需要 GPU 階段的管道

舉例來說,如果管道先執行 CPU 密集型階段,再執行需要 GPU 的階段,就可能適合採用適當的配置。如果沒有適當的配置,就必須設定單一 GPU 工作站集區,才能執行所有管道階段,包括 CPU 密集型階段。如果工作站集區執行 CPU 密集型階段,可能會導致 GPU 資源使用率偏低。

如果啟用適當調整大小功能,且系統將資源提示套用至需要 GPU 的步驟,管道會建立兩個獨立集區,以便 CPU 工作站集區執行 CPU 密集型階段,GPU 工作站集區執行需要 GPU 的階段。

以這個範例管道為例,自動調度資源表顯示,執行 CPU 密集階段 (Pool 0) 的工作站集區最初會擴充至 99 個工作站,之後縮減至 87 個工作站。執行需要 GPU 的階段 (Pool 1) 時,工作站集區會擴充至 13 個工作站:

表格顯示兩個集區自動調度資源。

CPU 使用率圖表顯示,兩個工作站集區的工作站整體 CPU 使用率都很高:

圖表:顯示兩個不同集區的工作站 CPU 使用率。

排解最適資源配置問題

本節提供操作說明,協助排解與合適度相關的常見問題。

設定無效

嘗試使用合適尺寸時,會發生下列錯誤:

Workflow failed. Causes: One or more operations had an error: 'operation-OPERATION_ID':
[UNSUPPORTED_OPERATION] 'NUMBER vCpus with NUMBER MiB memory is
an invalid configuration for NUMBER count of 'GPU_TYPE' in family 'MACHINE_TYPE'.'.

如果選取的 GPU 類型與所選機器類型不相容,就會發生這項錯誤。如要解決這個錯誤,請選取相容的 GPU 類型和機器類型。如需相容性詳細資料,請參閱 GPU 平台

確認耳機是否合身

如要確認是否已啟用適當大小調整功能,請查看自動調度資源指標,並確認 Worker pool 欄是否顯示不同集區:

表格:顯示啟用適當調整功能時,管道有多個集區的工作站記錄。

串流適當資源配置效能

啟用適當調整功能的串流管道,成效不一定會比未啟用適當調整功能的管道更好。例如:

  1. 管道使用的 worker 數量較多
  2. 系統延遲時間較長,或總處理量較低
  3. 工作站集區大小變更頻率較高,或是不穩定

如果發現管道有這種情況,可以移除 --experiments=enable_streaming_rightfitting 管道選項,停用右側調整功能。此外,使用加速器資源提示啟用適當調整功能的串流管道,可能會使用超出預期的加速器數量。如果管道出現這種情況,您可以設定 --experiments=max_num_accelerators=NUM 管道選項,為管道設定可使用的加速器數量上限。