GUIDE Technique

Gestion et fragmentation de la mémoire GPU

Comment les frameworks d'IA allouent, réutilisent et récupèrent la mémoire limitée d'un GPU, et pourquoi les lacunes restantes (fragmentation) peuvent provoquer des erreurs de mémoire insuffisante, même s'il reste techniquement beaucoup de mémoire.

2 minutes de lectureDernière mise à jour

Aperçu

Understanding it is key to fitting big models and avoiding mysterious crashes.

Plongée profonde

La mémoire GPU est fixe et précieuse : une carte peut avoir un total de 24, 80 ou 192 Go, partagés par poids de modèle, activations, dégradés, états d'optimisation et tampons temporaires. Appeler le pilote pour allouer de la mémoire à chaque opération serait lent, c'est pourquoi des frameworks comme PyTorch utilisent un allocateur de mise en cache qui récupère les gros blocs à l'avance et distribue les sous-éléments, puis conserve les éléments libérés dans un pool pour les réutiliser. Le problème est la fragmentation : à mesure que des tenseurs de différentes tailles sont alloués et libérés, l'espace libre se divise en morceaux dispersés. Vous pouvez disposer de 5 Go d'espace libre au total sans toutefois parvenir à allouer un tenseur contigu de 2 Go, car aucun espace n'est assez grand. C'est pourquoi la formation peut planter en cas d'erreurs de mémoire insuffisante malgré la marge apparemment disponible.

Aperçu technique

L'allocateur de mise en cache CUDA de PyTorch divise la mémoire en flux de blocs et réutilise les blocs libérés qui correspondent aux tailles demandées, évitant ainsi les appels cudaMalloc/cudaFree coûteux. La fragmentation survient lorsque les blocs divisés ne peuvent pas être recombinés. Des outils tels que torch.cuda.empty_cache, l'option PYTORCH_CUDA_ALLOC_CONF expandable_segments et les instantanés de mémoire aident. Des approches plus récentes empruntent des idées de mémoire virtuelle, mappant des pages physiques non contiguës dans une plage virtuelle contiguë afin que les requêtes volumineuses aboutissent malgré la fragmentation.

Impact stratégique

Coût et budget

Les décisions en matière d'architecture déterminent les performances et les coûts d'exploitation pendant des années.

Décisions plus claires

La formation technique aide les équipes à choisir la bonne pile, pas seulement la plus récente.

Contrôle qualité

De meilleurs choix d’ingénierie réduisent les incidents de fiabilité en production.

L'avenir de la gestion et de la fragmentation de la mémoire GPU

La gestion de la mémoire devient plus intelligente et plus paginée, inspirée des systèmes d'exploitation. Des techniques telles que les répartiteurs de type mémoire virtuelle et l'attention paginée (utilisées pour gérer le cache KV pendant l'inférence) réduisent considérablement le gaspillage et la fragmentation. Attendez-vous à ce que les frameworks soient par défaut des allocateurs extensibles et défragmentés, une meilleure visibilité grâce aux profileurs intégrés et un couplage plus étroit avec le déchargement et le recalcul afin que le système jongle automatiquement avec le GPU, le CPU et la mémoire disque pour maintenir une utilisation élevée et des plantages rares.

Mise en œuvre dans le monde réel

Une exécution de formation qui plante avec « CUDA hors de mémoire » malgré la mémoire réservée affichant de l'espace libre, corrigée en définissant PYTORCH_CUDA_ALLOC_CONF pour activer les segments extensibles.

Utilisation de torch.cuda.memory_summary ou d'un instantané de mémoire pour diagnostiquer quels tenseurs et fragmentations consomment les 80 Go d'un GPU.

PagedAttention de vLLM gérant le cache KV d'attention dans des pages de taille fixe pour répondre à de nombreuses demandes de discussion simultanées sans gaspiller de mémoire.

Réduire la taille du lot ou activer les points de contrôle de gradient pour réduire la mémoire d'activation et éviter les pannes de mémoire insuffisantes dues à la fragmentation.

Risques et garde-fous

L’optimisation d’un benchmark peut masquer des faiblesses plus larges du système.

Les coûts d’infrastructure et de maintenance sont souvent sous-estimés.

Les lacunes en matière de sécurité et d’observabilité peuvent se creuser à mesure que les systèmes deviennent plus complexes.

Feuille de route de mise en œuvre

1

Définissez les objectifs de latence, de qualité et de coût avant la mise en œuvre.

2

Benchmark dans des conditions de charge et de données réalistes.

3

Surveillance des instruments pour détecter les erreurs, la dérive et l'impact sur l'utilisateur.

4

Préparez les chemins de restauration et de réponse aux incidents avant la mise à l’échelle.

Continuez à explorer

Free newsletter

Get the daily AI briefing

Three verified AI stories every weekday morning, written in plain English. Free forever, no ads.

One email each weekday. Unsubscribe in one click. We never sell or share your address.

Test yourself

Take the GPU Memory Management and Fragmentation quiz

Instant feedback on every answer, and a shareable certificate with a verifiable ID once you pass a course.

Démarrer le quiz

Support free AI education. AI Understanding is a 501(c)(3) nonprofit — no ads, no paywall, ever. Make a donation

Guide suivant

Planification GPU et orchestration de cluster

Questions fréquemment posées

What is GPU Memory Management and Fragmentation?

Comment les frameworks d'IA allouent, réutilisent et récupèrent la mémoire limitée d'un GPU, et pourquoi les lacunes restantes (fragmentation) peuvent provoquer des erreurs de mémoire insuffisante, même s'il reste techniquement beaucoup de mémoire. Le comprendre est essentiel pour installer de gros modèles et éviter des accidents mystérieux.

Qu’est-ce que la fragmentation de la mémoire GPU ?

La fragmentation signifie que la mémoire totale libre est suffisante, mais elle est divisée en morceaux, donc aucun espace n'est assez grand pour un gros tenseur.

Pourquoi les frameworks comme PyTorch utilisent-ils un allocateur de mémoire en cache ?

L'appel de cudaMalloc/cudaFree pour chaque opération est lent, donc l'allocateur de mise en cache récupère les gros blocs et réutilise ceux libérés d'un pool.

Vous voyez 5 Go d'espace libre mais vous ne pouvez pas allouer un tenseur de 2 Go. Quelle est la cause probable ?

Ce symptôme classique de fragmentation se produit lorsqu'il existe de la mémoire libre, mais pas sous la forme d'un bloc contigu suffisamment grand pour la requête.

Quel paramètre PyTorch permet de réduire la fragmentation en permettant aux segments de mémoire de croître de manière flexible ?

La configuration de PYTORCH_CUDA_ALLOC_CONF pour activer expandable_segments permet à l'allocateur de développer des segments et de réduire les échecs liés à la fragmentation.

Qu'est-ce que PagedAttention de vLLM parvient à réduire le gaspillage de mémoire lors de l'inférence ?

PagedAttention stocke le cache KV dans des pages de taille fixe comme la mémoire virtuelle du système d'exploitation, réduisant ainsi la fragmentation et répondant efficacement à de nombreuses requêtes.