BentoML يوضح كيفية تحويل Grounding DINO إلى خدمة إنتاجية بواجهة ويب API
استعرضت BentoML سيناريو عمليًا لتقديم Grounding DINO كخدمة، وهو نموذج zero-shot لاكتشاف الكائنات بناءً على استعلام نصي. يوضح المؤلف كيف يُنقل الاستدلال إلى خدمة Python، ثم تُضاف إليه آلية التحقق عبر Pydantic، ويُولَّد Swagger UI تلقائيًا، وتُبنى حاوية Docker. والنتيجة واجهة API بنقطتي وصول: الأولى تعيد JSON يتضمن المربعات الحدودية ودرجات الثقة (confidence)، والثانية تعيد صورة جاهزة عليها التأشير.
معالج بواسطة الذكاء الاصطناعي من Habr AI؛ بتحرير Hamidun News
عرضت BentoML سيناريو عمليًا لنقل Grounding DINO من دفتر الملاحظات (notebook) إلى خدمة إنتاجية دون الحاجة إلى بنية MLOps ثقيلة. وعلى مثال كاشف الكائنات zero-shot، بنى المؤلف واجهة HTTP API وأضاف التحقق من المعاملات، ثم بيّن كيفية تشغيل الخدمة محليًا وداخل Docker.
لماذا BentoML هنا
الفكرة الرئيسية في المقال بسيطة: تدريب النموذج لا يكفي، فلا بد أيضًا من إيصاله إلى المستخدم على نحو سليم. ويتطلب السيناريو الإنتاجي تخزين الأوزان وإدارة إصداراتها، والتحكم في الموارد، وواجهة API مريحة، ومسارًا واضحًا نحو النشر. وهذه هي الطبقة التي تغطيها BentoML تحديدًا.
يتيح الإطار تغليف شيفرة Python الخاصة بالنموذج في خدمة، وتجهيز البيئة تلقائيًا، وبناء صورة Docker، والحصول فورًا على واجهة HTTP مزوّدة بـSwagger UI. وبالنسبة إلى الفرق التي لا ترغب في بناء حزمة MLOps كاملة يدويًا، يختصر ذلك بشكل ملحوظ الطريق من التجربة إلى خدمة عاملة.
اختير Grounding DINO مثالًا، وهو نموذج لاكتشاف الكائنات في الفضاء المفتوح (open-set object detection). وعلى عكس الكواشف التقليدية، لا يعتمد على الصورة وحدها، بل على استعلام نصي أيضًا. وهذا يعني أن بالإمكان تمرير صورة مع قائمة أوصاف مثل a cat أو a remote control، فيحاول النموذج العثور على هذه الكائنات بالذات، حتى لو لم تكن مُدرجة سلفًا كفئات ثابتة. وهي حالة مناسبة لسيناريو الخدمات: ففيها الاستدلال، والمعاملات النصية، ونتيجة بصرية يسهل إرجاعها عبر API.
كيف تُبنى الخدمة
يبدأ المؤلف بمثال تطويري عادي على Transformers: يُحمَّل grounding-dino-tiny، وتمر الصورة عبر AutoProcessor، ثم يعيد النموذج المربعات الحدودية (bounding boxes) ودرجات الثقة (confidence) والتسميات النصية. بعد ذلك تُنقل هذه الشيفرة إلى الصنف GroundingDinoService، الذي يُزخرَف (decorated) بوصفه خدمة BentoML.
وثمة تفصيل مهم: تُحدَّد أوزان النموذج بوصفها HuggingFaceModel على مستوى الصنف، كي تنزّلها BentoML مسبقًا عند بناء الحزمة (artifact)، لا أثناء تهيئة الحاوية. وهذا يتفادى الخطأ الشائع المتمثل في غياب النموذج عند بدء التشغيل.
- يحدد إعداد بيئة التشغيل (runtime) إصدار Python 3.11 والاعتماديات عبر pyproject.toml
- تُنشر الدالتان detect_image وrender كنقطتي وصول HTTP عبر مزخرفات (decorators) BentoML
- تُوصَّف معاملات الإدخال عبر Pydantic: prompt وbox_threshold وtext_threshold
- يمكن إرجاع النتيجة بصيغة JSON تتضمن قائمة المربعات، أو بصيغة صورة جاهزة عليها التأشير
«كل ذلك يتم في ملف Python واحد لا يتجاوز 100 سطر».
عمليًا، تتألف الخدمة من ثلاثة أجزاء: دالة خاصة _detect تحوي منطق الاستدلال الأساسي، ودالة عامة detect_image تعيد استجابة مهيكلة، ودالة render لتصوير النتيجة. ويكمن حسن هذا التقسيم في أن المنطق نفسه يخدم العميل الآلي والشخص الذي يريد فحص عمل النموذج بسرعة عبر الواجهة أو curl. كما أن التحقق عبر Pydantic يستبعد المعاملات غير الصالحة قبل استدعاء النموذج.
التشغيل وواجهة API
للتطوير المحلي يُستخدم الأمر bentoml serve مع تحديد المنفذ 3025 ووضع إعادة التحميل التلقائي. وبعد التشغيل ترفع الخدمة Swagger UI تلقائيًا، حيث يمكن تحميل صورة وتمرير JSON بالمعاملات ومعاينة الاستجابة فورًا. وهذا وضع مريح لتصحيح الأخطاء: تعدّل الشيفرة وتحفظ الملف، ثم تشاهد تغيّر سلوك الخدمة دون إعادة بناء. وبالنسبة إلى كثير من الفرق، فإن دورة التطوير هذه أهم من بيئة تشغيل محسّنة إلى أقصى حد عند الإقلاع.
يُبنى الإصدار الإنتاجي عبر bentoml build، ثم تُحوَّل الحزمة إلى حاوية بالأمر bentoml containerize. بعدها يمكن تشغيل الخدمة في Docker مع GPU وفتحها على المنفذ المطلوب. وفي العرض التوضيحي للخدمة نقطتا وصول: تعيد /detect_image ملف JSON يتضمن الإحداثيات والفئات ودرجات الثقة (confidence)، بينما تحفظ /render الصورة وعليها المربعات المرسومة وتعيدها. وعُرض كذلك الاستدعاء عبر عميل SDK الخاص بـBentoML وعبر curl، أي أن ربط الخدمة بالمسارات الداخلية (pipelines) وبالتطبيقات الخارجية سهل بالقدر نفسه.
ماذا يعني ذلك
تكمن فائدة المادة في أنها تنزل بالحديث عن تقديم النماذج (model serving) من التجريد إلى الواقع: فبدل بنية MLOps مجردة، يُعرض مسار قصير قابل لإعادة الإنتاج من سكربت Python يستخدم Grounding DINO إلى حاوية بواجهة HTTP API. وبالنسبة إلى فرق تعلم الآلة الصغيرة، فهذا قالب جيد إذا كان المطلوب تقديم نموذج رؤية حاسوبية للمنتج بسرعة دون الغرق في البنية التحتية منذ الإصدار الأول.
Executive AI Consulting, Custom Agents & Team Workshops
Work directly with Zhemal Khamidun at hamidun.com — enterprise AI architecture, production RAG & multi-agent systems, and executive training.
أهم ما في عالم الذكاء الاصطناعي — مرة كل أسبوع
سبع قصص مهمة فعلاً هذا الأسبوع، مختارة بعناية. بلا ضجيج ولا بيانات صحفية.
تم! تحقق من بريدك للتأكيد.