Encaixe à direita

A funcionalidade de ajuste adequado usa sugestões de recursos do Apache Beam para personalizar os recursos do trabalhador para um pipeline. A capacidade de segmentar vários recursos diferentes para passos específicos do pipeline oferece flexibilidade e capacidade adicionais ao pipeline, bem como potenciais poupanças de custos. Pode aplicar recursos mais caros a passos do pipeline que os exijam e recursos menos caros a outros passos do pipeline. Use o ajuste à direita para especificar os requisitos de recursos para um pipeline completo ou para passos específicos do pipeline.

Apoio técnico e limitações

  • As sugestões de recursos são suportadas com os SDKs Java e Python do Apache Beam, versões 2.31.0 e posteriores.
  • O ajuste correto é suportado com pipelines em lote.
  • O ajuste adequado é suportado com pipelines de streaming com a escalabilidade automática horizontal ativada.

  • O ajuste certo suporta o Dataflow Prime.

  • O ajuste certo não suporta o FlexRS.

  • Quando usar o ajuste correto, não use a worker_accelerator opção de serviço.

Ative o ajuste à direita

Para ativar o ajuste correto, use uma ou mais das sugestões de recursos disponíveis no seu pipeline. Quando usa uma dica de recurso no seu pipeline, o ajuste correto é ativado automaticamente. Para mais informações, consulte a secção Use sugestões de recursos deste documento.

Sugestões de recursos disponíveis

Estão disponíveis as seguintes sugestões de recursos.

Sugestão de recurso Descrição
min_ram

A quantidade mínima de RAM em gigabytes a atribuir aos trabalhadores. O Dataflow usa este valor como um limite inferior ao atribuir memória a novos trabalhadores (escalabilidade horizontal) ou a trabalhadores existentes (escalabilidade vertical).

Por exemplo:

min_ram=NUMBERGB
  • Substitua NUMBER pelo valor mínimo da memória do trabalhador que o seu pipeline ou passo do pipeline requer.
  • min_ram é uma especificação agregada por trabalhador. Não é uma especificação por vCPU. Por exemplo, se definir min_ram=15GB, o Dataflow define a memória agregada disponível em todas as vCPUs no worker para, pelo menos, 15 GB.
accelerator

Uma atribuição de GPUs fornecida pelo utilizador que lhe permite controlar a utilização e o custo das GPUs no seu pipeline e respetivas etapas. Especifique o tipo e o número de GPUs a anexar aos trabalhadores do Dataflow como parâmetros da flag.

Por exemplo:

accelerator="type:GPU_TYPE;count:GPU_COUNT;machine_type:MACHINE_TYPE;CONFIGURATION_OPTIONS"
  • Substitua GPU_TYPE pelo tipo de GPU a usar. Para ver uma lista dos tipos de GPU suportados com o Dataflow, consulte o artigo Suporte do Dataflow para GPUs.
  • Substitua GPU_COUNT pelo número de GPUs a usar.
  • Opcional: substitua MACHINE_TYPE pelo tipo de máquina a usar com as suas GPUs.
    • O tipo de máquina tem de ser compatível com o tipo de GPU selecionado. Para ver detalhes sobre os tipos de GPU e os tipos de máquinas compatíveis, consulte o artigo Plataformas de GPU.
    • Se especificar um tipo de máquina na accelerator sugestão de recurso e no tipo de máquina do trabalhador opção de pipeline, a opção de pipeline é ignorada durante o ajuste correto.
  • Para usar GPUs NVIDIA com o Dataflow, defina a install-nvidia-driver opção de configuração.

Para mais informações sobre a utilização de GPUs, consulte o artigo GPUs com o Dataflow.

Aninhamento de sugestões de recursos

As sugestões de recursos são aplicadas à hierarquia de transformação do pipeline da seguinte forma:

  • min_ram: O valor numa transformação é avaliado como o maior valor de sugestão entre os valores definidos na própria transformação e todos os respetivos elementos principais na hierarquia da transformação.min_ram
    • Exemplo: se uma sugestão de transformação interna definir min_ram como 16 GB e a sugestão de transformação externa na hierarquia definir min_ram como 32 GB, é usada uma sugestão de 32 GB para todos os passos em toda a transformação.
    • Exemplo: se uma sugestão de transformação interna definir min_ram como 16 GB e a sugestão de transformação externa na hierarquia definir min_ram como 8 GB, é usada uma sugestão de 8 GB para todos os passos na transformação externa que não estão na transformação interna, e é usada uma sugestão de 16 GB para todos os passos na transformação interna.
  • accelerator: o valor mais interno na hierarquia da transformação tem precedência.
    • Exemplo: se uma sugestão de transformação interna accelerator for diferente de uma sugestão de transformação externa accelerator numa hierarquia, a sugestão de transformação interna accelerator é usada para a transformação interna.

As sugestões definidas para todo o pipeline são tratadas como se fossem definidas numa transformação mais externa separada.

Use sugestões de recursos

Pode definir sugestões de recursos em todo o pipeline ou em passos do pipeline.

Instruções de recursos de pipeline

Pode definir sugestões de recursos em todo o pipeline quando o executa a partir da linha de comandos.

Para configurar o seu ambiente Python, consulte o tutorial do Python.

Exemplo:

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

Sugestões de recursos de passos do pipeline

Pode definir sugestões de recursos em passos do pipeline (transformações) de forma programática.

Java

Para instalar o SDK do Apache Beam para Java, consulte o artigo Instale o SDK do Apache Beam.

Pode definir sugestões de recursos de forma programática nas transformações de pipelines através da classe ResourceHints.

O exemplo seguinte demonstra como definir sugestões de recursos de forma programática em transformações de pipeline.

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")))

Para definir sugestões de recursos de forma programática em toda a pipeline, use a interface ResourceHintsOptions.

Python

Para instalar o SDK do Apache Beam para Python, consulte o artigo Instale o SDK do Apache Beam.

Pode definir sugestões de recursos de forma programática nas transformações de pipelines através da classe PTransforms.with_resource_hints. Para mais informações, consulte a aula ResourceHint.

O exemplo seguinte demonstra como definir sugestões de recursos de forma programática em transformações de pipeline.

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")

Para definir sugestões de recursos em todo o pipeline, use a opção --resource_hints pipeline quando executar o pipeline. Para ver um exemplo, consulte o artigo Sugestões de recursos de pipelines.

Go

As sugestões de recursos não são suportadas em Go.

Compatibilidade com vários aceleradores

Num pipeline, as diferentes transformações podem ter configurações de acelerador diferentes. Estas incluem configurações que requerem diferentes tipos de máquinas. Estas configurações do acelerador ao nível da transformação têm precedência sobre a configuração ao nível do pipeline, se tiver sido fornecida.

Encaixe e fusão à direita

Em alguns casos, as transformações definidas com sugestões de recursos diferentes podem ser executadas em trabalhadores no mesmo conjunto de trabalhadores, como parte do processo de otimização de fusão. Quando as transformações são unidas, o Dataflow executa-as num ambiente que satisfaz a união das sugestões de recursos definidas nas transformações. Em alguns casos, isto inclui todo o pipeline.

Quando não é possível unir sugestões de recursos, não ocorre a união. Por exemplo, as sugestões de recursos para diferentes GPUs não são uníveis, pelo que essas transformações não são fundidas.

Também pode impedir a união adicionando uma operação ao seu pipeline que force o Dataflow a materializar um PCollection intermédio. Isto é especialmente útil quando tenta isolar recursos dispendiosos, como GPUs ou máquinas com muita memória, de passos lentos ou computacionalmente dispendiosos que não precisam desses recursos especiais. Nesses casos, pode ser útil forçar uma interrupção da união entre os passos lentos dependentes da CPU e os passos que precisam de GPUs dispendiosas ou máquinas com muita memória, e pagar o custo da materialização associada à interrupção da união. Para saber mais, consulte o artigo Evite a união.

Streaming right fitting

Para tarefas de streaming, pode ativar o ajuste à direita definindo a opção de pipeline --experiments=enable_streaming_rightfitting.

O ajuste adequado pode melhorar o desempenho do seu pipeline se envolver fases com diferentes requisitos de recursos.

Exemplo: pipeline com fase intensiva de CPU e fase que requer GPU

Um exemplo de pipeline que pode beneficiar do ajuste adequado é aquele que executa uma fase com utilização intensiva da CPU, seguida de uma fase que requer a GPU. Sem o ajuste adequado, tem de configurar um único conjunto de trabalhadores da GPU para executar todas as fases do pipeline, incluindo a fase com utilização intensiva da CPU. Isto pode levar à subutilização dos recursos da GPU quando o conjunto de trabalhadores está a executar a fase com utilização intensiva da CPU.

Se o ajuste adequado estiver ativado e for aplicada uma sugestão de recurso ao passo que requer a GPU, o pipeline cria dois conjuntos separados, para que a fase com utilização intensiva da CPU seja executada pelo conjunto de trabalhadores da CPU e a fase que requer a GPU seja executada pelo conjunto de trabalhadores da GPU.

Para este pipeline de exemplo, a tabela de escalamento automático mostra que o conjunto de trabalhadores que executa a fase com utilização intensiva da CPU, Pool 0, é inicialmente aumentado para 99 trabalhadores e, posteriormente, reduzido para 87 trabalhadores. O conjunto de trabalhadores que executa a fase que requer a GPU, Pool 1, é aumentado para 13 trabalhadores:

Tabela que mostra dois conjuntos de dimensionamento automático.

O gráfico de utilização da CPU mostra que os trabalhadores em ambos os conjuntos de trabalhadores estão a demonstrar uma utilização da CPU globalmente elevada:

Gráfico que mostra as utilizações da CPU dos trabalhadores de dois conjuntos diferentes.

Resolva problemas de encaixe correto

Esta secção fornece instruções para resolver problemas comuns relacionados com o ajuste correto.

Configuração inválida

Quando tenta usar o ajuste à direita, ocorre o seguinte erro:

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'.'.

Este erro ocorre quando o tipo de GPU selecionado não é compatível com o tipo de máquina selecionado. Para resolver este erro, selecione um tipo de GPU e um tipo de máquina compatíveis. Para ver detalhes de compatibilidade, consulte Plataformas de GPU.

Verifique o ajuste correto

Pode verificar se o ajuste correto está ativado vendo as métricas de dimensionamento automático e verificando se a coluna Worker pool está visível e apresenta diferentes conjuntos:

Tabela que mostra o histórico do trabalhador de um pipeline com vários conjuntos quando o ajuste à direita está ativado.

Desempenho de streaming adequado

As pipelines de streaming com o ajuste adequado ativado nem sempre têm um melhor desempenho do que as pipelines sem o ajuste adequado ativado. Por exemplo:

  1. O pipeline está a usar mais trabalhadores
  2. A latência do sistema é superior ou o débito é inferior
  3. Os tamanhos dos grupos de trabalhadores estão a mudar com mais frequência ou não estão a estabilizar

Se observar este comportamento no seu pipeline, pode desativar o ajuste à direita removendo a --experiments=enable_streaming_rightfittingopção do pipeline. Além disso, os pipelines de streaming com o ajuste adequado ativado que usam sugestões de recursos do acelerador podem usar mais aceleradores do que o desejável. Se observar esta situação na sua pipeline, pode configurar um número máximo de aceleradores usados pela pipeline definindo a opção de pipeline --experiments=max_num_accelerators=NUM.