Configurer l'adaptation des ressources de Dataflow Prime

Présentation

Dataflow Prime est une plate-forme sans serveur qui utilise le scaling horizontal et vertical pour allouer des nœuds de calcul et des ressources de nœuds de calcul. Vous ne spécifiez ni le nombre, ni la taille, ni la forme des nœuds de calcul utilisés dans votre pipeline. Pour personnaliser les ressources de nœuds de calcul, vous pouvez utiliser les optimisations de ressources Apache Beam pour spécifier les besoins en ressources d'un pipeline complet ou d'étapes de pipeline spécifiques. La fonctionnalité d'adaptation des ressources de Dataflow Prime utilise l'optimisation des ressources pour personnaliser les ressources de nœud de calcul du pipeline.

Limites et exigences

Dans la phase Aperçu de Dataflow Prime, les suggestions de ressources peuvent être utilisées avec Apache Beam 2.30.0 ou version ultérieure.

Optimisations de ressources disponibles

Les optimisations de ressources suivantes sont disponibles au sein de l'aperçu de Dataflow Prime :

  1. min_ram = "number Go" : quantité minimale de RAM en gigaoctets à allouer aux nœuds de calcul. Cette valeur est utilisée 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).

    • Définissez-la avec la valeur maximale de la mémoire du 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, et non 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.
  2. accelerator = "type : type ; count : number ; configuration-options" : type de GPU, nombre de GPU et options de configuration GPU à utiliser (pour utiliser les GPU NVIDIA avec Dataflow, vous devez définir l'option de configuration "install-nvidia-driver").

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'indicateur 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 dans l'ensemble de la transformation.
    • Exemple : Si une optimisation de la transformation interne définit min_ram sur 16 Go et que l'indicateur 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. Une optimisation de 16 Go est 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'indicateur de transformation accelerator d'une transformation interne est différent de celle d'une transformation externe accelerator dans une hiérarchie, l'indicateur de transformation interne accelerator sera utilisé pour la transformation interne.

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.

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

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

Exemple :

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

Python

Vous pouvez définir des optimisations de ressources par programmation sur les transformations de pipeline à l'aide de PTransforms.with_resource_hints (voir également ResourceHint).

Exemple :

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