بعد عام من الجهود المتواصلة، يسعدنا اليوم إصدار Qwen2-VL ! Qwen2-VL هو أحدث إصدار من نماذج لغة الرؤية في عائلات نماذج Qwen.
فهم SoTA للصور ذات الدقة والنسبة المختلفة : يحقق Qwen2-VL أداءً متطورًا وفقًا لمعايير الفهم البصري، بما في ذلك MathVista وDocVQA وRealWorldQA وMTVQA وما إلى ذلك.
فهم مقاطع الفيديو التي تزيد مدتها عن 20 دقيقة : من خلال إمكانيات البث عبر الإنترنت، يمكن لـ Qwen2-VL فهم مقاطع الفيديو التي تزيد مدتها عن 20 دقيقة من خلال الإجابة على الأسئلة عالية الجودة المستندة إلى الفيديو، والحوار، وإنشاء المحتوى، وما إلى ذلك.
الوكيل الذي يمكنه تشغيل الهواتف المحمولة والروبوتات وما إلى ذلك : مع قدرات التفكير المعقد واتخاذ القرارات، يمكن دمج Qwen2-VL مع أجهزة مثل الهواتف المحمولة والروبوتات وما إلى ذلك، للتشغيل التلقائي بناءً على البيئة المرئية والتعليمات النصية.
دعم متعدد اللغات : لخدمة المستخدمين العالميين، إلى جانب الإنجليزية والصينية، يدعم Qwen2-VL الآن فهم النصوص بلغات مختلفة داخل الصور، بما في ذلك معظم اللغات الأوروبية واليابانية والكورية والعربية والفيتنامية وما إلى ذلك.
الدقة الديناميكية الساذجة : على عكس ما سبق، يمكن لـ Qwen2-VL التعامل مع دقة الصور العشوائية، وتعيينها في عدد ديناميكي من الرموز المرئية، مما يوفر تجربة معالجة بصرية تشبه تجربة الإنسان.
تضمين الموضع الدوار متعدد الوسائط (M-ROPE) : يقوم بتحليل التضمين الموضعي إلى أجزاء لالتقاط المعلومات الموضعية النصية أحادية الأبعاد والمرئية ثنائية الأبعاد وثلاثية الأبعاد، مما يعزز قدرات المعالجة متعددة الوسائط.
لدينا نماذج Qwen2-VL مفتوحة المصدر، بما في ذلك Qwen2-VL-2B وQwen2-VL-7B بموجب ترخيص Apache 2.0، بالإضافة إلى Qwen2-VL-72B بموجب ترخيص Qwen. تم الآن دمج هذه النماذج مع Hugging Face Transformers وvLLM وأطر عمل الطرف الثالث الأخرى. نأمل أن تستمتع باستخدامها!
2024.09.19: يتوفر الآن نموذج Qwen2-VL-72B المضبوط للتعليمات ونسخته الكمية [AWQ، GPTQ-Int4، GPTQ-Int8]. لقد قمنا أيضًا بإصدار ورقة Qwen2-VL في وقت واحد.
2024.08.30: لقد أصدرنا سلسلة Qwen2-VL. الطرازان 2B و7B متوفران الآن، وسيتوفر الطراز 72B للمصادر المفتوحة قريبًا. لمزيد من التفاصيل، يرجى مراجعة مدونتنا!
المعيار | سوتا السابقة (مفتوح المصدر LVLM) | كلود 3.5 السوناتة | جي بي تي-4o | كوين2-VL-72B (؟ ؟ | كوين2-VL-7B (؟) | كوين2-VL-2B (؟؟) |
---|---|---|---|---|---|---|
MMMU فال | 58.3 | 68.3 | 69.1 | 64.5 | 54.1 | 41.1 |
MMMU-برو | 46.9 | 51.5 | 51.9 | 46.2 | 43.5 | 37.6 |
اختبار DocVQA | 94.1 | 95.2 | 92.8 | 96.5 | 94.5 | 90.1 |
اختبار معلوماتVQA | 82.0 | - | - | 84.5 | 76.5 | 65.5 |
اختبار الرسم البيانيQA | 88.4 | 90.8 | 85.7 | 88.3 | 83.0 | 73.5 |
نصVQA فال | 84.4 | - | - | 85.5 | 84.3 | 79.7 |
OCRBench | 852 | 788 | 736 | 877 | 845 | 794 |
MTVQA | 17.3 | 25.7 | 27.8 | 30.9 | 25.6 | 18.1 |
جهاز فيديو سهل | 84.67 | 63.85 | 91.55 | 91.93 | 89.70 | 81.45 |
VCR زه من السهل | 22.09 | 1.0 | 14.87 | 65.37 | 59.94 | 46.16 |
RealWorldQA | 72.2 | 60.1 | 75.4 | 77.8 | 70.1 | 62.9 |
مبلغ MME | 2414.7 | 1920.0 | 2328.7 | 2482.7 | 2326.8 | 1872.0 |
اختبار MMBench-EN | 86.5 | 79.7 | 83.4 | 86.5 | 83.0 | 74.9 |
اختبار MMBench-CN | 86.3 | 80.7 | 82.1 | 86.6 | 80.5 | 73.5 |
اختبار MMBench-V1.1 | 85.5 | 78.5 | 82.2 | 85.9 | 80.7 | 72.2 |
اختبار MMT-مقعد | 63.4 | - | 65.5 | 71.7 | 63.7 | 54.5 |
MMStar | 67.1 | 62.2 | 63.9 | 68.3 | 60.7 | 48.0 |
MMVet GPT-4-توربو | 65.7 | 66.0 | 69.1 | 74.0 | 62.0 | 49.5 |
متوسط هالبينش | 55.2 | 49.9 | 55.0 | 58.1 | 50.6 | 41.7 |
MathVista testmini | 67.5 | 67.7 | 63.8 | 70.5 | 58.2 | 43.0 |
MathVision | 16.97 | - | 30.4 | 25.9 | 16.3 | 12.4 |
المعيار | سوتا السابقة (مفتوح المصدر LVLM) | الجوزاء 1.5 برو | جي بي تي-4o | كوين2-VL-72B (؟) | كوين2-VL-7B (؟) | كوين2-VL-2B (؟؟) |
---|---|---|---|---|---|---|
MVBench | 69.6 | - | - | 73.6 | 67.0 | 63.2 |
اختبار الإدراك | 66.9 | - | - | 68.0 | 62.3 | 53.9 |
اختبار المخطط الأنا | 62.0 | 63.2 | 72.2 | 77.9 | 66.7 | 54.9 |
فيديو MME (wo/w الغواصات) | 66.3/69.6 | 75.0 / 81.3 | 71.9/77.2 | 71.2/77.8 | 63.3/69.0 | 55.6/60.4 |
المعيار | متري | سوتا السابقة | جي بي تي-4o | كوين2-VL-72B | |
---|---|---|---|---|---|
عام | فن كول [1] | TM | - | 90.2 | 93.1 |
م | - | 50.0 | 53.2 | ||
لعبة | خط الأعداد | ريال | 89.4 [2] | 91.5 | 100.0 |
بلاك جاك | ريال | 40.2 [2] | 34.5 | 42.6 | |
إيزي بوينت | ريال | 50.0 [2] | 85.5 | 100.0 | |
النقطة24 | ريال | 2.6 [2] | 3.0 | 4.5 | |
أندرويد | AITZ | TM | 83.0 [3] | 70.0 | 89.6 |
م | 47.7 [3] | 35.3 | 72.1 | ||
AI2THOR | ألفريد صالح غير مرئي | ريال | 67.7 [4] | - | 67.8 |
جي سي | 75.3 [4] | - | 75.8 | ||
شبكة افتراضية خاصة | R2R صالح غير مرئي | ريال | 79.0 | 43.7 [5] | 51.7 |
REVERIE صالح غير مرئي | ريال | 61.0 | 31.6 [5] | 31.0 |
SR وGC وTM وEM هي اختصارات لمعدل النجاح ونجاح حالة الهدف ومطابقة النوع والمطابقة التامة. ألفريد مدعوم من قبل SAM [6] .
معيار استدعاء الوظائف المنسق ذاتيًا بواسطة فريق Qwen
الضبط الدقيق لنماذج لغة الرؤية الكبيرة كعوامل صنع القرار من خلال التعلم المعزز
الروبوت في حديقة الحيوان: سلسلة من الأفكار لوكلاء واجهة المستخدم الرسومية
ThinkBot: تعليمات مجسدة تتبع تفكير سلسلة الأفكار
MapGPT: التوجيه الموجه بالخريطة مع تخطيط المسار التكيفي للتنقل بالرؤية واللغة
شريحة أي شيء.
نماذج | AR | دي | الاب | هو - هي | جا | كو | رو | ذ | سادسا | متوسط |
---|---|---|---|---|---|---|---|---|---|---|
كوين2-VL-72B | 20.7 | 36.5 | 44.1 | 42.8 | 21.6 | 37.4 | 15.6 | 17.7 | 41.6 | 30.9 |
جي بي تي-4o | 20.2 | 34.2 | 41.2 | 32.7 | 20.0 | 33.9 | 11.5 | 22.5 | 34.2 | 27.8 |
كلود3 أوبوس | 15.1 | 33.4 | 40.6 | 34.4 | 19.4 | 27.2 | 13.0 | 19.5 | 29.1 | 25.7 |
الجوزاء الترا | 14.7 | 32.3 | 40.0 | 31.8 | 12.3 | 17.2 | 11.8 | 20.3 | 28.6 | 23.2 |
ويتم تقييم هذه النتائج على أساس معيار MTVQA.
أدناه، نقدم أمثلة بسيطة لإظهار كيفية استخدام Qwen2-VL مع ؟ نطاق النموذج و؟ محولات.
كود Qwen2-VL موجود في أحدث محولات Hugging Face وننصحك بالبناء من المصدر باستخدام الأمر:
pip install git+https://github.com/huggingface/transformers@21fac7abba2a37fae86106f87fcf9974fd1e3830 accelerate
أو قد تواجه الخطأ التالي:
KeyError: 'qwen2_vl'
ملاحظة : يحتوي الإصدار الأخير من transformers
على خطأ عند تحميل تكوين Qwen2-VL، لذلك تحتاج إلى تثبيت إصدار محدد من المحولات كما هو مذكور أعلاه.
نحن نقدم مجموعة أدوات لمساعدتك في التعامل مع أنواع مختلفة من المدخلات المرئية بشكل أكثر سهولة، كما لو كنت تستخدم واجهة برمجة التطبيقات (API). يتضمن ذلك base64 وعناوين URL والصور ومقاطع الفيديو المتداخلة. يمكنك تثبيته باستخدام الأمر التالي:
# يوصى بشدة باستخدام ميزة `[decord]` لتحميل الفيديو بشكل أسرع.pip install qwen-vl-utils[decord]
إذا كنت لا تستخدم Linux، فقد لا تتمكن من تثبيت decord
من PyPI. في هذه الحالة، يمكنك استخدام pip install qwen-vl-utils
والذي سيعود إلى استخدام torchvision لمعالجة الفيديو. ومع ذلك، لا يزال بإمكانك تثبيت الديكور من المصدر لاستخدامه عند تحميل الفيديو.
نعرض هنا مقتطفًا من التعليمات البرمجية ليوضح لك كيفية استخدام نموذج الدردشة مع transformers
و qwen_vl_utils
:
من المحولات قم باستيراد Qwen2VLForConditionalGeneration وAutoTokenizer وAutoProcessorfrom qwen_vl_utils importprocess_vision_info# الافتراضي: قم بتحميل النموذج على الجهاز (الأجهزة) المتاحة model = Qwen2VLForConditionalGeneration.from_pretrained("Qwen/Qwen2-VL-7B-Instruct"، torch_dtype = "auto"، devices_map = "auto")# نوصي بتمكين flash_attention_2 لتسريع أفضل وتوفير الذاكرة، خاصة في سيناريوهات الصور والفيديو المتعددة.# model = Qwen2VLForConditionalGeneration.from_pretrained(# "Qwen/Qwen2-VL-7B-Instruct",# torch_dtype=torch. bfloat16,# attn_implementation="flash_attention_2",# devices_map="auto",# )# defaultprocesserprocessor = AutoProcessor.from_pretrained("Qwen/Qwen2-VL-7B-Instruct")# النطاق الافتراضي لعدد الرموز المرئية لكل صورة في النموذج هو 4-16384.# يمكنك تعيين الحد الأدنى للبكسل والحد الأقصى للبكسل وفقًا لاحتياجاتك، مثل نطاق رمزي يتراوح بين 256-1280، لتحقيق التوازن بين الأداء والتكلفة.#min_pixels = 256*28*28# max_pixels = 1280*28 *28# المعالج = AutoProcessor.from_pretrained("Qwen/Qwen2-VL-7B-Instruct"، min_pixels=min_pixels، max_pixels=max_pixels)messages = [ {"الدور": "المستخدم"، "المحتوى": [ {"نوع": "صورة"، "صورة": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-VL/assets/demo.jpeg"، }, {"نوع": "نص"، "نص": "وصف هذه الصورة."}, ]، } ]# التحضير لنص الاستدلال = المعالج.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)image_inputs, video_inputs =process_vision_info(messages)inputs = المعالج(text=[text],images=image_inputs,videos=video_inputs,padding=True, return_tensors = "pt"، )inputs = inputs.to("cuda")# الاستدلال: إنشاء Out_ids[len(in_ids) :] لـ in_ids وout_ids في zip(inputs) .input_ids، generator_ids) ]output_text = المعالج.batch_decode(generated_ids_trimmed، Skip_special_tokens=True، clean_up_tokenization_spaces=False)print(output_text)
# الرسائل التي تحتوي على صور متعددة ورسائل استعلام نصية = [ {"الدور": "المستخدم"، "المحتوى": [ {"نوع": "صورة"، "صورة": "ملف:///path/to/image1.jpg"}، {"نوع": "صورة"، "صورة": "ملف:///path/to/image2.jpg"}، {"type": "text"، "text": "حدد أوجه التشابه بين هذه الصور."}, ]، } ]# التحضير لنص الاستدلال = المعالج.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)image_inputs, video_inputs =process_vision_info(messages)inputs = المعالج(text=[text],images=image_inputs,videos=video_inputs,padding=True, return_tensors = "pt"، )inputs = inputs.to("cuda")# Inferencegenerated_ids = model.generate(**inputs, max_new_tokens=128)generated_ids_trimmed = [out_ids[len(in_ids) :] for in_ids, out_ids in zip(inputs.input_ids, generator_ids) ]output_text = المعالج.batch_decode(generated_ids_trimmed، Skip_special_tokens=True، clean_up_tokenization_spaces=False)print(output_text)
# رسائل تحتوي على قائمة صور فيديو واستعلام نصيmessages = [ {"الدور": "المستخدم"، "المحتوى": [ {"نوع": "فيديو"، "فيديو": ["ملف:///path/to/frame1.jpg"، "ملف:///path/to/frame2.jpg"، "ملف:///" المسار/to/frame3.jpg"، "ملف:///path/to/frame4.jpg"، ]، }, {"type": "text"، "text": "وصف هذا الفيديو."}, ]، } ]# الرسائل التي تحتوي على مسار فيديو محلي ورسائل استعلام نصية = [ {"الدور": "المستخدم"، "المحتوى": [ {"النوع": "فيديو"، "فيديو": "ملف:///path/to/video1.mp4"، "max_pixels": 360 * 420، "إطار في الثانية": 1.0، }, {"type": "text"، "text": "وصف هذا الفيديو."}, ]، } ]# الرسائل التي تحتوي على عنوان URL للفيديو ورسائل استعلام نصية = [ {"الدور": "المستخدم"، "المحتوى": [ {"نوع": "فيديو"، "فيديو": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen2-VL/space_woaudio.mp4"، }, {"type": "text"، "text": "وصف هذا الفيديو."}, ]، } ]# التحضير لنص الاستدلال = المعالج.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)image_inputs, video_inputs =process_vision_info(messages)inputs = المعالج(text=[text],images=image_inputs,videos=video_inputs,padding=True, return_tensors = "pt"، )inputs = inputs.to("cuda")# Inferencegenerated_ids = model.generate(**inputs, max_new_tokens=128)generated_ids_trimmed = [out_ids[len(in_ids) :] for in_ids, out_ids in zip(inputs.input_ids, generator_ids) ]output_text = المعالج.batch_decode(generated_ids_trimmed، Skip_special_tokens=True، clean_up_tokenization_spaces=False)print(output_text)
يعتمد توافق عنوان URL للفيديو إلى حد كبير على إصدار مكتبة الطرف الثالث. التفاصيل في الجدول أدناه. قم بتغيير الواجهة الخلفية بواسطة FORCE_QWENVL_VIDEO_READER=torchvision
أو FORCE_QWENVL_VIDEO_READER=decord
إذا كنت تفضل عدم استخدام الواجهة الافتراضية.
الخلفية | HTTP | HTTPS |
---|---|---|
رؤية الشعلة >= 0.19.0 | ✅ | ✅ |
رؤية الشعلة <0.19.0 | ❌ | ❌ |
ديكور | ✅ | ❌ |
# رسائل نموذجية لرسائل الاستدلال الدفعي 1 = [ {"الدور": "المستخدم"، "المحتوى": [ {"نوع": "صورة"، "صورة": "ملف:///path/to/image1.jpg"}، {"نوع": "صورة"، "صورة": "ملف:///path/to/image2.jpg"}، {"type": "text", "text": "ما العناصر المشتركة في هذه الصور؟"}, ]، } ]الرسائل2 = [ {"role": "system"، "content": "أنت مساعد مفيد."}, {"الدور": "المستخدم"، "المحتوى": "من أنت؟"}, ]# دمج الرسائل لمعالجة الدفعاتmessages = [messages1, messages2]# التحضير لنصوص الاستدلال المجمعة = [processor.apply_chat_template(msg, tokenize=False, add_generation_prompt=True)for msg in messages]image_inputs, video_inputs =process_vision_info(messages)inputs = المعالج (نص = نصوص، صور = image_inputs، مقاطع فيديو = video_inputs، الحشو = صحيح، return_tensors = "pt"، )inputs = inputs.to("cuda")# Batch Inferencegenerated_ids = model.generate(**inputs, max_new_tokens=128)generated_ids_trimmed = [out_ids[len(in_ids) :] for in_ids, out_ids in zip(inputs.input_ids, generator_ids ) ]output_texts = معالج.batch_decode(generated_ids_trimmed، Skip_special_tokens=True، clean_up_tokenization_spaces=False)print(output_texts)
نحن ننصح المستخدمين بشدة، خاصة أولئك الموجودين في الصين القارية، باستخدام ModelScope. يمكن أن يساعدك snapshot_download
في حل المشكلات المتعلقة بتنزيل نقاط التفتيش.
بالنسبة للصور المدخلة، فإننا ندعم الملفات المحلية وbase64 وعناوين URL. بالنسبة لمقاطع الفيديو، فإننا ندعم حاليًا الملفات المحلية فقط.
# يمكنك إدراج مسار ملف محلي أو عنوان URL أو صورة مشفرة بـ base64 مباشرة في الموضع الذي تريده في النص.## رسائل مسار الملف المحلي = [ {"الدور": "المستخدم"، "المحتوى": [ {"نوع": "صورة"، "صورة": "ملف:///path/to/your/image.jpg"}, {"نوع": "نص"، "نص": "وصف هذه الصورة."}, ]، } ]## رسائل URL للصورة = [ {"الدور": "المستخدم"، "المحتوى": [ {"نوع": "صورة"، "صورة": "http://path/to/your/image.jpg"}, {"نوع": "نص"، "نص": "وصف هذه الصورة."}, ]، } ]## رسائل الصور المشفرة Base64 = [ {"الدور": "المستخدم"، "المحتوى": [ {"نوع": "صورة"، "صورة": "data:image;base64,/9j/..."}, {"نوع": "نص"، "نص": "وصف هذه الصورة."}, ]، } ]
يدعم النموذج مجموعة واسعة من مدخلات الدقة. افتراضيًا، يستخدم الدقة الأصلية للإدخال، لكن الدقة الأعلى يمكنها تحسين الأداء على حساب المزيد من العمليات الحسابية. يمكن للمستخدمين تعيين الحد الأدنى والحد الأقصى لعدد وحدات البكسل لتحقيق التكوين الأمثل لاحتياجاتهم، مثل نطاق عدد الرموز المميز الذي يتراوح بين 256 و1280، لتحقيق التوازن بين السرعة واستخدام الذاكرة.
min_pixels = 256 * 28 * 28max_pixels = 1280 * 28 * 28processor = AutoProcessor.from_pretrained("Qwen/Qwen2-VL-7B-Instruct"، min_pixels=min_pixels، max_pixels=max_pixels)
علاوة على ذلك، فإننا نقدم طريقتين للتحكم الدقيق في حجم الصورة المُدخلة إلى النموذج:
حدد الأبعاد الدقيقة: قم بتعيين resized_height
و resized_width
مباشرة. سيتم تقريب هذه القيم إلى أقرب مضاعف للرقم 28.
تحديد min_pixels وmax_pixels: سيتم تغيير حجم الصور للحفاظ على نسبة العرض إلى الارتفاع الخاصة بها ضمن نطاق min_pixels وmax_pixels.
# تم تغيير حجم_الارتفاع و resize_widthmessages = [ {"الدور": "المستخدم"، "المحتوى": [ {"نوع": "صورة"، "صورة": "ملف:///path/to/your/image.jpg"، "resize_height": 280،"resize_width": 420، }, {"نوع": "نص"، "نص": "وصف هذه الصورة."}, ]، } ]# min_pixels و max_pixelsmessages = [ {"الدور": "المستخدم"، "المحتوى": [ {"نوع": "صورة"، "صورة": "ملف:///path/to/your/image.jpg"، "min_pixels": 50176،"max_pixels": 50176، }, {"نوع": "نص"، "نص": "وصف هذه الصورة."}, ]، } ]
افتراضيًا، يتم تضمين الصور ومحتوى الفيديو مباشرةً في المحادثة. عند التعامل مع صور متعددة، من المفيد إضافة تسميات إلى الصور ومقاطع الفيديو كمرجع أفضل. يمكن للمستخدمين التحكم في هذا السلوك من خلال الإعدادات التالية:
محادثة = [ {"role": "user"، "content": [{"type": "image"}، {"type": "text"، "text": "مرحبًا، كيف حالك؟"}]، }, {"role": "assistant"، "content": "أنا بخير، شكرًا لك على سؤالك. كيف يمكنني مساعدتك اليوم؟", }, {"الدور": "المستخدم"، "المحتوى": [ {"type": "text"، "text": "هل يمكنك وصف هذه الصور ومقاطع الفيديو؟"}, {"نوع": "صورة"}، {"نوع": "صورة"}، {"النوع": "فيديو"}، {"type": "text"، "text": "هذه من إجازتي."}, ]، }, {"role": "assistant"، "content": "يسعدني أن أصف لك الصور ومقاطع الفيديو. هل يمكنك تقديم المزيد من السياق حول إجازتك؟", }, {"role": "user"،"content": "لقد كانت رحلة إلى الجبال. هل يمكنك رؤية التفاصيل في الصور والفيديو؟", }, ]# default:prompt_without_id =processor.apply_chat_template(conversation, add_gene_prompt=True)# الإخراج المستثنى: '<|im_start|>systemnأنت مساعد مفيد.<|im_end|>n<|im_start|>usern<|vision_start|>< |image_pad|><|vision_end|>مرحبًا، كيف حالك؟<|im_end|>n<|im_start|>assistantnأنا بخير، شكرًا لسؤالك. كيف يمكنني مساعدتك اليوم؟<|im_end|>n<|im_start|>usernهل يمكنك وصف هذه الصور ومقاطع الفيديو؟<|vision_start|><|image_pad|><|vision_end|><|vision_start|><|image_pad| ><|vision_end|><|vision_start|><|video_pad|><|vision_end|>هذه من إجازتي.<|im_end|>n<|im_start|>مساعد سأكون سعيدًا بوصف الصور ومقاطع الفيديو لـ أنت. هل يمكنك من فضلك تقديم المزيد من السياق حول إجازتك؟<|im_end|>n<|im_start|>usernلقد كانت رحلة إلى الجبال. هل يمكنك رؤية التفاصيل في الصور والفيديو؟<|im_end|>n<|im_start|>assistantn'# add idsprompt_with_id =processor.apply_chat_template(conversation, add_generation_prompt=True, add_vision_id=True)# الإخراج المستثنى: '<|im_start |>systemnأنت مساعد مفيد.<|im_end|>n<|im_start|>usernPicture 1: <|vision_start|><|image_pad|><|vision_end|>مرحبًا، كيف حالك؟<|im_end|>n< |im_start|>assistantnأنا بخير، شكرًا لسؤالك. كيف يمكنني مساعدتك اليوم؟<|im_end|>n<|im_start|>usernهل يمكنك وصف هذه الصور ومقاطع الفيديو؟ الصورة 2: <|vision_start|><|image_pad|><|vision_end|>الصورة 3: <|vision_start |><|image_pad|><|vision_end|>الفيديو 1: <|vision_start|><|video_pad|><|vision_end|>هذه من إجازتي.<|im_end|>n<|im_start|>مساعد كن سعيدًا بوصف الصور والفيديو لك. هل يمكنك من فضلك تقديم المزيد من السياق حول إجازتك؟<|im_end|>n<|im_start|>usernلقد كانت رحلة إلى الجبال. هل يمكنك رؤية التفاصيل في الصور والفيديو؟<|im_end|>n<|im_start|>assistantn'
أولاً، تأكد من تثبيت أحدث إصدار من Flash Attention 2:
تثبيت النقطة -U flash-attn --no-build-isolation
بالإضافة إلى ذلك، يجب أن يكون لديك جهاز متوافق مع Flash-Attention 2. اقرأ المزيد عنه في الوثائق الرسمية لمستودع Flash Attention. لا يمكن استخدام FlashAttention-2 إلا عند تحميل نموذج في torch.float16
أو torch.bfloat16
.
لتحميل نموذج وتشغيله باستخدام Flash Attention-2، ما عليك سوى إضافة attn_implementation="flash_attention_2"
عند تحميل النموذج كما يلي:
من المحولات import Qwen2VLForConditionalGenerationmodel =