قمت بتشغيل نموذج لغوي كبير محلي على Raspberry Pi عمره 12 عاماً (لقد نجح الأمر حقاً!)

BBetter Stack
Computing/SoftwareConsumer Electronics

Transcript

00:00:00هذا هو الجيل الأول من Raspberry Pi، والذي صدر في عام 2014.
00:00:05يحتوي على معالج أحادي النواة بتردد 700 ميجاهرتز وذاكرة وصول عشوائي (RAM) بسعة 512 ميجابايت.
00:00:12بالمقاييس الحديثة، هذا الجهاز هو مجرد آلة حاسبة تقريبًا.
00:00:16لكننا اليوم سنرى ما إذا كان بإمكاننا دفع هذه الأجهزة التي يبلغ عمرها 12 عامًا
00:00:21إلى أقصى حدودها من خلال تشغيل نموذج لغوي ضخم عليها محليًا.
00:00:26في هذا الفيديو، سأوضح لكم ما هو النموذج الصغير الذي يمكن تشغيله على Raspberry Pi،
00:00:30وسنرى كيفية أدائه، وسأوضح لكم كيفية تثبيت جميع الملحقات الضرورية
00:00:35حتى تتمكنوا من تجربته بأنفسكم.
00:00:37سيكون الأمر ممتعًا للغاية، لذا دعونا نبدأ.
00:00:40بصراحة، لم أكن أعتقد أنه من الممكن العثور على نموذج
00:00:47خفيف بما يكفي لهذه البنية المعمارية.
00:00:49ولكن بعد البحث المطول، وجدتُ مرشحاً بالفعل.
00:00:52تعرفوا على Falcon H1 Tiny.
00:00:54إنه نموذج مضغوط بشكل مذهل مع 90 مليون معلمة فقط.
00:00:59تم تطويره من قبل معهد الابتكار التكنولوجي في أبو ظبي
00:01:03خصيصًا لاستكشاف الحدود الدنيا القصوى لنماذج اللغة.
00:01:08لكن كيف استطاعوا صنع نموذج بهذا الصغر؟
00:01:10هل هناك نوع من “الخلطة السرية” التقنية وراء ذلك؟
00:01:13حسنًا، ليس تمامًا.
00:01:14إنهم يستخدمون أساسًا نفس البنية الهجينة (Transformer + Mamba)
00:01:19التي استخدمتها شركات مثل IBM في نماذج Granite 4 الصغيرة.
00:01:24والتي قمت بعمل فيديو عنها أيضًا إذا كنتم ترغبون في مشاهدته.
00:01:27لكن إليكم الأمر.
00:01:28لحشر هذا النموذج بنجاح في الذاكرة، يجب أن نتحدث عن التكميم (Quantization).
00:01:33تتوفر نماذج Falcon بنسخ 2-بت، و4-بت، و8-بت.
00:01:38قد تميلون لتجربة تكميم الأهمية (IQ) فائق النحافة.
00:01:43لكن هنا تكمن المشكلة.
00:01:45تعتمد تلك الأساليب الحديثة على معالجة معقدة للبتات
00:01:49تتطلب تعليمات معالج حديثة لتكون فعالة.
00:01:52على شريحة ARMv6 القديمة في جهاز Raspberry Pi، لن يفلح ذلك.
00:01:57لذا بدلاً من ذلك، علينا اختيار نماذج Q4 التقليدية
00:02:01وهي المعيار الذهبي لحالتنا هذه.
00:02:04فهي تستخدم طريقة تكميم قديمة متوسطة الحجم
00:02:07يمكن لمعالج Pi التعامل معها بالفعل دون اختناق.
00:02:11فهي تمنحنا أفضل نسبة ذكاء لكل ميجابايت مع الحفاظ على سلامة المنطق.
00:02:17لكن تشغيل هذا النموذج على الجيل الأول من Raspberry Pi ليس مهمة سهلة.
00:02:22بما أن Pi يستخدم بنية ARMv6،
00:02:26فهو يفتقر لتعليمات neon الحديثة التي تعتمد عليها معظم مكتبات الذكاء الاصطناعي.
00:02:31لكن لحسن الحظ، هناك llama.cpp الذي يمكننا استخدامه لتشغيل الاستدلال.
00:02:36ولكن للقيام بذلك، يجب علينا تجميع الملف الثنائي (binary) خصيصًا لـ ARMv6.
00:02:42وإذا حاولت تجميعه مباشرة على Pi،
00:02:45فقد يستغرق المجمع 18 ساعة لإنهاء العملية.
00:02:49هذا في حال لم يتوقف بسبب أخطاء نقص الذاكرة أولاً.
00:02:53لذا لتجاوز ذلك، يجب أن نكون مبدعين قليلاً.
00:02:56نحتاج إلى التجميع العابر (cross-compile) لهذه الملفات على الكمبيوتر المحمول مسبقًا باستخدام dockcross،
00:03:02مستهدفين مجموعة تعليمات ARMv6 مع تفعيل وحدة الحساب VFP
00:03:08ثم نسخها عبر SSH حتى نتمكن من البدء مباشرة في الاستدلال.
00:03:13وهذا بالضبط ما سنفعله الآن.
00:03:15أولاً، نحتاج لتثبيت أخف نظام تشغيل ممكن على جهاز Pi باستخدام Raspberry Pi imager.
00:03:22بالنسبة للوحة بها 512 ميجابايت فقط من الذاكرة، كل ميجابايت له قيمته.
00:03:28لذا سأختار Raspberry Pi OS Lite، نسخة 32-بت،
00:03:32لأنها لا تحتوي على واجهة سطح مكتب وتستهلك جزءًا ضئيلاً من الذاكرة
00:03:38مقارنة بالنظام القياسي، مما يترك كامل الذاكرة تقريبًا متاحة للنموذج.
00:03:44وهنا ملاحظة مهمة أخرى، تأكد من استخدام الإعدادات المتقدمة
00:03:47لتهيئة الواي فاي مسبقًا وتفعيل SSH.
00:03:51لأنه في هذه اللوحات القديمة، من الأسهل إدارة كل شيء عن بعد،
00:03:55حتى لا تضطر للتعامل مع تلك المحطة الطرفية المحلية البطيئة.
00:03:58الآن، بمجرد تشغيل Pi وتسجيل الدخول عبر SSH، نحتاج لمعالجة مشكلة ARMv6.
00:04:05فإذا حاولنا تجميع llama CPP هنا،
00:04:08سيقضي جهاز Pi اليوم ونصف القادم في معالجة ملفات الترويسة فقط.
00:04:13بدلاً من ذلك، سنقوم بذلك على كمبيوتر محمول عادي لتسريع الحساب وتوفير الوقت.
00:04:18لذا دعونا نستنسخ الكود المصدري لـ llama CPP وننشئ مجلد بناء مخصص
00:04:23حيث سنقوم بتخزين النسخة التي سنستخدمها على Raspberry Pi.
00:04:28والآن، هناك مشكلة أخرى.
00:04:29جهاز الماك الخاص بي يستخدم ARMv8، وهي نسخة 64-بت، وليس ARMv6 بنسخة 32-بت.
00:04:37ولهما مجموعات تعليمات مختلفة.
00:04:40لذا لتجميع ملف ثنائي لـ Pi، نحتاج لاستخدام dockcross،
00:04:45وهي سلسلة أدوات تجميع عابر تعمل على الماك الخاص بي،
00:04:48لكنها تولد ملفات ثنائية مخصصة لبنية Pi القديمة.
00:04:53بعد ذلك، نحتاج إلى تهيئة البناء.
00:04:55وهنا يجب أن نكون دقيقين للغاية.
00:04:58نحتاج لتمرير بعض العلامات (flags) المحددة للغاية.
00:05:00أولاً، يجب إيقاف المكتبات المشتركة لإنشاء ملف ثنائي واحد محمول.
00:05:05ثم يجب إيقاف neon لأن Pi يفتقر لتلك التعليمات الحسابية الحديثة.
00:05:10ويجب تعطيل OpenMP لتقليل استهلاك الذاكرة قدر الإمكان.
00:05:15نحن أساسًا نجرد البرنامج من كل الرفاهيات الحديثة
00:05:18لضمان توافق الملف الثنائي مع لوحة Pi القديمة.
00:05:22والآن إذا ضغطنا على بناء، في غضون دقيقتين تقريبًا، سيكون لدينا
00:05:26ملف llama ثنائي مجمع ومحسن وجاهز للنسخ على لوحة Pi.
00:05:31والآن سأستخدم SSH للاتصال مباشرة بـ Pi عبر الشبكة
00:05:35وإنشاء مجلد جديد، ثم استخدام SCP لنسخ الملف الثنائي المخصص إليه.
00:05:42وشيء أخير نحتاج للقيام به هنا.
00:05:44دعونا نقوم بتحميل نماذج Falcon المكممة تقليديًا بنسخ 2-بت و4-بت و8-بت،
00:05:50لأننا سنختبرها جميعًا بالتتابع.
00:05:53ثم نقوم بنسخها إلى Pi واحدًا تلو الآخر عبر الشبكة في مجلد النماذج.
00:05:58الآن نأتي للجزء الممتع.
00:05:59دعونا ننتقل إلى Pi وننفذ أول اختبار استدلال.
00:06:03سنبدأ بأكثر ضغط هجومي، وهو نموذج 2-بت المكمم.
00:06:07وهنا نحتاج لتشغيل هذا الأمر الطويل.
00:06:10وبشكل أساسي، ما أفعله هنا هو إعطاؤه أمرًا بسيطًا:
00:06:13“مرحباً، كيف حالك؟” مع تحديد المخرجات بـ 32 رمزاً (tokens).
00:06:18ونقوم بتحديد خيط معالجة واحد فقط، لأن هذا كل ما نملكه.
00:06:22ونحافظ أيضًا على حجم سياق صغير عند 128 رمزًا لتوفير كل بايت ممكن من الذاكرة.
00:06:29لكن العلامة الأكثر أهمية هنا هي no M map.
00:06:32عادةً، يستخدم llama CPP تعيين الذاكرة لتحميل النماذج، وهو أمر رائع لمعالجات الرسوميات القوية،
00:06:38لكنه كابوس للوحة Pi الخاصة بنا.
00:06:41على نظام 32-بت بذاكرة وصول عشوائي 512 ميجابايت فقط،
00:06:45يمكن أن يفشل M map إذا لم يجد كتلة متصلة من مساحة العناوين.
00:06:50لذا بتعطيله، نجبر النموذج على التحميل مباشرة في الذاكرة الحرة (heap)،
00:06:55مما يمنحنا تحكمًا أكثر استقرارًا في ذاكرتنا المحدودة.
00:06:58ومع ذلك، دعونا نشغل الأمر.
00:07:00وها هي ذي، أولى رموزنا.
00:07:03كما نرى هنا، نسخة 2-بت تعاني كثيراً.
00:07:08أولاً، نلاحظ أنها تعالج رمزاً واحداً كل ثلاث ثوانٍ تقريباً،
00:07:14وهو أمر متوقع على لوحة Raspberry Pi قديمة.
00:07:18لكن الأهم من ذلك، أن الإجابة مجرد هراء محض.
00:07:21في نموذج بـ 90 مليون معلمة، تكون الأوزان مضغوطة للغاية
00:07:25لدرجة أن المنطق اللغوي قد انهار تمامًا.
00:07:28إنه غير مترابط بالكاد، لكنه من الناحية التقنية يعمل.
00:07:32الآن دعونا نرى ما سيحدث إذا استبدلناه بنموذج 4-بت.
00:07:35انظروا إلى ذلك، الآن حصلنا على تحية مترابطة.
00:07:40هذا نجاح بالفعل.
00:07:42لدينا الآن نموذج ذكاء اصطناعي فعلي يعمل محليًا على Pi
00:07:47ويستجيب بشكل منطقي لأوامرنا.
00:07:49رائع!
00:07:50الآن دعونا نذهب لأبعد من ذلك.
00:07:53لنرى ما إذا كان بإمكان Pi التعامل مع نموذج 8-بت.
00:07:56وهذه المرة سأسأله شيئاً أكثر ذكاءً،
00:07:59مثل ما هي عاصمة ألبانيا؟
00:08:02حسنًا، هذا خطأ لأن عاصمة ألبانيا هي تيرانا
00:08:08وهذا بوضوح غير صحيح من الناحية الواقعية.
00:08:10لكن إذا سألت ما هي عاصمة بلجيكا، فإنه يجيب بشكل صحيح.
00:08:15وهذا يوضح لنا أمراً مثيراً للاهتمام.
00:08:17يبدو أن تقليص المعلمات إلى 90 مليونًا يأتي بتكلفة.
00:08:22قد يمتلك معرفة دقيقة عن الدول الكبيرة والأكثر شهرة،
00:08:26لكنه يفتقر للمعرفة عن الدول الأقل شهرة وربما المواضيع الأقل تداولاً.
00:08:31وهذه هي طبيعة المعرفة ببساطة.
00:08:33هناك قدر محدود من المعلومات التي يمكنك وضعها في 90 مليون معلمة.
00:08:38ومع ذلك، النتيجة رائعة حقاً.
00:08:41وهذا تأكيد على أنه نعم، توجد بالفعل نماذج ذكاء اصطناعي صغيرة بما يكفي
00:08:46وخفيفة بما يكفي لتعمل على Raspberry Pi عمره 12 عاماً.
00:08:50هل هو سريع؟
00:08:51بالتأكيد لا.
00:08:52هل هو دقيق؟
00:08:53قد لا يكون كذلك.
00:08:54هل يجب استخدامه في بيئة العمل؟
00:08:55على الأرجح لا.
00:08:57إلا إذا كنت تريد بناء روبوت بطيء للغاية.
00:09:02لكن الأهم من ذلك، أننا نعرف الآن أنه ممكن نظرياً.
00:09:06وهذا أساساً كل ما أردت إثباته في هذا الفيديو.
00:09:09ولأكون صادقاً، كانت هذه التجربة ممتعة للغاية.
00:09:13ها أنتم ذا يا رفاق.
00:09:14هذه هي نماذج Falcon H1 Tiny.
00:09:17ربما تكون أصغر نماذج ذكاء اصطناعي موجودة حالياً.
00:09:20ونحن نعلم الآن أنها صغيرة بما يكفي لتعمل على الجيل الأول من Raspberry Pi،
00:09:25وهو أمر رائع جداً.
00:09:27لا أستطيع التوقف عن الاحتفال بمدى روعة هذه الحقيقة.
00:09:30على الرغم من أن التطبيق العملي لها غير مفيد، إلا أنها لا تزال رائعة.
00:09:35أخبروني يا رفاق إذا كانت لديكم أي أفكار مضحكة،
00:09:37تعليقات أو ملاحظات حول ما شهدتموه للتو.
00:09:40اكتبوها في قسم التعليقات بالأسفل.
00:09:42ويا رفاق، إذا أعجبتكم هذه الأنواع من التحليلات التقنية،
00:09:45يرجى إخباري من خلال الضغط على زر الإعجاب أسفل الفيديو.
00:09:49ولا تنسوا أيضاً الاشتراك في قناتنا.
00:09:51كان معكم أندريس من Better Stack، وسأراكم في الفيديوهات القادمة.

Key Takeaway

يمكن تشغيل نموذج لغوي كبير محلياً على جهاز Raspberry Pi عمره 12 عاماً عبر استخدام نموذج Falcon H1 Tiny المكون من 90 مليون معلمة وبتكميم Q4 تقليدي، مع تجميع الملف الثنائي عابراً باستخدام dockcross وتعطيل خاصية M map لضمان الاستقرار داخل ذاكرة حجمها 512 ميجابايت.

Highlights

  • يحتوي جهاز Raspberry Pi من الجيل الأول الصادر في عام 2014 على معالج أحادي النواة بتردد 700 ميجاهرتز وذاكرة وصول عشوائي بسعة 512 ميجابايت فقط.

  • يعتمد نموذج Falcon H1 Tiny على بنية هجينة تدمج بين Transformer و Mamba ويحتوي على 90 مليون معلمة فقط لاستكشاف الحدود الدنيا للنماذج اللغوية.

  • تتطلب أساليب تكميم الأهمية الحديثة مثل IQ تعليمات معالج متطورة تفتقر إليها شريحة ARMv6 القديمة، مما يجعل تكميم Q4 التقليدي هو الخيار المتوافق دون حدوث اختناق للمعالج.

  • يستغرق تجميع كود llama.cpp مباشرة على جهاز Raspberry Pi القديم حوالي 18 ساعة، وقد يفشل تماماً بسبب أخطاء نقص الذاكرة.

  • يؤدي تعطيل ميزة تعيين الذاكرة باستخدام العلامة no M map إلى إجبار النموذج على التحميل مباشرة في الذاكرة الحرة، مما يمنع فشل التشغيل على نظام 32-بت بذاكرة 512 ميجابايت.

  • ينهار المنطق اللغوي تماماً في نسخة التكميم 2-بت لنموذج Falcon H1 Tiny حيث تعالج رمزاً واحداً كل ثلاث ثوانٍ وتنتج نصوصاً غير مفهومة، بينما تنجح نسخة 4-بت في تقديم استجابات مترابطة.

Timeline

مواصفات الأجهزة القديمة وتحديات النماذج اللغوية المحلية

  • يمتلك الجيل الأول من جهاز Raspberry Pi الصادر عام 2014 مواصفات محدودة للغاية تشابه الآلات الحاسبة بالمقاييس الحديثة.
  • يتكون العتاد التقني للجهاز القديم من معالج أحادي النواة يعمل بتردد 700 ميجاهرتز وذاكرة عشوائية تبلغ 512 ميجابايت.
  • يستهدف الاختبار دفع حدود هذه الأجهزة القديمة عبر تشغيل نموذج لغوي ضخم عليها بشكل محلي بالكامل.

تمثل مواصفات الجيل الأول من Raspberry Pi عائقاً كبيراً أمام تطبيقات الذكاء الاصطناعي الحديثة. تفرض الذاكرة التي لا تتجاوز 512 ميجابايت قيوداً صارمة على حجم البيانات التي يمكن معالجتها في وقت واحد. يهدف هذا الإجراء التقني إلى اختبار مدى إمكانية تطويع البرمجيات المعقدة لتعمل بيسر على عتاد قديم وضغطه إلى أقصى حدوده الممكنة.

بنية نموذج Falcon H1 Tiny واختيار طريقة التكميم المناسبة

  • يعد Falcon H1 Tiny نموذجاً لغوياً مدمجاً للغاية يحتوي على 90 مليون معلمة فقط صممه معهد الابتكار التكنولوجي في أبو ظبي.
  • يعتمد النموذج على بنية هجينة تجمع بين Transformer و Mamba لتقليص الحجم مع الحفاظ على كفاءة الأداء.
  • يتطلب تشغيل النموذج على بنية ARMv6 القديمة استخدام تكميم Q4 التقليدي بدلاً من أساليب تكميم الأهمية الحديثة.

تتطلب عملية حشر النموذج اللغوي في ذاكرة الجهاز المحدودة آلية تكميم دقيقة. تتوفر نماذج Falcon بنسخ مختلفة تشمل 2-بت و 4-بت و 8-بت. تفشل طرق تكميم الأهمية الحديثة على شريحة ARMv6 لأنها تحتاج إلى تعليمات معالجة معقدة وحديثة غير متوفرة في اللوحة القديمة، مما يجعل تكميم Q4 التقليدي المعيار الذهبي لتوفير أفضل نسبة ذكاء لكل ميجابايت دون خنق المعالج.

التجميع العابر لبرمجيات الاستدلال وتجهيز نظام التشغيل الأقل استهلاكاً

  • تفتقر شريحة ARMv6 إلى تعليمات neon الحديثة التي تعتمد عليها معظم مكتبات الذكاء الاصطناعي لتشغيل العمليات الحسابية.
  • يتطلب تجميع ملف llama.cpp الثنائي استخدام التجميع العابر على جهاز كمبيوتر خارجي لتفادي استغراق 18 ساعة من المعالجة على اللوحة مباشرة.
  • يوفر نظام التشغيل Raspberry Pi OS Lite نسخة 32-بت الخالية من واجهة سطح المكتب أكبر مساحة ممكنة من الذاكرة الحرة للنموذج.

يتسبب محاولة تجميع الكود المصدري على جهاز Raspberry Pi مباشرة في توقف العملية أو استهلاك وقت طويل جداً بسبب نقص الذاكرة العشوائية الحرة. يجري حل هذه المشكلة عبر استخدام أداة dockcross على جهاز حاسوب محمول لبناء ملف ثنائي متوافق مع بنية ARMv6 ووحدة الحساب VFP. يساهم تفعيل SSH والواي فاي مسبقاً عبر الإعدادات المتقدمة في إدارة اللوحة عن بعد وتجنب تباطؤ المحطة الطرفية المحلية.

إعداد ملفات البناء المخصصة وإلغاء الرفاهيات البرمجية الحديثة

  • تختلف مجموعات التعليمات بين معالجات ARMv8 الحديثة بنظام 64-بت ومعالجات ARMv6 القديمة بنظام 32-بت.
  • يضمن تمرير علامات بناء محددة تجريد البرنامج من الميزات الحديثة لضمان التوافقية الكاملة مع اللوحة القديمة.
  • ينتقل الملف الثنائي المجمع والنماذج المكممة إلى جهاز Raspberry Pi عبر الشبكة باستخدام بروتوكولات SSH و SCP.

يتطلب تهيئة بناء البرمجيات إيقاف المكتبات المشتركة لإنشاء ملف ثنائي واحد محمول وقابل للتشغيل المباشر. يتضمن ذلك تعطيل تعليمات neon الحسابية وإلغاء تفعيل OpenMP لتقليل استهلاك الذاكرة العشوائية إلى أدنى حد ممكن. تستغرق عملية البناء عبر dockcross دقيقتين فقط، تليها عملية نقل ملفات النماذج المكممة بنسخ 2-بت و 4-بت و 8-بت لاختبارها بالتتابع.

نتائج اختبارات الاستدلال وتقييم أداء النسخ المكممة ومحدودية المعرفة

  • يمنع تعطيل تعيين الذاكرة عبر علامة no M map فشل النظام الحسابي ويجبر النموذج على التحميل في الذاكرة الحرة المستقرة.
  • ينتج نموذج 2-بت المكمم نصوصاً غير مترابطة وبسرعة بطيئة تعادل رمزاً واحداً كل ثلاث ثوانٍ بسبب الضغط الشديد للأوزان.
  • يقدم نموذج 4-بت استجابات منطقية ومترابطة، في حين يظهر نموذج 8-بت دقة في المعلومات العامة مع قصور واضح في تفاصيل الدول والمواضيع الأقل شهرة.

يعالج الأمر البرمجي طلباً بسيطاً بحجم سياق محدود عند 128 رمزاً وتحديد خيط معالجة واحد لتوفير الطاقة الحسابية. يظهر الاختبار أن تقليص المعلمات إلى 90 مليوناً يؤثر سلباً على حجم المعرفة المخزنة، حيث يعجز النموذج عن تحديد عاصمة ألبانيا بشكل صحيح بينما ينجح في تحديد عاصمة بلجيكا. تثبت التجربة نجاح تشغيل نماذج الذكاء الاصطناعي نظرياً على عتاد قديم جداً، رغماً عن عدم جدواها العملية في بيئات العمل الحقيقية نظراً لبطئها الشديد.

Community Posts

No posts yet. Be the first to write about this video!

Write about this video