0Pricing
Learn AI with Python · درس

تحميل نماذج التعلم الآلي وتقديمها

تحميل نموذج joblib/keras عند بدء التشغيل، والاستدلال الآمن للخيوط، ونقاط نهاية التنبؤ على دفعات

تحميل نماذج التعلم الآلي وتقديمها درس مجاني في Learn AI with Python على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Learn AI with Python، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Learn AI with Python 4 دروس في المجموع.

مشكلة التحميل

يستغرق تحميل نموذج من القرص وقتًا طويلًا. وإذا أعدتم تحميله مع كل طلب، فسترتفع مدة الاستجابة بشدة. والحل هو تحميل النموذج مرة واحدة عند بدء التشغيل وإعادة استخدامه لجميع الطلبات.

حدث startup

تُشغّل نقطة الربط @app.on_event("startup") مرة واحدة عند إقلاع الخادم، وهي المكان المثالي لتحميل النموذج قبل وصول أي طلب.

from fastapi import FastAPI
import joblib

app = FastAPI()

@app.on_event("startup")
def load_model():
    app.state.model = joblib.load("model.joblib")

app.state للتخزين الآمن للخيوط

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

from fastapi import Request

@app.post("/predict")
def predict(req: PredictRequest, request: Request):
    model = request.app.state.model
    return {"prediction": model.predict([req.features])[0]}

لماذا لا نستخدم متغيرًا عامًا؟

يعمل المتغير العام البسيط على مستوى الوحدة، لكنه يربط التحميل بوقت الاستيراد ويجعل الاختبار أو الاستبدال أكثر صعوبة. ويربط app.state دورة حياة الكائن بالتطبيق، وهو أسلوب أنظف ويوصي به FastAPI.

نهج lifespan الحديث

يستبدل FastAPI الأحدث on_event بمدير سياق lifespan، الذي يتولى بدء التشغيل وإيقافه معًا في مكان واحد.

from contextlib import asynccontextmanager

@asynccontextmanager
async def lifespan(app):
    app.state.model = joblib.load("model.joblib")  # startup
    yield
    app.state.model = None                          # shutdown

app = FastAPI(lifespan=lifespan)

التهيئة المسبقة للنموذج

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

@app.on_event("startup")
def load_and_warm():
    app.state.model = joblib.load("model.joblib")
    app.state.model.predict([[0.0, 0.0, 0.0, 0.0]])  # warm-up

أهمية التهيئة المسبقة

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

نقطة نهاية للتنبؤ الدفعي

يُعد التنبؤ بعدة صفوف في استدعاء واحد أكثر كفاءة بكثير من إجراء عدة استدعاءات فردية، لأن النماذج تنفّذ العمليات المتجهية على دفعة. اقبلوا قائمة من متجهات السمات وأعيدوا قائمة من التنبؤات.

class BatchRequest(BaseModel):
    items: list[list[float]]

@app.post("/predict/batch")
def predict_batch(req: BatchRequest, request: Request):
    model = request.app.state.model
    preds = model.predict(req.items)
    return {"predictions": preds.tolist()}

فردي أم دفعي؟

  • فردي: إدخال واحد، وأقل زمن استجابة لكل استدعاء، وعملاء بسيطون.
  • دفعي: إدخالات عديدة دفعة واحدة، وإنتاجية أعلى بكثير، وهو مثالي للتقييم غير المتصل.

يوفّر تقديم الخيارين تغطية لحالات الاستخدام الفورية والكبيرة الحجم.

قراءة الحالة من نقاط النهاية

تقرأ كل نقطة نهاية النموذج المشترك عبر request.app.state.model من دون إعادة تحميله، ولذلك تشترك جميع الطلبات في نسخة واحدة موجودة في الذاكرة.

جمع المكوّنات معًا

إعداد جاهز للإنتاج: حمّلوا النموذج وأجروا تهيئته المسبقة في lifespan/startup، وخزّنوه في app.state، واعرضوا نقاط نهاية للتنبؤ الفردي والدفعي تقرأ النموذج من الحالة. يقلل ذلك زمن الاستجابة إلى أدنى حد ويزيد الإنتاجية إلى أقصى حد.

اختبار سريع

اختبروا معرفتكم بتقديم النماذج.

مراجعة

حمّلتم النموذج مرة واحدة عبر startup/lifespan، وخزّنتموه في app.state لإعادة استخدامه بأمان بين الخيوط، وأضفتم تنبؤًا تجريبيًا من أجل التهيئة المسبقة، وأتحتم نقطة نهاية دفعي لزيادة الإنتاجية. التالي: وضع واجهة API في Docker.

الأسئلة الشائعة

هل درس «تحميل نماذج التعلم الآلي وتقديمها» مجاني؟

نعم — نص درس «تحميل نماذج التعلم الآلي وتقديمها» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Learn AI with Python، انتقل إلى CoddyKit PRO. تتضمن دورة Learn AI with Python 4 دروس في المجموع.

ماذا ستتعلم في «تحميل نماذج التعلم الآلي وتقديمها»؟

تحميل نموذج joblib/keras عند بدء التشغيل، والاستدلال الآمن للخيوط، ونقاط نهاية التنبؤ على دفعات تتمرن على Learn AI with Python مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Learn AI with Python؟

لا تُشترط خبرة سابقة. Learn AI with Python على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «تحميل نماذج التعلم الآلي وتقديمها»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Learn AI with Python هذا؟

نعم. كل درس في Learn AI with Python يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. أساسيات FastAPI لمهندسي التعلم الآلي
  2. مخططات Pydantic للطلبات والاستجابات
  3. تحميل نماذج التعلم الآلي وتقديمها
  4. تحويل واجهة النموذج إلى حاوية Docker
← العودة إلى Learn AI with Python