适配

适配功能使用 Apache Beam 资源提示来自定义流水线的工作器资源。为特定的流水线步骤指定资源可提高流水线的灵活性和能力,并可能节省费用。您可以将成本较高的资源应用于需要这些资源的流水线步骤,并将成本较低的资源应用于其他流水线步骤。使用适配功能指定整个流水线或特定流水线步骤的资源要求。

支持和限制

  • Apache Beam Java 和 Python SDK 2.31.0 版及更高版本支持资源提示。
  • 批处理流水线支持适配功能。不支持流处理流水线。
  • 适配功能支持 Dataflow Prime
  • 适配功能不支持 FlexRS。
  • 使用适配功能时,请勿使用 worker_accelerator服务选项

启用适配

如需启用适配,请在流水线中使用一个或多个可用的资源提示。在流水线中使用资源提示时,系统会自动启用适配功能。如需了解详情,请参阅本文档的使用资源提示部分。

可用的资源提示

以下资源提示适用。

资源提示 说明
min_ram

分配给工作器的最小 RAM(以 GB 为单位)。 在为新工作器(横向扩缩)或现有工作器(纵向扩缩)分配内存时,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 资源提示和工作器机器类型流水线选项中指定机器类型,则在适配期间系统会忽略流水线选项。
  • 如需将 NVIDIA GPU 与 Dataflow 搭配使用,请设置 install-nvidia-driver 配置选项

如需详细了解如何使用 GPU,请参阅将 GPU 与 Dataflow 搭配使用

资源提示嵌套

资源提示在流水线转换层次结构中的应用方式如下:

  • 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-tesla-k80;count:1;install-nvidia-driver")))

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

如需以编程方式设置整个流水线的资源提示,请使用 ResourceHintsOptions 接口

Python

如需安装 Python 版 Apache Beam SDK,请参阅安装 Apache Beam SDK

您可以使用 PTransforms.with_resource_hints以编程方式设置流水线转换的资源提示。 如需了解详情,请参阅 ResourceHint

以下示例演示了如何以编程方式设置流水线转换的资源提示。

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

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

如需设置整个流水线的资源提示,请在运行流水线时使用 --resource_hints 流水线选项。如需查看示例,请参阅流水线资源提示

Go

Go 不支持资源提示。

适配和融合

在某些情况下,可以在融合优化过程中,对同一工作器池中的工作器执行使用不同资源提示设置的转换。融合转换后,Dataflow 将在满足转换上设置的资源提示并集的环境中执行转换。

当资源提示无法合并时,不会进行融合。例如,不同 GPU 的资源提示无法合并,因此这些转换不会融合。

如需阻止融合,您还可以向流水线添加一项操作来强制 Dataflow 具体化中间 PCollection。如需了解详情,请参阅阻止融合

排查适配问题

本部分介绍如何排查与适配相关的常见问题。

配置无效

尝试使用适配功能时,会发生以下错误:

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 平台