S-LoRA: Обслуживание тысяч параллельных адаптеров LoRA
S-LoRA: Serving Thousands of Concurrent LoRA Adapters
November 6, 2023
Авторы: 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
Аннотация
Парадигма "предварительное обучение с последующей тонкой настройкой" широко используется при развертывании крупных языковых моделей. Low-Rank Adaptation (LoRA), метод эффективной тонкой настройки параметров, часто применяется для адаптации базовой модели к множеству задач, что приводит к созданию значительного набора адаптеров LoRA, производных от одной базовой модели. Мы отмечаем, что эта парадигма открывает значительные возможности для пакетного вывода при обслуживании. Чтобы воспользоваться этими возможностями, мы представляем S-LoRA — систему, предназначенную для масштабируемого обслуживания множества адаптеров LoRA. S-LoRA хранит все адаптеры в основной памяти и загружает адаптеры, используемые текущими запросами, в память GPU. Для эффективного использования памяти GPU и уменьшения фрагментации S-LoRA предлагает Unified Paging. Unified Paging использует единый пул памяти для управления динамическими весами адаптеров с различными рангами и тензорами кэша ключей и значений (KV cache) с разной длиной последовательностей. Кроме того, S-LoRA применяет новую стратегию тензорного параллелизма и высокооптимизированные пользовательские CUDA-ядра для гетерогенного пакетного вычисления LoRA. В совокупности эти функции позволяют S-LoRA обслуживать тысячи адаптеров LoRA на одном GPU или на нескольких GPU с минимальными накладными расходами. По сравнению с передовыми библиотеками, такими как HuggingFace PEFT и vLLM (с базовой поддержкой обслуживания LoRA), S-LoRA может увеличить пропускную способность до 4 раз и на несколько порядков увеличить количество обслуживаемых адаптеров. В результате S-LoRA обеспечивает масштабируемое обслуживание множества моделей, настроенных для конкретных задач, и открывает потенциал для крупномасштабных услуг по персонализированной тонкой настройке.
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.