S-LoRA : Service de milliers d'adaptateurs LoRA concurrents
S-LoRA: Serving Thousands of Concurrent LoRA Adapters
November 6, 2023
Auteurs: Ying Sheng, Shiyi Cao, Dacheng Li, Coleman Hooper, Nicholas Lee, Shuo Yang, Christopher Chou, Banghua Zhu, Lianmin Zheng, Kurt Keutzer, Joseph E. Gonzalez, Ion Stoica
cs.AI
Résumé
Le paradigme « pré-entraînement puis ajustement fin » est couramment adopté dans le déploiement des grands modèles de langage. L'adaptation à faible rang (LoRA), une méthode d'ajustement fin efficace en termes de paramètres, est souvent utilisée pour adapter un modèle de base à une multitude de tâches, ce qui génère une collection substantielle d'adaptateurs LoRA dérivés d'un seul modèle de base. Nous observons que ce paradigme offre des opportunités significatives pour l'inférence par lots lors du déploiement. Pour tirer parti de ces opportunités, nous présentons S-LoRA, un système conçu pour le déploiement évolutif de nombreux adaptateurs LoRA. S-LoRA stocke tous les adaptateurs dans la mémoire principale et charge les adaptateurs utilisés par les requêtes en cours dans la mémoire GPU. Pour utiliser efficacement la mémoire GPU et réduire la fragmentation, S-LoRA propose la pagination unifiée. La pagination unifiée utilise un pool de mémoire unifié pour gérer les poids dynamiques des adaptateurs avec différents rangs et les tenseurs de cache KV avec des longueurs de séquence variables. De plus, S-LoRA emploie une nouvelle stratégie de parallélisme des tenseurs et des noyaux CUDA personnalisés hautement optimisés pour le traitement hétérogène par lots des calculs LoRA. Collectivement, ces fonctionnalités permettent à S-LoRA de déployer des milliers d'adaptateurs LoRA sur un seul GPU ou sur plusieurs GPU avec une faible surcharge. Par rapport aux bibliothèques de pointe telles que HuggingFace PEFT et vLLM (avec un support naïf du déploiement LoRA), S-LoRA peut améliorer le débit jusqu'à 4 fois et augmenter le nombre d'adaptateurs déployés de plusieurs ordres de grandeur. En conséquence, S-LoRA permet un déploiement évolutif de nombreux modèles ajustés spécifiquement à des tâches et offre un potentiel pour des services d'ajustement fin personnalisés à grande échelle.
English
The "pretrain-then-finetune" paradigm is commonly adopted in the deployment
of large language models. Low-Rank Adaptation (LoRA), a parameter-efficient
fine-tuning method, is often employed to adapt a base model to a multitude of
tasks, resulting in a substantial collection of LoRA adapters derived from one
base model. We observe that this paradigm presents significant opportunities
for batched inference during serving. To capitalize on these opportunities, we
present S-LoRA, a system designed for the scalable serving of many LoRA
adapters. S-LoRA stores all adapters in the main memory and fetches the
adapters used by the currently running queries to the GPU memory. To
efficiently use the GPU memory and reduce fragmentation, S-LoRA proposes
Unified Paging. Unified Paging uses a unified memory pool to manage dynamic
adapter weights with different ranks and KV cache tensors with varying sequence
lengths. Additionally, S-LoRA employs a novel tensor parallelism strategy and
highly optimized custom CUDA kernels for heterogeneous batching of LoRA
computation. Collectively, these features enable S-LoRA to serve thousands of
LoRA adapters on a single GPU or across multiple GPUs with a small overhead.
Compared to state-of-the-art libraries such as HuggingFace PEFT and vLLM (with
naive support of LoRA serving), S-LoRA can improve the throughput by up to 4
times and increase the number of served adapters by several orders of
magnitude. As a result, S-LoRA enables scalable serving of many task-specific
fine-tuned models and offers the potential for large-scale customized
fine-tuning services.