Simple Science

La science de pointe expliquée simplement

# Informatique# Informatique distribuée, parallèle et en grappes# Apprentissage automatique

Gérer la mémoire efficacement avec vTensor

vTensor optimise la mémoire pour les tâches de calcul haute performance.

― 6 min lire


Mémoire efficace avecMémoire efficace avecvTensorles tâches d'IA.Gestion de mémoire superpuissante pour
Table des matières

vTensor est un système conçu pour gérer la mémoire des noyaux CUDA, utilisés dans des tâches nécessitant une haute performance informatique, comme l'IA et l'apprentissage profond. Son objectif principal est de gérer les données de manière efficace, permettant une meilleure performance et moins d'espace gaspillé en mémoire.

Qu'est-ce que vTensor ?

Au fond, vTensor est une façon de représenter la mémoire comme de simples pointeurs, un peu comme la mémoire normale dans CUDA. Cette simplicité cache cependant une structure plus complexe en dessous. Le pointeur vTensor est créé par un composant appelé vTensor Manager (VTM). Lorsqu'une demande de mémoire est faite, un planificateur, connu sous le nom de vTensor Scheduler (VTS), élabore un plan pour allouer la mémoire. Ensuite, une autre partie, appelée vTensor Operation (VTO), s'occupe réellement de l'allocation de mémoire, s'assurant que tout fonctionne bien.

Comment fonctionne vTensor

Le pointeur vTensor pointe vers une adresse virtuelle dans la mémoire du GPU. Cette adresse virtuelle doit être continue, ce qui signifie qu'elle doit être un seul bloc d'espace. En dessous de cette adresse virtuelle, le GPU gère comment cet espace se rapporte à la mémoire physique réelle. Cette configuration permet au GPU de récupérer des données directement depuis la mémoire quand c'est nécessaire.

Un point clé à propos de vTensor est que bien que les morceaux de mémoire physiques soient situés dans le GPU, les infos à propos de ces morceaux peuvent être accessibles et manipulées par le CPU. Chaque morceau fait 2 Mo, et les handles de ces morceaux sont stockés dans la mémoire principale du CPU. Cette configuration unique ouvre la porte à des méthodes innovantes pour gérer la mémoire efficacement, surtout quand il s'agit de défragmenter la mémoire utilisée pour le caching.

Le Pool vTensor

Le Pool vTensor est une structure qui aide à organiser et gérer les données vTensor de manière efficace. Il a deux principales structures de données : un ensemble ordonné et un arbre radix.

vSet et pSet

vSet est un ensemble ordonné qui stocke les adresses virtuelles liées au vTensor. Cet ensemble garde une trace de toutes les pages et de leurs handles physiques correspondants. Les handles physiques sont les points de référence pour les véritables morceaux de mémoire.

pSet fonctionne de manière similaire, mais il garde un enregistrement strict des handles physiques, s'assurant qu'ils correspondent un à un aux morceaux physiques. Chaque handle est lié à certaines infos sur la mémoire physique à laquelle il se rapporte, incluant s'il est actuellement actif. Si aucune demande ne fait référence à un handle physique, il est retiré de pSet.

rTree

L'arbre radix est une autre partie de ce pool qui aide à gérer la mémoire dans des tâches basées sur des conversations, où la même info pourrait être nécessaire plusieurs fois. Lorsqu'une demande est faite, si cette demande correspond à un modèle stocké précédemment, le système peut accéder rapidement aux infos nécessaires sans avoir à repasser par le processus d'allocation de mémoire.

Opérations vTensor

Les opérations vTensor sont les tâches spécifiques que l'on effectue sur le vTensor et sont structurées en trois modules principaux : allocation, désallocation et opérations d'arbre.

Allocation et Désallocation

Quand la mémoire est allouée en utilisant vTensor, il y a deux types d'allocation. L'allocation physique concerne les vrais morceaux de mémoire stockés sur le GPU. S'il n'y a pas assez de morceaux disponibles dans le système, de nouveaux morceaux sont créés et ajoutés au pool.

L'allocation virtuelle, d'autre part, ne réserve que de l'espace pour les adresses virtuelles sans prendre de mémoire pour les morceaux physiques. Cela signifie qu'on peut créer une adresse virtuelle qui est grande, même si on n'a besoin que d'une petite quantité de mémoire physique.

La désallocation implique de libérer des ressources mémoire. Contrairement aux méthodes traditionnelles, où la mémoire est immédiatement libérée, vTensor utilise une méthode paresseuse. Cela signifie qu'il ne libère pas activement la mémoire jusqu'à ce que la tâche soit complètement terminée, aidant à économiser du temps et des ressources.

Opérations d'Arbre

Les opérations d'arbre sont centrées sur l'arbre radix mentionné plus tôt. Ces opérations permettent au système d'ajouter de nouveaux vTensors dans l'arbre ou de chercher des vTensors existants basés sur leurs modèles de préfixe. Cela aide à réallouer la mémoire efficacement et à trouver ce qui est nécessaire rapidement dans les tâches en cours.

Le Planificateur vTensor

Le Planificateur vTensor (VTS) supervise comment la mémoire est allouée et gérée. Il interagit avec le Pool vTensor et effectue les opérations nécessaires pour satisfaire les demandes de mémoire.

Opérations de base de VTS

Les opérations de base de VTS incluent la création de nouvelles demandes de mémoire, l'extension de mémoire existante et le traitement des tâches liées aux préfixes.

L'étape de création initialise de nouvelles demandes et attribue à la fois de la mémoire physique et virtuelle selon les besoins. L'opération d'extension est essentielle dans des scénarios où la longueur des exigences de mémoire pourrait changer, comme pendant l'entraînement de modèles IA ou des tâches de prédiction.

Gestion des préfixes

Gérer les préfixes dans le contexte de vTensor est important pour les tâches en cours comme les modèles basés sur des conversations. Quand une conversation continue, le VTS enregistre le vTensor pertinent et peut le récupérer quand c'est nécessaire, permettant une réponse plus rapide sans avoir à recommencer le processus.

Quand une nouvelle demande liée à une conversation précédente arrive, le système duplique les adresses mémoire nécessaires et les métadonnées sans réallouer de la mémoire physique. Cela réduit la surcharge associée à l'allocation de mémoire, rendant le système plus efficace.

Conclusion

En résumé, vTensor est un système de gestion de mémoire sophistiqué, adapté aux environnements de haute performance informatique. L'architecture du système, composée du Pool vTensor, des Opérations vTensor et du Planificateur vTensor, lui permet de gérer efficacement les demandes de mémoire tout en minimisant le gaspillage et la surcharge de réallocation.

Avec des fonctionnalités comme la désallocation paresseuse, le mappage flexible de la mémoire et la gestion efficace des préfixes, vTensor offre une solution robuste pour gérer la mémoire dans des applications impliquant un traitement complexe des données. C'est particulièrement avantageux dans des scénarios comme l'IA, où la rapidité et l'efficacité de la gestion de la mémoire peuvent avoir un impact significatif sur la performance globale.

Source originale

Titre: vTensor: Flexible Virtual Tensor Management for Efficient LLM Serving

Résumé: Large Language Models (LLMs) are widely used across various domains, processing millions of daily requests. This surge in demand poses significant challenges in optimizing throughput and latency while keeping costs manageable. The Key-Value (KV) cache, a standard method for retaining previous computations, makes LLM inference highly bounded by memory. While batching strategies can enhance performance, they frequently lead to significant memory fragmentation. Even though cutting-edge systems like vLLM mitigate KV cache fragmentation using paged Attention mechanisms, they still suffer from inefficient memory and computational operations due to the tightly coupled page management and computation kernels. This study introduces the vTensor, an innovative tensor structure for LLM inference based on GPU virtual memory management (VMM). vTensor addresses existing limitations by decoupling computation from memory defragmentation and offering dynamic extensibility. Our framework employs a CPU-GPU heterogeneous approach, ensuring efficient, fragmentation-free memory management while accommodating various computation kernels across different LLM architectures. Experimental results indicate that vTensor achieves an average speedup of 1.86x across different models, with up to 2.42x in multi-turn chat scenarios. Additionally, vTensor provides average speedups of 2.12x and 3.15x in kernel evaluation, reaching up to 3.92x and 3.27x compared to SGLang Triton prefix-prefilling kernels and vLLM paged Attention kernel, respectively. Furthermore, it frees approximately 71.25% (57GB) of memory on the NVIDIA A100 GPU compared to vLLM, enabling more memory-intensive workloads.

Auteurs: Jiale Xu, Rui Zhang, Cong Guo, Weiming Hu, Zihan Liu, Feiyang Wu, Yu Feng, Shixuan Sun, Changxu Shao, Yuhong Guo, Junping Zhao, Ke Zhang, Minyi Guo, Jingwen Leng

Dernière mise à jour: 2024-07-22 00:00:00

Langue: English

Source URL: https://arxiv.org/abs/2407.15309

Source PDF: https://arxiv.org/pdf/2407.15309

Licence: https://creativecommons.org/licenses/by/4.0/

Changements: Ce résumé a été créé avec l'aide de l'IA et peut contenir des inexactitudes. Pour obtenir des informations précises, veuillez vous référer aux documents sources originaux dont les liens figurent ici.

Merci à arxiv pour l'utilisation de son interopérabilité en libre accès.

Plus d'auteurs

Articles similaires