Adaptation des ressources

La fonctionnalité d'adaptation des ressources utilise des optimisations de ressources Apache Beam pour personnaliser les ressources de nœuds de calcul d'un pipeline. La possibilité de cibler des ressources par étapes de pipeline spécifiques offre au pipeline une flexibilité et une capacité supplémentaires, ainsi que des économies potentielles. Vous pouvez appliquer des ressources plus coûteuses aux étapes de pipeline qui les nécessitent, et des ressources moins coûteuses à d'autres étapes du pipeline. Utilisez l'ajustement approprié pour spécifier les besoins en ressources d'un pipeline entier ou d'étapes de pipeline spécifiques.

Compatibilité et limites

  • Les optimisations de ressources sont compatibles avec les SDK Java et Python Apache Beam versions 2.31.0 et ultérieures.
  • L'adaptation des ressources est possible avec les pipelines de traitement par lot. Les pipelines de traitement par flux ne sont pas compatibles.
  • L'adaptation des ressources est compatible avec Dataflow Prime.
  • L'adaptation des ressources n'est pas compatible avec FlexRS.
  • Lorsque vous utilisez l'adaptation des ressources, n'utilisez pas l'option de service worker_accelerator.

Activer l'adaptation des ressources

Pour activer l'adaptation des ressources, utilisez une ou plusieurs des optimisations de ressources disponibles dans votre pipeline. Lorsque vous utilisez une optimisation de ressource dans votre pipeline, l'adaptation des ressources est automatiquement activée. Pour en savoir plus, consultez la section Utiliser les optimisations de ressources de ce document.

Optimisations de ressources disponibles

Les optimisations de ressources suivantes sont disponibles.

Optimisation de ressource Description
min_ram

Quantité minimale de mémoire RAM en gigaoctets à allouer aux nœuds de calcul. Dataflow utilise cette valeur comme limite inférieure lors de l'allocation de mémoire à de nouveaux nœuds de calcul (scaling horizontal) ou à des nœuds de calcul existants (scaling vertical).

Exemple :

min_ram=NUMBERGB
  • Remplacez NUMBER par la valeur minimale de la mémoire de nœud de calcul requise par votre pipeline ou votre étape de pipeline.
  • min_ram est une spécification d'agrégat, par nœud de calcul. Il ne s'agit pas d'une spécification par processeur virtuel. Par exemple, si vous définissez min_ram=15GB, Dataflow définit la mémoire globale disponible sur tous les processeurs virtuels du nœud de calcul sur au moins 15 Go.
accelerator

Allocation de GPU fournie par l'utilisateur qui vous permet de contrôler l'utilisation et le coût des GPU dans votre pipeline et ses étapes. Spécifiez le type et le nombre de GPU à associer aux nœuds de calcul Dataflow en tant que paramètres de l'option.

Exemple :

accelerator="type:GPU_TYPE;count:GPU_COUNT;machine_type:MACHINE_TYPE;CONFIGURATION_OPTIONS"
  • Remplacez GPU_TYPE par le type de GPU à utiliser. Pour obtenir la liste des types de GPU compatibles avec Dataflow, consultez la page Compatibilité de Dataflow avec les GPU.
  • Remplacez GPU_COUNT par le nombre de GPU à utiliser.
  • Facultatif : Remplacez MACHINE_TYPE par le type de machine à utiliser avec vos GPU.
    • Le type de machine doit être compatible avec le type de GPU sélectionné. Pour en savoir plus sur les types de GPU et leurs types de machines compatibles, consultez la page Plates-formes GPU.
    • Si vous spécifiez un type de machine à la fois dans l'optimisation de ressource accelerator et dans l'option de pipeline du type de machine de nœud de calcul, l'option de pipeline est ignorée lors de l'adaptation des ressources.
  • Pour utiliser des GPU NVIDIA avec Dataflow, définissez l'option de configuration install-nvidia-driver.

Pour en savoir plus sur l'utilisation des GPU, consultez la page GPU avec Dataflow.

Optimisation imbriquée de ressources

Les optimisations de ressources sont appliquées à la hiérarchie des transformations du pipeline comme suit :

  • min_ram : la valeur d'une transformation est évaluée comme la plus grande valeur d'optimisation min_ram parmi les valeurs définies sur la transformation elle-même et tous ses parents dans la hiérarchie de la transformation.
    • Exemple : Si une optimisation de transformation interne définit min_ram sur 16 Go et que l'optimisation de transformation externe dans la hiérarchie définit min_ram sur 32 Go, une optimisation de 32 Go sera utilisée pour toutes les étapes de la transformation complète.
    • Exemple : Si une optimisation de la transformation interne définit min_ram sur 16 Go et que l'optimisation de transformation externe dans la hiérarchie définit min_ram sur 8 Go, une optimisation de 8 Go sera utilisée pour toutes les étapes de la transformation externe qui ne se trouvent pas dans la transformation interne, et une optimisation de 16 Go sera utilisée pour toutes les étapes de la transformation interne.
  • accelerator : la valeur la plus profonde de la hiérarchie de la transformation est prioritaire.
    • Exemple : Si l'optimisation de transformation accelerator d'une transformation interne est différente de celle d'une transformation externe accelerator dans une hiérarchie, l'optimisation de transformation interne accelerator sera utilisée pour la transformation interne.

Les indicateurs définis pour l'ensemble du pipeline sont traités comme s'ils étaient définis sur une transformation externe.

Utiliser les optimisations de ressources

Vous pouvez définir des optimisations de ressources sur l'ensemble du pipeline ou sur les étapes du pipeline.

Optimisations de ressources de pipeline

Vous pouvez définir des optimisations de ressources sur l'ensemble du pipeline lorsque vous l'exécutez à partir de la ligne de commande.

Pour configurer votre environnement Python, consultez le guide de démarrage rapide de Python.

Exemple :

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

Optimisations de ressources de l'étape du pipeline

Vous pouvez définir des optimisations de ressources pour les étapes du pipeline (transformations) par programmation.

Java

Pour installer le SDK Apache Beam pour Java, consultez la page Installer le SDK Apache Beam.

Vous pouvez définir des optimisations de ressources par programmation sur les transformations de pipeline à l'aide de la classe ResourceHints.

L'exemple suivant montre comment définir des optimisations de ressources par programmation sur des transformations de pipeline.

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

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

Pour définir de manière automatisée des optimisations de ressources sur l'ensemble du pipeline, utilisez l'interface ResourceHintsOptions.

Python

Pour installer le SDK Apache Beam pour Python, consultez la page Installer le SDK Apache Beam.

Vous pouvez définir des optimisations de ressources par programmation sur les transformations de pipeline à l'aide de la classe PTransforms.with_resource_hints. Pour en savoir plus, consultez la section concernant la classe ResourceHint.

L'exemple suivant montre comment définir des optimisations de ressources par programmation sur des transformations 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")

Pour définir des optimisations de ressources sur l'ensemble du pipeline, utilisez l'option de pipeline --resource_hints lorsque vous exécutez votre pipeline. Pour obtenir un exemple, consultez la section Optimisations de ressources du pipeline.

Go

Les optimisations de ressources ne sont pas compatibles avec Go.

Adaptation des ressources et fusion

Dans certains cas, les transformations définies avec différentes optimisations de ressources peuvent être exécutées sur des nœuds de calcul situés dans le même pool de nœuds de calcul, dans le cadre du processus d'optimisation de la fusion. Lorsque les transformations sont fusionnées, Dataflow les exécute dans un environnement qui satisfait à l'union des optimisations de ressources définies sur les transformations.

Lorsqu'il est impossible de fusionner les optimisations de ressources, la fusion n'a pas lieu. Par exemple, les optimisations de ressources pour différents GPU ne peuvent pas être fusionnées. Ces transformations ne sont donc pas fusionnées.

Vous pouvez empêcher la fusion en ajoutant à votre pipeline une opération qui oblige Dataflow à matérialiser une PCollection intermédiaire. Pour en savoir plus, consultez la section Empêcher la fusion.

Résoudre les problèmes liés à l'adaptation des ressources

Cette section fournit des instructions permettant de résoudre les problèmes courants liés à l'adaptation des ressources.

Configuration non valide

Lorsque vous essayez d'utiliser l'adaptation des ressources, l'erreur suivante se produit :

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

Cette erreur se produit lorsque le type de GPU sélectionné n'est pas compatible avec le type de machine sélectionné. Pour résoudre cette erreur, sélectionnez un type de GPU et un type de machine compatibles. Pour en savoir plus sur la compatibilité, consultez la page Plates-formes de GPU.