Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Comment puis-je configurer JAX pour éviter les erreurs OOM


Comment puis-je configurer JAX pour éviter les erreurs OOM


Pour configurer JAX et éviter les erreurs hors mémoire (OOM), vous pouvez utiliser plusieurs stratégies:

1. Désactiver la préallocation: par défaut, Jax préalque 75% de la mémoire GPU totale. Vous pouvez désactiver ce comportement en définissant la variable d'environnement `xla_python_client_preallocate = false`. Cela allouera la mémoire au besoin, réduisant la probabilité d'erreurs OOM mais augmentant potentiellement la fragmentation de la mémoire [1] [3].

2. Ajuster la fraction de mémoire: si la préallocation est activée, vous pouvez ajuster la fraction de la mémoire GPU que Jax préallocates à l'aide de `xla_python_client_mem_fraction = .xx`, où` .xx` est le pourcentage souhaité. La baisse de cette valeur peut aider à prévenir les erreurs OOM au démarrage [1] [3].

3. Utilisez l'allocateur de plate-forme: le réglage `xla_python_client_allocator = Platform` fait que Jax alloue exactement ce qui est nécessaire à la demande et de la mémoire inutilisée. Ceci est lent et non recommandé pour une utilisation générale, mais peut être utile pour déboguer les problèmes OOM ou minimiser l'utilisation de la mémoire [1] [3].

4. Évitez les processus simultanés: exécuter plusieurs processus JAX ou utiliser JAX aux côtés de GPU TensorFlow peut entraîner des erreurs OOM. Utilisez `xla_python_client_mem_fraction` pour allouer la mémoire de manière appropriée pour chaque processus, ou définir` xla_python_client_prealLocate = false` [1] [3].

5. Gérer les tableaux de périphériques: assurez-vous que les objets «DeviceArray» sont correctement gérés. Utilisez `Device_get` pour récupérer des données à l'hôte et assurez-vous aucune référence aux objets« DeviceArray »restent à la mémoire de périphérique gratuite [2].

6. Optimiser le modèle et les données: envisagez de vous lancer dans ou d'optimiser votre modèle et vos données pour réduire les exigences de la mémoire. Cela peut être particulièrement efficace lorsque vous travaillez avec de grands ensembles de données ou des modèles complexes [5].

Citations:
[1] https://kolonist26-jax-kr.readthedocs.io/en/latest/gpu_memory_allocation.html
[2] https://github.com/google/flax/discussions/929
[3] https://jax.readthedocs.io/en/latest/gpu_memory_allocation.html
[4] https://docs.jax.dev/en/latest/faq.html
[5] https://forums.developer.nvidia.com/t/batching-mcmc-oom-issue-in-numpyro-jax/321026
[6] https://www.ibm.com/docs/en/was-liberty/base?topic=Liberty-Runtime-environment-known-restrictions
[7] https://discourse.pymc.io/t/has-anyone-had-memory-issues-with-jax-gpu spécifiquement/10078
[8] https://community.fabric.microsoft.com/t5/desktop/optimizing-measures-to-avoid-out-of-memory-errors/td-p/570067