تم تطويره باستخدام Databricks مع ❤️
مدونة تتناول إنشاء مزيج متناثر من نموذج لغة الرؤية المعتمد على الخبراء: https://huggingface.co/blog/AviSoori1x/seemoe يمكنك التفكير في هذا كإصدار مبسط من Grok 1.5/ GPT-4 Vision من الصفر، في نسخة واحدة ملف باي تورش. التنفيذ الموحد موجود في SeeMoE.py. دفتر الملاحظات هو SeeMoE_from_scratch.ipynb
المدونة التي تتناول هذا: https://avisoori1x.github.io/2024/04/22/seemore-_Implement_a_Vision_Language_Model_from_Scratch.html
https://huggingface.co/blog/AviSoori1x/seemore-vision-language-model
في هذا التنفيذ البسيط لنموذج لغة الرؤية (VLM)، هناك 3 مكونات رئيسية.
Image Encoder لاستخراج الميزات المرئية من الصور. في هذه الحالة، أستخدم تطبيقًا من الصفر لمحول الرؤية الأصلي المستخدم في CLIP. يعد هذا في الواقع خيارًا شائعًا في العديد من أجهزة VLM الحديثة. الاستثناء الوحيد الملحوظ هو سلسلة نماذج Fuyu من Adept، التي تمرر الصور المصححة مباشرة إلى طبقة العرض.
جهاز عرض لغة الرؤية - لا تكون تضمينات الصور بنفس شكل تضمينات النص التي تستخدمها وحدة فك التشفير. لذلك نحن بحاجة إلى "المشروع"، أي تغيير أبعاد ميزات الصورة المستخرجة بواسطة برنامج تشفير الصور لتتناسب مع ما يتم ملاحظته في مساحة تضمين النص. لذلك تصبح ميزات الصورة "رموزًا مرئية" لجهاز فك التشفير. يمكن أن تكون هذه طبقة واحدة أو MLP. لقد استخدمت MLP لأنه يستحق العرض.
نموذج فك التشفير للغة فقط. هذا هو المكون الذي يقوم بإنشاء النص في النهاية. في تطبيقي، انحرفت عما تراه في LLaVA وما إلى ذلك قليلاً عن طريق دمج وحدة العرض في وحدة فك التشفير الخاصة بي. عادةً لا يتم ملاحظة ذلك، وتترك بنية وحدة فك التشفير (والتي عادة ما تكون نموذجًا تم تدريبه مسبقًا) دون تغيير.
تم استعارة تطبيق الاهتمام الذاتي بالمنتج النقطي من تصميم Andrej Kapathy (https://github.com/karpathy/makemore). كما أن وحدة فك التشفير هي نموذج لغة انحداري ذاتي على مستوى الأحرف، تمامًا كما هو الحال في Makemore. الآن ترى من أين جاء الاسم "seemore" :)
كل شيء مكتوب من الألف إلى الياء باستخدام pytorch. يتضمن ذلك آلية الانتباه (لكل من جهاز تشفير الرؤية ووحدة فك تشفير اللغة)، وإنشاء التصحيح لمحول الرؤية وكل شيء آخر. نأمل أن يكون هذا مفيدًا لأي شخص يمر عبر الريبو و/أو المدونة المرتبطة به.
المنشورات المشار إليها بشكل كبير لهذا التنفيذ:
Seemore.py هو التنفيذ بأكمله في ملف واحد من pytorch.
Seemore_from_Scratch.ipynb يستعرض الحدس لبنية النموذج بأكملها وكيف يجتمع كل شيء معًا. أوصي بالبدء هنا.
Seemore_Concise.ipynb هو التنفيذ الموحد القابل للاختراق والذي أشجعك على اختراقه وفهمه وتحسينه وإنشاء تطبيقك الخاص
يوجد ملف input.txt مع tinyshakespear وتمثيلات السلسلة المشفرة base64 + الأوصاف المقابلة في ملف inputs.csv في دليل الصور.
يحتوي الدليل الفرعي للوحدات على كل مكون من المكونات الموجودة في ملف .py الخاص بهم من أجل الراحة (إذا اخترت اختراق القطع بشكل فردي/إعادة استخدامها لمشاريعك الخاصة وما إلى ذلك)
تم تطوير الكود بالكامل على Databricks باستخدام A100 واحد للحساب. إذا كنت تقوم بتشغيل هذا على Databricks، فيمكنك توسيع نطاق ذلك على مجموعة GPU كبيرة بشكل تعسفي دون أي مشاكل، على موفر السحابة الذي تختاره.
لقد اخترت استخدام MLFlow (الذي يأتي مثبتًا مسبقًا في Databricks. إنه مفتوح المصدر بالكامل ويمكنك تثبيته بسهولة في مكان آخر) حيث أجد أنه من المفيد تتبع وتسجيل جميع المقاييس الضرورية. هذا أمر اختياري تمامًا ولكن يتم تشجيعه.
يرجى ملاحظة أن التنفيذ يركز على سهولة القراءة وقابلية الاختراق مقابل الأداء، لذلك هناك العديد من الطرق التي يمكنك من خلالها تحسين ذلك. من فضلك حاول واسمحوا لي أن أعرف!
آمل أن تجد هذا مفيدا. القرصنة سعيدة!