مع تزايد القدرة على نماذج اللغة الكبيرة (LLMs)، ظهرت فئة جديدة من النماذج: نماذج لغة الرؤية (VLMs). يمكن لهذه النماذج تحليل الصور ومقاطع الفيديو لوصف المشاهد وإنشاء التسميات التوضيحية والإجابة على الأسئلة المتعلقة بالمحتوى المرئي.
على الرغم من أن تشغيل نماذج الذكاء الاصطناعي على جهازك الخاص قد يكون أمرًا صعبًا نظرًا لأن هذه النماذج غالبًا ما تتطلب الكثير من العمليات الحسابية، إلا أنها توفر أيضًا فوائد كبيرة: بما في ذلك تحسين الخصوصية نظرًا لبقاء بياناتك على جهازك، وتعزيز السرعة والموثوقية لأنك لا تعتمد على اتصال بالإنترنت أو خوادم خارجية. هذا هو المكان الذي تأتي فيه أدوات مثل Optimum Intel وOpenVINO، بالإضافة إلى نموذج صغير وفعال مثل SmolVLM. في منشور المدونة هذا، سنوجهك عبر ثلاث خطوات سهلة لتشغيل VLM محليًا، دون الحاجة إلى أجهزة باهظة الثمن أو وحدات معالجة الرسومات (على الرغم من أنه يمكنك تشغيل جميع نماذج التعليمات البرمجية من منشور المدونة هذا على وحدات معالجة الرسومات Intel).
انشر النموذج الخاص بك مع Optimum
تم تصميم النماذج الصغيرة مثل SmolVLM للاستهلاك المنخفض للموارد، ولكن يمكن تحسينها بشكل أكبر. سنرى في منشور المدونة هذا كيفية تحسين النموذج الخاص بك، لتقليل استخدام الذاكرة وتسريع الاستدلال، مما يجعله أكثر كفاءة للنشر على الأجهزة ذات الموارد المحدودة.
لمتابعة هذا البرنامج التعليمي، تحتاج إلى تثبيت optimum و openvino، والذي يمكنك القيام به باستخدام:
pip install optimum-intel[openvino] transformers==4.52.*
الخطوة 1: تحويل النموذج الخاص بك
أولاً، ستحتاج إلى تحويل النموذج الخاص بك إلى OpenVINO IR. هناك خيارات متعددة للقيام بذلك:
- يمكنك استخدام Optimum CLI
optimum-cli export openvino -m HuggingFaceTB/SmolVLM2-256M-Video-Instruct smolvlm_ov/
- أو يمكنك تحويله سريعًا عند تحميل النموذج الخاص بك:
from optimum.intel import OVModelForVisualCausalLM
model_id = "HuggingFaceTB/SmolVLM2-256M-Video-Instruct"
model = OVModelForVisualCausalLM.from_pretrained(model_id)
model.save_pretrained("smolvlm_ov")
الخطوة 2: التكميم
الآن حان الوقت لتحسين النموذج الخاص بك. يقلل التكميم من دقة أوزان النموذج و/أو عمليات التنشيط، مما يؤدي إلى نماذج أصغر وأسرع. في الأساس، إنها طريقة لتعيين القيم من نوع بيانات عالي الدقة، مثل أرقام الفاصلة العائمة 32 بت (FP32)، إلى تنسيق أقل دقة، عادةً أعداد صحيحة 8 بت (INT8). على الرغم من أن هذه العملية توفر العديد من الفوائد الرئيسية، إلا أنها يمكن أن تؤثر أيضًا على احتمال فقدان الدقة.
يدعم Optimum طريقتين رئيسيتين للتكميم بعد التدريب:
دعونا استكشاف كل واحد منهم.
الخيار 1: تكميم الوزن فقط
ويعني تكميم الوزن فقط أن الأوزان فقط هي التي يتم تكميمها ولكن عمليات التنشيط تظل في دقتها الأصلية. ونتيجة لذلك، يصبح النموذج أصغر حجمًا وأكثر كفاءة في الذاكرة، مما يؤدي إلى تحسين أوقات التحميل. ولكن بما أن عمليات التنشيط ليست كمية، فإن مكاسب سرعة الاستدلال تكون محدودة. يعد تكميم الوزن فقط خطوة أولى بسيطة لأنه عادةً لا يؤدي إلى انخفاض كبير في الدقة.
منذ OpenVINO 2024.3، إذا تم قياس وزن النموذج، فسيتم أيضًا قياس عمليات التنشيط المقابلة في وقت التشغيل، مما يؤدي إلى تسريع إضافي اعتمادًا على الجهاز.
من أجل تشغيله، سوف تحتاج إلى إنشاء تكوين التكميم OVWeightQuantizationConfig على النحو التالي:
from optimum.intel import OVModelForVisualCausalLM, OVWeightQuantizationConfig
q_config = OVWeightQuantizationConfig(bits=8)
q_model = OVModelForVisualCausalLM.from_pretrained(model_id, quantization_config=q_config)
q_model.save_pretrained("smolvlm_int8")
أو ما يعادله باستخدام CLI:
optimum-cli export openvino -m HuggingFaceTB/SmolVLM2-256M-Video-Instruct --weight-format int8 smolvlm_int8/
الخيار 2: التكميم الثابت
باستخدام التكميم الثابت، يتم تكميم كل من الأوزان والتنشيطات قبل الاستدلال. لتحقيق أفضل تقدير لمعلمات تكميم التنشيط، نقوم بإجراء خطوة معايرة. خلال هذه الخطوة، يتم تغذية مجموعة بيانات تمثيلية صغيرة من خلال النموذج. في حالتنا، سوف نستخدم 50 عينة من مجموعة البيانات السياقية وسنطبق التكميم الثابت على جهاز تشفير الرؤية بينما سيتم تطبيق التكميم بالوزن فقط على بقية النموذج. تظهر التجارب أن تطبيق التكميم الثابت على جهاز تشفير الرؤية يوفر تحسنًا ملحوظًا في الأداء دون انخفاض كبير في الدقة. نظرًا لأن جهاز تشفير الرؤية يتم استدعاؤه مرة واحدة فقط لكل جيل، فإن مكاسب الأداء الإجمالية من تطبيق التكميم الثابت على هذا المكون أقل من المكاسب التي يتم تحقيقها من خلال تحسين المكونات الأكثر استخدامًا مثل نموذج اللغة. ومع ذلك، يمكن أن يكون هذا النهج مفيدًا في بعض السيناريوهات. على سبيل المثال، عندما تكون هناك حاجة إلى إجابات قصيرة، خاصة مع وجود صور متعددة كمدخلات.
from optimum.intel import OVModelForVisualCausalLM, OVPipelineQuantizationConfig, OVQuantizationConfig, OVWeightQuantizationConfig
q_config = OVPipelineQuantizationConfig(
quantization_configs={
"lm_model": OVWeightQuantizationConfig(bits=8),
"text_embeddings_model": OVWeightQuantizationConfig(bits=8),
"vision_embeddings_model": OVQuantizationConfig(bits=8),
},
dataset=dataset,
num_samples=num_samples,
)
q_model = OVModelForVisualCausalLM.from_pretrained(model_id, quantization_config=q_config)
q_model.save_pretrained("smolvlm_static_int8")
تضيف عمليات التنشيط الكمية أخطاء صغيرة يمكن أن تتراكم وتؤثر على الدقة، لذا من المهم إجراء اختبار دقيق بعد ذلك. يمكن العثور على مزيد من المعلومات والأمثلة في وثائقنا.
الخطوة 3: تشغيل الاستدلال
يمكنك الآن تشغيل الاستدلال باستخدام النموذج الكمي الخاص بك:
generated_ids = q_model.generate(**inputs, max_new_tokens=100)
generated_texts = processor.batch_decode(generated_ids, skip_special_tokens=True)
print(generated_texts[0])
إذا كان لديك كمبيوتر محمول حديث من Intel أو كمبيوتر Intel AI أو وحدة معالجة رسومات منفصلة من Intel، فيمكنك تحميل النموذج على وحدة معالجة الرسومات عن طريق إضافة device="gpu" عند تحميل النموذج الخاص بك:
model = OVModelForVisualCausalLM.from_pretrained(model_id, device="gpu")
لقد أنشأنا أيضًا مساحة حتى تتمكن من اللعب بالنموذج الأصلي ومتغيراته الكمية التي تم الحصول عليها من خلال تطبيق تكميم الوزن فقط والتكميم المختلط على التوالي. يعمل هذا العرض التوضيحي على معالجات Intel Xeon (Sapphire Rapids) من الجيل الرابع.
لإعادة إنتاج نتائجنا، راجع دفتر ملاحظاتنا.
التقييم والاستنتاج
لقد أجرينا اختبارًا لمقارنة أداء إصدارات PyTorch وOpenVINO وOpenVINO 8-bit WOQ من النموذج الأصلي. كان الهدف هو تقييم تأثير تكميم الوزن فقط على زمن الوصول والإنتاجية على أجهزة Intel CPU. في هذا الاختبار، استخدمنا صورة واحدة كمدخل.
قمنا بقياس المقاييس التالية لتقييم أداء النموذج:
- الوقت حتى الرمز المميز الأول (TTFT): الوقت المستغرق لإنشاء أول رمز مميز للإخراج.
- الوقت لكل رمز إخراج (TPOT): الوقت المستغرق لإنشاء كل رموز الإخراج اللاحقة.
- زمن الوصول من النهاية إلى النهاية : إجمالي الوقت المستغرق لإنشاء المخرجات لجميع الرموز المميزة للمخرجات.
- إنتاجية فك التشفير: عدد الرموز المميزة في الثانية التي ينشئها النموذج أثناء مرحلة فك التشفير.
فيما يلي النتائج على وحدة المعالجة المركزية Intel:
| إعدادات | الوقت لأول رمز (TTFT) | رمز الوقت لكل إخراج (TPOT) | الكمون من النهاية إلى النهاية | فك التشفير الإنتاجية |
|---|---|---|---|---|
| pytorch | 5.150 | 1.385 | 25.927 | 0.722 |
| com.openvino | 0.420 | 0.021 | 0.738 | 47.237 |
| openvino-8bit-woq | 0.247 | 0.016 | 0.482 | 63.928 |
يوضح هذا المعيار مدى أداء النماذج الصغيرة والمتعددة الوسائط، مثل SmolVLM2-256M، على وحدات المعالجة المركزية Intel عبر تكوينات مختلفة. وفقًا للاختبارات، يُظهر إصدار PyTorch زمن وصول عاليًا، مع وقت للرمز المميز الأول (TTFT) يزيد عن 5 ثوانٍ مع إنتاجية فك تشفير تبلغ 0.7 رمزًا / ثانية. إن مجرد تحويل النموذج باستخدام Optimum وتشغيله على OpenVINO يقلل بشكل كبير من الوقت اللازم للوصول إلى الرمز المميز الأول (TTFT) إلى 0.42 ثانية (×12 تسريع) ورفع الإنتاجية إلى 47 رمزًا/ثانية (x65). يؤدي تطبيق تكميم الوزن 8 بت فقط إلى تقليل TTFT (x1.7) ويزيد الإنتاجية (x1.4)، مع تقليل حجم النموذج وتحسين الكفاءة.
تكوين المنصة
تكوين النظام الأساسي لمطالبات الأداء أعلاه:لوحة النظام: ام اس اي B860M جيمنج بلس واي فاي (MS-7E42)
وحدة المعالجة المركزية: إنتل® كور™ ألترا 7 265 كيلو بايت
المقابس/النوى المادية: 1/20 (20 موضوعًا)
إعدادات HyperThreading/Turbo: عاجز
ذاكرة: 64 جيجا بايت DDR5 بسرعة 6400 ميجا هرتز
TDP: 665 واط
BIOS: أمريكان ميجا ترندز انترناشيونال ذ.م.م. 2.A10
تاريخ إصدار BIOS: 28.11.2024
نظام التشغيل: أوبونتو 24.10
النواة: 6.11.0–25-عام
نسخة أوبن فينو: 2025.2.0
الشعلة: 2.8.0
رؤية الشعلة: 0.23.0 + وحدة المعالجة المركزية
إنتل الأمثل: 1.25.2
محولات: 4.53.3
التاريخ المعياري: 15.05.2025
تم قياسها بواسطة: قد يختلف أداء شركة Intel حسب الاستخدام والتكوين وعوامل أخرى. انظر تكوين النظام الأساسي أدناه.
روابط وموارد مفيدة
الإشعارات وإخلاء المسؤولية
يختلف الأداء حسب الاستخدام والتكوين وعوامل أخرى. تعرف على المزيد على موقع مؤشر الأداء. تعتمد نتائج الأداء على الاختبار اعتبارًا من التواريخ الموضحة في التكوينات وقد لا تعكس جميع التحديثات المتاحة للعامة. راجع النسخ الاحتياطي للحصول على تفاصيل التكوين. لا يمكن لأي منتج أو مكون أن يكون آمنًا تمامًا. قد تختلف تكاليفك ونتائجك. قد تتطلب تقنيات Intel تمكين الأجهزة أو البرامج أو تنشيط الخدمة. © شركة إنتل. إن Intel وشعار Intel وعلامات Intel الأخرى هي علامات تجارية مملوكة لشركة Intel Corporation أو الشركات التابعة لها.