L'autoscaling vertical est une fonctionnalité qui permet à Dataflow Prime d'effectuer un scaling à la hausse ou à la baisse de la mémoire disponible pour les nœuds de calcul en fonction des exigences de la tâche. Cette fonctionnalité est conçue pour rendre les tâches résilientes aux erreurs de mémoire insuffisante (OOM) et optimiser l'efficacité du pipeline. Dataflow Prime surveille votre pipeline, détecte les situations où les nœuds de calcul manquent ou dépassent la mémoire disponible, puis les remplace par de nouveaux nœuds de calcul disposant de plus ou de moins de mémoire.
Important : Étant donné que l'autoscaling vertical remplace les nœuds de calcul existants par de nouveaux nœuds de calcul, nous vous recommandons vivement d'utiliser des conteneurs personnalisés pour améliorer la latence potentielle lors du redimensionnement des nœuds de calcul.
Flux
L'autoscaling vertical est activé par défaut pour tous les nouveaux jobs de streaming qui utilisent Dataflow Prime.
Si vous lancez une tâche à partir d'un modèle via l'interface de ligne de commande, vous pouvez désactiver l'autoscaling vertical en transmettant l'option --additional_experiments=disable_vertical_memory_autoscaling
.
Tous les pipelines Java et Python pour les flux Dataflow Prime sont compatibles avec l'autoscaling vertical. Vous pouvez utiliser les pipelines Java pour les flux Dataflow Prime sans Streaming Engine. Cependant, pour une expérience optimale avec l'autoscaling vertical, nous vous recommandons d'activer Streaming Engine.
Lot
Pour les jobs par lot Dataflow Prime, l'autoscaling vertical n'évolue qu'après quatre erreurs de mémoire insuffisante.
- L'autoscaling vertical effectue un scaling à la hausse pour éviter les échecs de job et n'effectue pas de scaling à la baisse.
- L'ensemble du pool évolue pour le reste du job.
- Si des optimisations de ressources sont utilisées et que plusieurs pools sont créés, chaque pool effectue un scaling à la hausse séparément.
Pour les jobs par lot, l'autoscaling vertical n'est pas activé par défaut. Pour activer l'autoscaling vertical pour les jobs par lot, définissez les options de pipeline suivantes :
--experiments=enable_batch_vmr
--experiments=enable_vertical_memory_autoscaling
Pour désactiver l'autoscaling vertical pour les jobs par lot, effectuez l'une des opérations suivantes :
- Ne définissez pas l'option de pipeline
--experiments=enable_batch_vmr
. - Définissez l'option de pipeline
--experiments=disable_vertical_memory_autoscaling
.
Limites
- Seule la mémoire des nœuds de calcul évolue verticalement.
- Par défaut, le scaling de la mémoire a une limite supérieure de 16 Gio (26 Gio en cas d'utilisation de GPU) et une limite inférieure de 6 Gio (12 Gio en cas d'utilisation de GPU). Le fait de fournir une optimisation de ressource peut modifier les limites supérieure et inférieure.
- L'autoscaling vertical n'est pas disponible pour les pools utilisant des GPU A100.
- Pour les jobs par lots, les lots comprenant un élément défaillant peuvent être relancés plus de quatre fois avant l'échec complet du pipeline.
- L'autoscaling vertical n'est pas compatible avec VPC Service Controls. Si vous activez Dataflow Prime et que vous lancez un nouveau job dans un périmètre VPC Service Controls, le job utilise Dataflow Prime sans autoscaling vertical.
Surveiller l'autoscaling vertical
Les opérations d'autoscaling vertical sont publiées dans les journaux des tâches et des nœuds de calcul. Pour afficher ces journaux, consultez la page Métriques de job Dataflow.
Effet sur l'autoscaling horizontal
Dans Dataflow Prime, l'autoscaling vertical fonctionne avec l'autoscaling horizontal. Cette combinaison permet à Dataflow Prime d'adapter facilement les nœuds de calcul en fonction des besoins de votre pipeline et de maximiser l'utilisation de la capacité de calcul.
De par sa conception, l'autoscaling vertical (qui ajuste la mémoire du nœud de calcul) se produit à une fréquence plus faible que l'autoscaling horizontal (qui ajuste le nombre de nœuds de calcul). L'autoscaling horizontal est désactivé pendant et jusqu'à 10 minutes après le déclenchement d'une mise à jour par l'autoscaling vertical. S'il existe un nombre important de données d'entrée en attente après ce délai de 10 minutes, l'autoscaling horizontal risque de se déclencher. Pour en savoir plus sur l'autoscaling horizontal pour les pipelines de traitement par flux, consultez la page Autoscaling des flux.
Dépannage
Cette section fournit des instructions permettant de résoudre des problèmes courants liés à l'autoscaling vertical.
L'autoscaling vertical ne semble pas fonctionner.
Si l'autoscaling vertical ne fonctionne pas, vérifiez les détails du job suivant.
Consultez le message de job suivant pour vérifier que l'autoscaling vertical est actif :
Vertical Autoscaling is enabled. This pipeline is receiving recommendations for resources allocated per worker.
L'absence de ce message indique que l'autoscaling vertical n'est pas en cours d'exécution.
Pour les pipelines de traitement par flux, vérifiez que l'option
enable_vertical_memory_autoscaling
est définie. Pour les pipelines par lots, vérifiez que les optionsenable_vertical_memory_autoscaling
etenable_batch_vmr
sont définies.Vérifiez que vous avez activé l'API Cloud Autoscaling pour votre projet Google Cloud. Activer l'API
Vérifiez que votre tâche exécute Dataflow Prime. Pour en savoir plus, consultez la page Activer Dataflow Prime.
Le job observe un nombre élevé de filigranes et de jobs en attente.
Ces instructions ne s'appliquent qu'aux jobs par flux. Si le remodelage vertical des nœuds de calcul prend plus de quelques minutes, votre job peut présenter un nombre important de données d'entrée et un filigrane élevé. Pour résoudre ce problème dans les pipelines Python, nous vous recommandons vivement d'utiliser des conteneurs personnalisés, car ils peuvent améliorer la latence résultant du remodelage des nœuds de calcul. Pour résoudre ce problème dans les pipelines Java, nous vous recommandons vivement d'activer Streaming Engine et Runner v2. Si le problème persiste après l'activation de ces fonctionnalités, contactez le service client.
L'autoscaling vertical a atteint la capacité de mémoire.
Par défaut, si aucune optimisation de ressource n'est fournie, l'autoscaling vertical ne fait pas évoluer la mémoire au-delà de 16 Gio par nœud de calcul (26 Gio en cas d'utilisation de GPU) ou en dessous de 6 Gio par nœud de calcul (12 Gio en cas d'utilisation de GPU). Lorsque ces limites sont atteintes, l'un des messages de journal suivants est généré dans Cloud Logging.
Jobs par flux :
Vertical Autoscaling has a desire to upscale memory, but we have hit the memory
scaling limit of X GiB. This is only a problem if the pipeline continues to see
memory throttling and/or OOMs.
Jobs par lots :
Vertical Autoscaling has a desire to upscale memory, but we have hit the memory
scaling limit of 16.0 GiB. Job will fail because we have upsized to maximum size,
and the pipeline is still OOMing.
Si le pipeline continue de rencontrer des erreurs de mémoire insuffisante, vous pouvez utiliser les optimisations de ressources pour définir les besoins en mémoire de votre transformation en spécifiant min_ram="numberXB"
. Ce paramètre permet à Dataflow de sélectionner pour vos nœuds de calcul une configuration initiale compatible avec une capacité de mémoire plus élevée. Toutefois, la modification de cette configuration initiale peut augmenter le parallélisme latent disponible pour votre pipeline. En cas de transformation nécessitant une grande quantité de mémoire, votre pipeline risque d'utiliser plus de mémoire qu'auparavant, en raison de l'augmentation du parallélisme disponible. Dans ce cas, il peut être nécessaire d'optimiser votre transformation pour réduire son empreinte mémoire.
Remarque : L'autoscaling vertical n'empêche pas les erreurs OOM d'apparaître dans les journaux des nœuds de calcul. En cas d'erreur OOM, celle-ci apparaît dans les journaux du nœud de calcul car l'autoscaling vertical recherche et assure le suivi des événements OOM.
La limite de mémoire de calcul ne se stabilise pas, elle augmente et diminue au fil du temps, malgré une utilisation constante de la mémoire.
Ces instructions ne s'appliquent qu'aux jobs par flux. Pour les pipelines Java, activez Streaming Engine et Runner v2. Si le problème persiste ou si vous observez ce comportement dans les pipelines Python, contactez le service client.
Messages de journal courants
Cette section décrit les messages de journal courants générés lorsque l'autoscaling vertical est activé.
L'autoscaling vertical est activé. Ce pipeline reçoit des recommandations d'allocation de ressources par nœud de calcul.
Ce message indique que l'autoscaling vertical est actif. L'absence de ce message indique que l'autoscaling vertical n'est pas actif sur le pool de nœuds de calcul.
Si l'autoscaling vertical n'est pas actif, consultez la section L'autoscaling vertical ne semble pas fonctionner. Que dois-je vérifier ? pour obtenir des instructions de dépannage.
Mise à jour d'autoscaling vertical déclenchée pour faire passer la limite de mémoire par nœud de calcul du pool de X Gio à Y Gio.
Ce message indique que l'autoscaling vertical a déclenché un redimensionnement de la mémoire du pool de nœuds de calcul.