صورة الغلاف بواسطة جيسون ليونج على Unsplash
هذه هي المقالة الأولى في العديد من منشورات "لماذا قمت بإنشاء" والتي تشرح سبب إنشاء جزء من البرنامج والتعمق أكثر في التحسينات المستقبلية.
اليوم، سأركز على مشروعي الأكثر شعبية، TabbyAPI. TabbyAPI هو خادم FastAPI يعتمد على لغة بايثون ويسمح للمستخدمين بالتفاعل مع نماذج اللغات الكبيرة (أو LLMs) باستخدام مكتبة ExllamaV2 ويلتزم بمواصفات OpenAI API.
إذا لم تكن متأكدًا مما تعنيه أي من هذه الكلمات، فأنت لست في مجال الذكاء الاصطناعي. لكن لا بأس! تهدف هذه المقالة إلى شرح تجربتي دون إلقاء كامل مصطلحات الذكاء الاصطناعي عليك.
دعني أعود إلى نوفمبر 2023. كان الذكاء الاصطناعي مزدهرًا، وكانت الشركات تطلق نماذج من اليسار واليمين، ويبدو أن قطار الضجيج ليس له نهاية. يبدو أنني أتحدث عن فترة زمنية كانت في العصور القديمة، ولكن في ذلك الوقت، كان كل يوم يبدو وكأنه شهر كامل من الابتكار.
في ظل هجمة هذه التقنيات الجديدة، ركزت على تشغيلها باستخدام جهاز 3090ti التافه. نعم، تافهة هي الكلمة الصحيحة التي يجب استخدامها نظرًا لأن 24 جيجابايت من VRAM في بطاقة الرسومات هي مستوى الدخول لتشغيل معظم نماذج الذكاء الاصطناعي. في هذا الوقت، كان تشغيل الإصدارات الكمية من النماذج هو القاعدة. يشبه التكميم الضغط الذي يسمح للمستخدمين بتشغيل هذه النماذج الضخمة على وحدات معالجة الرسومات الاستهلاكية.
كان التنسيق الذي أحببته هو exl2، وهو تنسيق يركز على السرعة والتحسين والحصول على أكبر قدر ممكن من بطاقة الرسومات. وكانت الرموز تتولد بسرعة الصوت. إذن هذا التنسيق رائع! ما هي المشكلة؟
المشكلة هي تشغيل النموذج. يعد Exl2 جزءًا من مكتبة ExllamaV2، ولكن لتشغيل نموذج، يحتاج المستخدم إلى خادم API. كان الخيار الوحيد المتاح هو استخدام Text-Generation-webui (TGW)، وهو برنامج يجمع كل أداة تحميل موجودة في Gradio webui. Gradio هو إطار عمل شائع لواجهة المستخدم "لبنة البناء" لتطوير لغة python وغالبًا ما يستخدم لتطبيقات الذكاء الاصطناعي. كان هذا الإعداد جيدًا لفترة من الوقت، حتى لم يعد كذلك.
في الأساس، كان السبب الرئيسي لإنشاء Tabby هو الإزعاج. لقد تعبت من حجم العمل المطلوب لتحميل نموذج واحد. ناهيك عن النفقات العامة من Gradio والكم الهائل من التبعيات من TGW. أنا أحترم المطور، ولكن على الرغم من أن TGW مفيد للعديد من الأشخاص الذين يريدون حلاً شاملاً، إلا أنه لم يكن جيدًا بالنسبة لي.
تصوير جلين كارستينز بيترز على Unsplash
أمر بسيط. قم بإنشاء خادم API يمكن تثبيته على جهاز الكمبيوتر الخاص بي ولا يتطلب تشغيله قدرًا كبيرًا من الانتفاخ. يبدو ذلك سهلاً، لكن هل يمكنني فعل ذلك فعلاً؟ ليس لدي خبرة كبيرة في نظرية نماذج الذكاء الاصطناعي، لكن لدي خبرة كبيرة في إنشاء خوادم الواجهة الخلفية وفهم تصميم واجهة برمجة التطبيقات.
لذلك كنت بحاجة إلى شخص ما للمساعدة، ولكن من؟ أدخل Turboderp، الشخص الذي يقف وراء ExllamaV2. إنه يعرف إلى حد كبير كل شيء وراء كيفية عمل النماذج منذ أن أنشأ المكتبة، وهو ما يعد اقترانًا رائعًا بمعرفتي بواجهة برمجة التطبيقات (API). بالإضافة إلى ذلك، انضم شخص آخر مهتم اسمه Splice نظرًا لخبرته مع Python. معًا، أنشأنا ثلاثتنا TabbyAPI.
ولكن هل كانت الخطة بهذه البساطة حقًا؟ حسنا، نوعا ما. بينما كان لدي الأشخاص المناسبون لهذه الوظيفة، كانت معرفتي في خوادم Python وAPI في الأساس 0. وانتهى بي الأمر باستخدام إطار عمل خادم الويب المسمى FastAPI مما جعل حياتي أسهل بكثير. كما أنها تحظى بشعبية كبيرة في مجتمع بايثون وموثقة جيدًا.
بعد استخدام FastAPI لبضعة أيام، أصبحت مدمنًا على كتابة كود خادم الويب بايثون. الوثائق جيدة جدًا، وهناك العديد من الأمثلة عبر الإنترنت، والمطورون يتقبلون التعليقات. بشكل عام، المجتمع مرحب به وأرغب في استخدام لغة بايثون للتواصل كثيرًا.
بعد بضعة أسابيع، شعرت أن كل شيء جاهز للنشر العام وقررت نشر كل شيء بأفضل طريقة أعرفها. YOLO وادفع كل شيء إلى GitHub.
عند إطلاق مشروع مفتوح المصدر للعالم، توقع مشكلات... الكثير من المشكلات. لدى الأشخاص دائمًا حالات استخدام لا تتناسب معها الأداة المساعدة. نظرًا لأن Tabby هو خادم خلفي، فقد ظهرت العديد من هذه الحالات. في هذا المنشور، سأذكر فقط بعض الأشياء التي كان من الصعب علي التعامل معها في البداية.
كانت نقطة الألم الكبيرة هي أنني أطلقت سراح Tabby في منتصف دورة الضجيج RAG. يرمز RAG إلى "الجيل المعزز للاسترجاع"، أو استخدام مستندات خارجية بالإضافة إلى معرفة LLM عند الحصول على رد. كانت المشكلة أن هذه التقنيات الجديدة (مثل استدعاء الوظائف) تحتاج إلى نقاط نهاية مختلفة تمامًا لواجهة برمجة التطبيقات (API) وطرق لإنجاز المهام.
علاوة على ذلك، لا يوجد سوى القليل من الوثائق حول كيفية عمل هذه الميزات فعليًا على الواجهة الخلفية. حتى يومنا هذا، لم أقم بتنفيذ استدعاء أداة OpenAI لأنه ليس لدي أي فكرة عن كيفية عملها. يعد الافتقار إلى التوثيق أمرًا شائعًا للأسف في عالم الذكاء الاصطناعي، وهو يعيق قدرة المطورين على تنفيذ التعليمات البرمجية في مشاريعهم دون جمع الكثير من المعلومات مسبقًا.
المشكلة الأخرى التي استمرت لعدة أشهر هي إنشاء متعدد المستخدمين. لقد اتضح أن التعامل مع الاستعلامات الموزعة على الخادم ليس موضوعًا سهلاً للمطور للعمل معه. يوفر FastAPI الدعم لهذا النوع من عبء العمل، ولكن تمت كتابة Tabby باستخدام تعليمات برمجية متزامنة. وهذا يعني أنه كان عليّ أن أتعلم البرمجة غير المتزامنة في لغة بايثون (وهو أمر ليس بالأمر السهل على المدى الطويل).
أسوأ ما في الأمر هو أن مطوري الذكاء الاصطناعي لا يحبون لغة بايثون غير المتزامنة بينما تتبناها خوادم الشبكات. ما يعنيه هذا هو أنه كان علي أن أتعلم كيفية التواصل بين المكتبات غير المتزامنة والمتزامنة في شكل ترابط. يعد هذا غوصًا أعمق في فهم مشكلات الترابط في بايثون وسبب وجود النموذج غير المتزامن في المقام الأول. سأتناول كل هذا في مدونة أخرى، ولكن آمل أن يوضح هذا مقدار التعلم الذي كان علي القيام به خلال فترة تتراوح بين شهرين وثلاثة أشهر أثناء محاربة هذه المشكلات.
في النهاية، عملت أنا وتوربو معًا لإنشاء مولد أفضل في مكتبة ExllamaV2 والذي أدى إلى تجريد جميع مشاكل المستخدمين المتعددين والأخطاء الغريبة من مكتبات الخيوط. بعد 9 أشهر، من الآمن أن نقول أن Tabby أصبح أخيرًا برنامجًا مستقرًا لتشغيل النماذج.
تصوير آني سبرات على Unsplash
خلال فترة تطوير البرمجيات بأكملها، لم أواجه مطلقًا فترة إرهاق. من الصعب تصديق ذلك نظرًا لأن الإرهاق أمر شائع في عالم البرمجيات، لكنني كنت أرغب دائمًا في برمجة شيء ما على مدار السنوات الستة الماضية. البرمجة هي هوايتي المفضلة وتساعدني على الهروب من ضغوط اليوم.
ومع ذلك، قام تابي ومجتمع الذكاء الاصطناعي بشكل عام بتغيير الأمور. في البداية، قمت بتكوين الكثير من الأصدقاء والأشخاص الذين لديهم اهتمامات مشتركة في استكشاف مجال الذكاء الاصطناعي المزدهر. اعتاد مجتمعي على المشاركة في المكالمات الصوتية كل يوم تقريبًا، وكان يركز على مشاركة المشاريع والأفكار حول كل ما هو جديد في هذا المجال. لقد جعل التطوير أمرًا ممتعًا وممتعًا منذ أن تمكنت من قضاء الوقت مع الأشخاص ذوي التفكير المماثل ومشاركة الأفكار الجديدة.
لسوء الحظ، بدأت تلك المكالمات الصوتية تضم عددًا أقل من الأشخاص وحدثت بشكل أقل. لقد كنت أيضًا تحت ضغط كبير بسبب إنهاء سنتي الأولى في كلية الطب. في عالم الإنترنت، كانت هذه فترة كبيرة من الوحدة بالنسبة لي، وشعرت أن تطوير تابي كان بمثابة عبء على حياتي كطالبة في الطب. وفي نهاية المطاف، بلغت هذه الأحداث ذروتها في كرة كبيرة من الإحباط والتعب. ولحل هذه المشكلة، قررت أن آخذ استراحة لأجل غير مسمى من الذكاء الاصطناعي.
خلال إجازتي، قضيت وقتًا بعيدًا عن تابي وقضيت وقتًا أطول في الاستمتاع بإجازتي الصيفية. لقد عملت بالفعل على بعض مشاريع تطبيقات iOS القديمة وقضيت وقتًا مع عائلتي. في الوقت الحاضر، أعود إلى تطوير Tabby مرة أخرى. من المحتمل أن تلك المكالمات الصوتية التي اعتدت المشاركة فيها لن تحدث لفترة طويلة بسبب تلاشي ضجيج الذكاء الاصطناعي. إنها حبة دواء صعبة التقبل، لكنني وجدت دوافع مختلفة لمواصلة التطوير.
كان Tabby أول مشروع LLM قمت به على الإطلاق. لقد أصبح بطريقة ما اسمًا شائعًا داخل المجتمع وتم إلقائي في النهاية العميقة للإدارة. مع العلم بذلك، إليك بعض الأفكار التي تعلمتها من هذه التجربة.
اعرف من تريد تلبية احتياجاته: يمكن لأي شخص استخدام مشروع مفتوح المصدر. بالنسبة إلى Tabby، أعطي الأولوية للميزات التي ستفيدني وأصدقائي ونفسي من خلال سهولة استخدام المشروع. ومن خلال مراقبة هذه الفلسفة، يمكنني إدارة جدول أعمالي وسأعرف الميزات التي يجب العمل عليها.
افهم حدودك: الإرهاق ليس أمرًا ممتعًا. لا تفعل ما فعلته وأجهد نفسك لأن المستخدم يواجه مشكلة للمرة الألف. إذا ظهرت مشاعر الإحباط أو الغضب أو الملل، خذ قسطًا من الراحة. من الجيد الاسترخاء من حين لآخر.
لا تتراجع عن الجميع: قد تبدو الفكرة جيدة عند تقديمها لأول مرة، لكن الناس لا يفهمون أن المطور يحتاج إلى الحفاظ على هذه الميزة بعد ذلك. إذا كان الأمر مؤلمًا ولم يتم استخدامه كثيرًا، فلن تتم المحافظة على الميزة وستصبح ديونًا تقنية. تذكر أن الغرباء العشوائيين على الإنترنت لديهم دائمًا أفكار. الأمر متروك لك أو لفريقك لتحديد الأشخاص الذين ستخصص لهم القدرات العقلية.
أنشئ شيئًا تحبه وتستمتع به: غالبًا ما يفقد المطورون الاستمتاع بالمشروع لأن صيانته قد تكون مزعجة وتستغرق وقتًا طويلاً. وينطبق هذا بشكل خاص إذا لم يعد المطور يستخدم المشروع بشكل نشط. اكتشف دوافعك، وإذا تغيرت، فلا بأس.
ربما سأشرح هذه الأمور بالتفصيل في مقال آخر نظرًا لأن هذا يمكن أن يكون موضوعًا خاصًا به، لكنني أشعر أن العمل على Tabby قد أعطاني المزيد من الأفكار حول الطريقة التي أريد أن تعمل بها مشاريعي. بالإضافة إلى ذلك، تم توسيع معرفتي بمجتمع المصادر المفتوحة.
أنا ممتن لجميع الأشخاص الذين يساهمون ويقدمون اقتراحات يوميًا لتحسين كل من TabbyAPI وExllamaV2. يساعد الجميع في تحسين البرامج وتحسينها لتعمل بشكل أفضل للاستخدام العام. أنا شخص واحد وتقديم المساعدة يستهلك الكثير من اهتماماتي.
في المستقبل المنظور، سأقوم بتقليص مقدار العمل الذي أقوم به على تابي. لا يزال المشروع مستمرًا بقوة والكثيرون ملتزمون بتحسينه، لكن صحتي العقلية أكثر أهمية وأخذ فترات راحة سيساعد في ذلك.
شكرًا لقراءة هذا المعرض الاستعادي. إذا كنت تريد معرفة المزيد عني وعن ما أقوم به، يرجى زيارة Kingbri.dev.
الموقع الشخصي لبريان داشور
مهم
بالإضافة إلى الملف التمهيدي، يرجى قراءة صفحة Wiki للحصول على معلومات حول البدء!
ملحوظة
هل تحتاج إلى مساعدة؟ انضم إلى Discord Server واحصل على دور Tabby. من فضلك كن لطيفًا عند طرح الأسئلة.
تطبيق قائم على FastAPI يسمح بإنشاء نص باستخدام LLM (نموذج لغة كبير) باستخدام الواجهة الخلفية Exllamav2
تم وضع علامة على هذا المشروع كإصدار متداول. قد تكون هناك أخطاء وتغييرات في المستقبل. يرجى العلم أنك قد تحتاج إلى إعادة تثبيت التبعيات إذا لزم الأمر.
TabbyAPI هو مشروع هواية لعدد صغير من المستخدمين فقط. وليس المقصود أن تعمل على خوادم الإنتاج. لذلك، يرجى إلقاء نظرة على الواجهات الخلفية الأخرى التي تدعم أعباء العمل هذه.
مهم
هذا الملف التمهيدي ليس مخصصًا للبدء. يرجى قراءة الويكي.
اقرأ الويكي لمزيد من المعلومات. فهو يحتوي على وثائق واجهة المستخدم للتثبيت والتكوين وأخذ العينات واستخدام واجهة برمجة التطبيقات وغير ذلك الكثير.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3