This page explains how to use Arm VMs as workers for batch and streaming
Dataflow jobs.

You can use the
[Tau T2A machine series](https://docs.cloud.google.com/compute/docs/general-purpose-machines#t2a_machines)
and [C4A machine series](https://docs.cloud.google.com/compute/docs/general-purpose-machines#c4a_series) of
Arm processors to run Dataflow jobs. Because Arm architecture is
optimized for power efficiency, using these VMs yields better price for
performance for some workloads. For more information about Arm VMs, see
[Arm VMs on Compute](https://docs.cloud.google.com/compute/docs/instances/arm-on-compute).

## Requirements

- The following Apache Beam SDKs support Arm VMs:
  - Apache Beam Java SDK versions 2.50.0 or later
  - Apache Beam Python SDK versions 2.50.0 or later
  - Apache Beam Go SDK versions 2.50.0 or later
- Select a region where Tau T2A or C4A machines are available. For more information, see [Available regions and zones](https://docs.cloud.google.com/compute/docs/regions-zones#available).
- Use the [Portable Runner](https://docs.cloud.google.com/dataflow/docs/portable-runner) to run the job.
- Streaming jobs must use [Streaming Engine](https://docs.cloud.google.com/dataflow/docs/streaming-engine).

## Limitations

- All [Tau T2A limitations](https://docs.cloud.google.com/compute/docs/general-purpose-machines#t2a_limitations) and [C4A limitations](https://docs.cloud.google.com/compute/docs/general-purpose-machines#supported_disk_types_for_c4a) apply.
- The C4A machine series requires the [Hyperdisk Balanced](https://docs.cloud.google.com/compute/docs/disks/hd-types/hyperdisk-balanced) disk type.
- [GPUs](https://docs.cloud.google.com/dataflow/docs/gpu) aren't supported.
- [Cloud Profiler](https://docs.cloud.google.com/dataflow/docs/guides/profiling-a-pipeline) isn't supported.
- [Dataflow Prime](https://docs.cloud.google.com/dataflow/docs/guides/enable-dataflow-prime) isn't supported.
- [Right fitting](https://docs.cloud.google.com/dataflow/docs/guides/right-fitting) isn't supported.
- Receiving worker VM metrics from [Cloud Monitoring](https://docs.cloud.google.com/dataflow/docs/guides/using-cloud-monitoring#receive_worker_vm_metrics_from_the_agent) isn't supported.
- [Container image pre-building](https://docs.cloud.google.com/dataflow/docs/guides/build-container-image#prebuild) isn't supported.

## Run a job using Arm VMs

To use Arm VMs, set the following pipeline option.

### Java

Set the `workerMachineType` pipeline option and specify an
[ARM machine type](https://docs.cloud.google.com/compute/docs/instances/arm-on-compute).

For more information about setting pipeline options, see
[Set Dataflow pipeline options](https://docs.cloud.google.com/dataflow/docs/guides/setting-pipeline-options).

### Python

Set the `machine_type` pipeline option and specify an
[ARM machine type](https://docs.cloud.google.com/compute/docs/instances/arm-on-compute).

For more information about setting pipeline options, see
[Set Dataflow pipeline options](https://docs.cloud.google.com/dataflow/docs/guides/setting-pipeline-options).

### Go

Set the `worker_machine_type` pipeline option and specify an
[ARM machine type](https://docs.cloud.google.com/compute/docs/instances/arm-on-compute).

For more information about setting pipeline options, see
[Set Dataflow pipeline options](https://docs.cloud.google.com/dataflow/docs/guides/setting-pipeline-options).

## Use multi-architecture container images

If you use a custom container in Dataflow, the container must
match the architecture of the worker VMs. If you plan to use a custom
container on ARM VMs, we recommend building a multi-architecture image. For more
information, see
[Build a multi-architecture container image](https://docs.cloud.google.com/dataflow/docs/guides/multi-architecture-container).

## Pricing

You are billed for Dataflow compute resources.
Dataflow pricing is independent of the machine type family. For
more information, see [Dataflow pricing](https://cloud.google.com/dataflow/pricing).

## What's next

- [Set Dataflow pipeline options](https://docs.cloud.google.com/dataflow/docs/guides/setting-pipeline-options)
- [Use custom containers in Dataflow](https://docs.cloud.google.com/dataflow/docs/guides/using-custom-containers)