Scaling dynamique de threads

Le scaling dynamique de threads fait partie des fonctionnalités de scaling vertical de Dataflow. Il complète la fonctionnalité d'autoscaling horizontal de Dataflow en ajustant le nombre de tâches parallèles, également appelées groupes, que chaque nœud de calcul Dataflow exécute. L'objectif est d'améliorer l'efficacité globale de votre pipeline Dataflow.

Lorsque Dataflow exécute un pipeline, le traitement est réparti sur plusieurs machines virtuelles (VM) Compute Engine, également appelées nœuds de calcul. Un thread est une tâche exécutable unique qui s'exécute dans un processus plus important. Dataflow lance plusieurs threads sur chaque nœud de calcul.

Lorsque le scaling dynamique de threads est activé, le service Dataflow choisit automatiquement le nombre approprié de threads à exécuter sur chaque nœud de calcul Dataflow. Étant donné que chaque thread exécute une tâche, l'augmentation du nombre de threads permet d'exécuter davantage de tâches en parallèle sur un nœud de calcul. Lorsque vous utilisez cette fonctionnalité avec la fonctionnalité d'autoscaling horizontal, le nombre total de threads utilisés par le pipeline reste le même, mais moins de nœuds de calcul sont utilisés.

Le scaling dynamique de threads utilise un algorithme pour déterminer le nombre de threads dont chaque nœud de calcul a besoin en fonction des signaux d'utilisation des ressources générés lors de l'exécution du pipeline. Pour en savoir plus, consultez la section Fonctionnement de cette page.

Avantages

Le scaling dynamique de threads présente les avantages potentiels suivants.

  • Permet aux nœuds de calcul Dataflow de traiter les données plus efficacement en améliorant l'utilisation de processeur et de mémoire par nœud de calcul.
  • Améliore le traitement en parallèle en ajustant le nombre de threads de calcul disponibles pour exécuter des tâches en parallèle pendant l'exécution du pipeline.
  • Réduit le nombre de nœuds de calcul requis pour traiter les ensembles de données volumineux, ce qui peut réduire vos coûts.

Compatibilité et limites

  • Le scaling dynamique de threads est disponible pour les pipelines utilisant les SDK Java, Python et Go.
  • La tâche Dataflow doit utiliser Runner v2.
  • Seuls les pipelines par lots sont acceptés.
  • Les pipelines qui utilisent beaucoup de ressources processeur ou de mémoire peuvent ne pas bénéficier du scaling dynamique des threads.
  • Le scaling dynamique de threads ne réduit pas le temps nécessaire à l'exécution d'un job Dataflow.

Fonctionnement

Le scaling dynamique de threads utilise les principes de réglage automatique pour effectuer un scaling dynamique du nombre de threads sur chaque nœud de calcul du pool Dataflow. Le nombre de threads est mis à l'échelle indépendamment sur chaque nœud de calcul. Chaque thread exécute une tâche. L'augmentation du nombre de threads permet d'exécuter davantage de tâches en parallèle sur un nœud de calcul. À mesure que les tâches se terminent et que les threads ne sont plus nécessaires, le nombre de threads évolue à la baisse. Un algorithme détermine le nombre de threads dont chaque nœud de calcul a besoin.

Le nombre de threads sur un nœud de calcul évolue jusqu'à deux threads par processeur virtuel lorsque les deux conditions suivantes sont remplies :

  • L'utilisation de la mémoire sur le nœud de calcul est inférieure à 50 %.
  • L'utilisation du processeur sur le nœud de calcul est inférieure à 65 %.

Le nombre de threads sur un nœud de calcul évolue à la baisse jusqu'à un minimum d'un thread par processeur virtuel lorsque la condition suivante est remplie :

  • L'utilisation de la mémoire sur le nœud de calcul est supérieure à 70 %.

Pour afficher l'utilisation de la mémoire et du processeur de votre job, utilisez l'onglet Métriques de job de l'interface Web de Dataflow.

Pour garantir la validité des recommandations, Dataflow attend que l'utilisation des ressources se stabilise avant d'envoyer des recommandations aux nœuds de calcul. Par exemple, l'utilisation de la mémoire et du processeur peut être comprise dans la plage de scaling, mais comme l'utilisation des ressources continue d'augmenter, Dataflow n'envoie pas de recommandation. Une fois l'utilisation des ressources stabilisée, Dataflow envoie une recommandation.

En cas d'erreur de mémoire insuffisante, le scaling des threads est automatiquement désactivé et le pipeline s'exécute avec un thread par processeur virtuel.

Activer le scaling dynamique des threads

Pour activer le scaling dynamique de threads, utilisez l'option de service Dataflow suivante.

Java

--dataflowServiceOptions=enable_dynamic_thread_scaling

Python

--dataflow_service_options=enable_dynamic_thread_scaling

Go

--dataflow_service_options=enable_dynamic_thread_scaling

Lorsque le scaling dynamique de threads est activé, vous pouvez également définir le nombre initial et le nombre maximal de nœuds de calcul disponibles pour votre pipeline pendant l'exécution. Pour en savoir plus, consultez la section Options de pipeline.

Vérifier que le scaling dynamique de threads est activé

Lorsque le scaling dynamique de threads est activé, le message suivant s'affiche dans vos fichiers journaux des nœuds de calcul :

Enabling thread vertical scaling feature in worker.

Pour afficher les fichiers journaux des nœuds de calcul, dans l'explorateur de journaux, utilisez le volet Requête pour filtrer les journaux par Nom du journal. Utilisez le nom de journal suivant dans votre filtre :

projects/PROJECT_ID/logs/dataflow.googleapis.com%2Fharness

Vous pouvez consulter le nombre recommandé de threads dans les fichiers journaux des nœuds de calcul. Le message suivant inclut le nombre recommandé de threads :

worker_thread_scaling_report_response { recommended_thread_count: NUMBER }

Si l'utilisation des ressources n'est pas comprise dans la plage de scaling, la valeur affichée correspond au nombre de processeurs virtuels sur le nœud de calcul.

Vous pouvez également utiliser la console Google Cloud pour vérifier si le scaling dynamique de threads est activé. Lorsqu'il est activé, dans le panneau Informations sur le job Dataflow, dans la ligne dataflowServiceOptions de la section Options de pipeline, enable_dynamic_thread_scaling s'affiche.

Dépannage

Cette section fournit des instructions permettant de résoudre des problèmes courants liés au scaling dynamique de threads.

Les performances diminuent lorsque le scaling dynamique des threads est activé

L'augmentation du nombre de threads peut entraîner des problèmes de performances dans les cas suivants :

  • Lorsque plusieurs processus tentent d'utiliser la même ressource, un processus peut l'utiliser tandis que d'autres doivent attendre. Cette situation est appelée conflit de ressources. En cas de conflit de ressources, les performances du pipeline peuvent diminuer.
  • En cas d'erreurs de mémoire insuffisante, le scaling dynamique de threads est désactivé. Dans certains cas, des erreurs de mémoire insuffisante peuvent entraîner l'échec du pipeline.

Vérifiez si le nombre de threads a augmenté. Pour savoir comment vérifier le nombre de threads recommandé, consultez la section Vérifier que le scaling de threads est activé sur cette page.

Si le scaling de threads est activé, n'incluez pas l'option de service de scaling dynamique de threads lorsque vous exécutez votre pipeline pour résoudre ce problème.

Nœud de calcul unifié… activé et désactivé

Une fois le scaling dynamique de threads activé, votre job peut échouer avec l'erreur suivante :

The workflow could not be created. Causes: (ID): Unified worker misconfigured by user and was both enabled and disabled.

Cette erreur se produit lorsque l'exécuteur v2 est explicitement désactivé.

Pour résoudre ce problème, activez l'exécuteur v2. Pour en savoir plus, consultez la section Activer l'exécuteur Dataflow v2 de la page "Utiliser l'exécuteur Dataflow V2".

Mettre à niveau votre SDK

Une fois le scaling dynamique de threads activé, votre job peut échouer avec l'erreur suivante :

Java

Dataflow Runner v2 requires the Apache Beam Java SDK version 2.29.0 or higher. Please upgrade your SDK and resubmit your job.

Python

Dataflow Runner v2 requires the Apache Beam SDK, version 2.21.0 or higher. Please upgrade your SDK and resubmit your job.

Cette erreur se produit lorsque l'exécuteur v2 ne peut pas être activé, car la version du SDK n'est pas compatible.

Pour résoudre ce problème, utilisez une version du SDK compatible avec l'exécuteur v2.

Impossible d'activer la fonctionnalité de scaling vertical des threads

Une fois le scaling dynamique de threads activé, votre job peut échouer avec l'erreur suivante :

The workflow could not be created. Causes: (ID): Thread vertical scaling feature can not be enabled while number_of_worker_harness_threads is specified.

Cette erreur se produit lorsque le pipeline définit explicitement le nombre de threads par nœud de calcul à l'aide des options de pipeline numberOfWorkerHarnessThreads ou number_of_worker_harness_threads.

Pour résoudre ce problème, supprimez l'option de pipeline numberOfWorkerHarnessThreads ou number_of_worker_harness_threads de votre pipeline.