Până la apariția noilor arhitecturi Vision-Language (VLM) de înaltă performanță, analiza documentelor cu imagini sau grafice era monopolizată de API-uri proprietare precum GPT-4o. Noile modele open-source (precum Qwen2-VL sau Mistral Pixtral) oferă performanțe comparabile și pot fi rulate în regie proprie prin vLLM.
vLLM gestionează procesarea multimodală prin codarea imaginilor folosind un Vision Encoder (cum ar fi ViT – Vision Transformer), intercalând tokenii vizuali rezultați direct în fluxul de tokeni de text al modelului de bază.
Serverul expune endpoint-ul standard /v1/chat/completions cu suport pentru array-ul image_url (atât linkuri HTTPS cât și imagini codificate base64), permițând integrarea instantanee cu biblioteci existente de Python sau clienți web precum Open WebUI.
Sintaxă, opțiuni și concepte cheie
| Opțiune / Concept | Descriere practică |
|---|---|
image_url |
Formatul compatibil OpenAI de trimitere a imaginilor: `{„type”: „image_url”, „image_url”: {„url”: „data:image/jpeg;base64,…”}}`. |
Vision Encoder |
Componenta de rețea neuronală care transformă matricea de pixeli în reprezentări vectoriale de tokeni vizuali. |
Dynamic Image Resolution |
Abilitatea modelului (ex. Qwen2-VL) de a păstra rezoluția nativă a imaginii fără deformare sau decupare forțată. |
--limit-mm-per-prompt |
Parametru de configurare vLLM ce specifică numărul maxim de imagini permise într-un singur prompt (implicit 1). |
Exemple practice și comenzi
Exemplul 1: Lansarea modelului Qwen2-VL-7B pe GPU și interogare cu imagine base64
Configurarea completă pentru recunoașterea automată a conținutului din imagini.
# 1. Pornim serverul vLLM multimodal:
$ python3 -m vllm.entrypoints.openai.api_server \
--model Qwen/Qwen2-VL-7B-Instruct \
--dtype bfloat16 \
--gpu-memory-utilization 0.90 \
--port 8000
# 2. Interogare în Python:
import openai, base64
client = openai.OpenAI(base_url="http://localhost:8000/v1", api_key="none")
with open("schema_retea.png", "rb") as f:
b64 = base64.b64encode(f.read()).decode()
raspuns = client.chat.completions.create(
model="Qwen/Qwen2-VL-7B-Instruct",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "Identifică adresele IP din diagrama de rețea atașată:"},
{"type": "image_url", "image_url": {"url": f"data:image/png;base64,{b64}"}}
]
}]
)
print(raspuns.choices[0].message.content)
Rezultat & Impact
Extragerea precisă a diagramelor și tabelelor cu confidențialitate absolută a datelor.
Greșeli frecvente și bune practici
- Trimiterea de imagini de rezoluții gigantice (peste 4K) fără redimensionare preliminară, ceea ce poate genera peste 10.000 de tokeni vizuali pentru o singură imagine, epuizând VRAM-ul.
- Uitările legate de setarea flagului `–limit-mm-per-prompt` atunci când utilizatorul dorește să compare două sau trei imagini simultan.