适配功能使用 Apache Beam 资源提示来自定义流水线的工作器资源。为特定的流水线步骤指定资源可提高流水线的灵活性和能力,并可能节省费用。您可以将成本较高的资源应用于需要这些资源的流水线步骤,并将成本较低的资源应用于其他流水线步骤。使用适配功能指定整个流水线或特定流水线步骤的资源要求。
支持和限制
- Apache Beam Java 和 Python SDK 2.31.0 版及更高版本支持资源提示。
- 批处理流水线支持适配功能。不支持流处理流水线。
- 适配功能支持 Dataflow Prime。
- 适配功能不支持 FlexRS。
- 使用适配功能时,请勿使用
worker_accelerator
服务选项。
启用适配
如需启用适配,请在流水线中使用一个或多个可用的资源提示。在流水线中使用资源提示时,系统会自动启用适配功能。如需了解详情,请参阅本文档的使用资源提示部分。
可用的资源提示
以下资源提示适用。
资源提示 | 说明 |
---|---|
min_ram |
分配给工作器的最小 RAM(以 GB 为单位)。 在为新工作器(横向扩缩)或现有工作器(纵向扩缩)分配内存时,Dataflow 使用此值作为下限。 例如: min_ram=NUMBERGB
|
accelerator |
由用户提供的 GPU 分配,可让您控制流水线及其步骤中 GPU 的使用和费用。以标志的参数形式指定要挂接到 Dataflow 工作器的 GPU 类型和数量。 例如: accelerator="type:GPU_TYPE;count:GPU_COUNT;machine_type:MACHINE_TYPE;CONFIGURATION_OPTIONS"
如需详细了解如何使用 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 平台。