Исследование интеграции VLM: HuggingFace vs vLLM
1. HuggingFace Transformers
Стандартный способ работы с моделями. Подходит для экспериментов и отладки, но медленнее для production-нагрузок.
Особенности:
- Универсальность: Поддерживает практически все VLM "из коробки" (Qwen2-VL, LLaVA, Idefics и др.).
- API: Использует классы
AutoModelForVision2Seqили специфичные (например,Qwen2VLForConditionalGeneration) иAutoProcessor. - Обработка изображений: Требует явной обработки через
process_vision_info(для Qwen2-VL) илиprocessor. - Инференс:
model.generate().
Пример (Qwen2-VL):
from transformers import Qwen2VLForConditionalGeneration, AutoProcessor
from qwen_vl_utils import process_vision_info
model = Qwen2VLForConditionalGeneration.from_pretrained("Qwen/Qwen2-VL-7B-Instruct", device_map="auto")
processor = AutoProcessor.from_pretrained("Qwen/Qwen2-VL-7B-Instruct")
messages = [
{"role": "user", "content": [
{"type": "image", "image": "file:///path/to/image.jpg"},
{"type": "text", "text": "Describe this image."}
]}
]
text = processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
image_inputs, video_inputs = process_vision_info(messages)
inputs = processor(text=[text], images=image_inputs, videos=video_inputs, return_tensors="pt").to("cuda")
generated_ids = model.generate(**inputs, max_new_tokens=128)
output_text = processor.batch_decode(generated_ids, skip_special_tokens=True)