Multi-LoRA Serving în vLLM în vLLM & Infrastructură LLM

Servirea a zeci de adaptori fini (LoRA) peste un singur model de bază înghețat, fără duplicarea memoriei GPU și fără penalizări de latență.

Sintaxă & invocare
vllm serve --enable-lora --lora-modules ...

În mediile corporative, fiecare departament sau caz de utilizare necesită adaptări specializate: suportul tehnic are nevoie de un stil de comunicare, departamentul juridic de o terminologie strictă, iar echipa de marketing de un ton de vânzare. Dacă fiecare model ar fi încărcat separat pe GPU, costurile de infrastructură ar fi astronomice.

Funcționalitatea de Multi-LoRA Serving din vLLM permite încărcarea unui singur model de bază mare (de exemplu Llama-3-70B) în memoria GPU, peste care se pot încărca dinamic zeci sau sute de adaptori LoRA de dimensiuni reduse (câteva zeci de megabytes fiecare).

vLLM gestionează calculul matricial în mod unificat prin nuclee dinamice (Punica kernels): cererile sosite concurent de la utilizatori diferiți pot fi grupate în același batch de inferență, chiar dacă fiecare cerere specifică un adaptor LoRA complet diferit prin parametrul `model: ‘llama-juridic’` sau `model: ‘llama-marketing’`.

Sintaxă, opțiuni și concepte cheie

Opțiune / Concept Descriere practică
--enable-lora Activează suportul nativ pentru încărcarea și execuția adaptorilor fini.
--max-loras Numărul maxim de adaptori LoRA activi simultan în memoria cache a GPU-ului.
--max-lora-rank Rangul maxim suportat pentru matricile de adaptare (uzual 16, 32 sau 64).
--lora-modules Maparea numelor publice din API pe căile directoarelor de pe disc.
Punica Kernels Nucleele CUDA optimizate pentru aplicarea multiplicării de matrici sparse per-request.

Exemple practice și comenzi

Exemplul 1: Lansarea unui server vLLM cu 2 adaptori LoRA specializați pe un singur Llama-3

Cum se mapează adaptorii și se apelează independent prin API-ul compatibil OpenAI.

# 1. Pornim serverul vLLM cu LoRA activat:
$ python3 -m vllm.entrypoints.openai.api_server \
    --model meta-llama/Meta-Llama-3-8B-Instruct \
    --enable-lora \
    --lora-modules \
        suport-client=/models/loras/suport_v1 \
        juridic-ro=/models/loras/juridic_v2 \
    --max-loras 4 \
    --port 8000

# 2. Apelăm modelul adaptat juridic prin cURL:
$ curl http://localhost:8000/v1/chat/completions \
    -H "Content-Type: application/json" \
    -d '{
      "model": "juridic-ro",
      "messages": [{"role": "user", "content": "Ce clauze sunt obligatorii într-un NDA?"}]
    }'

Rezultat & Impact

Răspuns generat folosind ponderile juridice cu zero timp de re-încărcare a modelului pe GPU.

Greșeli frecvente și bune practici

  • Antrenarea adaptorilor LoRA pe o arhitectură de model de bază diferită de cea servită de vLLM, cauzând erori de nepotrivire a dimensiunilor de tensori.
  • Depășirea parametrului `–max-lora-rank` setat la pornire de către un adaptor cu rang mai mare, ducând la eșecul încărcării acelui modul.

Ghiduri și noțiuni înrudite