الذكاء الاصطناعي

نشر التعلم الآلي FastAPI: دليل خطوة بخطوة

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

يعد FastAPI خيارًا مثاليًا لهذه المهمة.

ما هو FastAPI؟

FastAPI هو إطار عمل ويب Python مصمم لمساعدة المطورين على إنشاء واجهات برمجة تطبيقات RESTful. إنه سريع وبسيط ويحتوي على العديد من الميزات المضمنة افتراضيًا، مثل الإنشاء التلقائي لوثائق واجهة برمجة التطبيقات (API). يعمل FastAPI أيضًا بشكل جيد مع مكتبات Python الحالية لمعالجة البيانات، وبالتالي فهو خيار مثالي لمشاريع التعلم الآلي.

المزايا الرئيسية لاستخدام FastAPI هي:

  1. أداء سريع: يعد FastAPI أحد أسرع أطر الويب المتاحة للغة برمجة Python، حيث تم بناؤه على مكتبتين مشهورتين: Starlette وPydantic.
  2. سهولة التطوير والصيانة: تتطلب كتابة واجهات برمجة التطبيقات النظيفة باستخدام FastAPI الحد الأدنى من التعليمات البرمجية بفضل الإمكانات التلقائية لـ FastAPI، والتي تتضمن التحقق التلقائي من الصحة والتسلسل وفحوصات الإدخال.
  3. وثائق API المضمنة: تشتمل جميع واجهات برمجة التطبيقات المبنية باستخدام FastAPI تلقائيًا على واجهة Swagger مدمجة عند نقطة نهاية URL /docs. يتيح ذلك للمستخدمين اختبار نقاط نهاية API الخاصة بهم مباشرة من متصفح الويب الخاص بهم.
  4. مثالية لنماذج التعلم الآلي: باستخدام FastAPI، يمكن للمستخدمين تحديد مخطط الإدخال الخاص بهم لنماذج التعلم الآلي الخاصة بهم، وكشف نقطة نهاية النموذج للتنبؤ، ومشاركة موقع الملف المحفوظ للنموذج حتى يمكن تحميله في الذاكرة عند بدء تشغيل التطبيق. يتم الاهتمام بكل هذا العمل الخلفي بواسطة FastAPI. ولذلك، اكتسب FastAPI شعبية هائلة بين المطورين الذين ينشرون نماذج التعلم الآلي.

يوضح هذا الشكل تدفق طلب التنبؤ عبر النظام: يتم إرسال البيانات بواسطة المستخدم إلى تطبيق FastAPI، الذي يقوم بتحميل نموذج التعلم الآلي المدرب وتشغيل الاستدلال. يتم إنتاج التنبؤ بواسطة النموذج، ويتم إرجاع هذه النتيجة بواسطة واجهة برمجة التطبيقات بتنسيق JSON.

نشر نموذج ML مع البرنامج التعليمي العملي لـ FastAPI

ستجد أدناه دليلًا عمليًا كاملاً لبناء واجهات برمجة تطبيقات الويب لنموذج التعلم الآلي. ولكن قبل ذلك، دعونا نرى بنية المجلد.

هيكل المجلد

تساعد بنية المجلد في تنظيم ملفات المشروع في بنية بسيطة؛ وهذا يجعل تحديد المكان الذي ينتمي إليه كل جزء من التطبيق أسهل.

هيكل الدليل

الآن، دعونا نرى ما يفعله كل جزء

  • main.py
    يقوم بتشغيل FastAPI، وتحميل النموذج المُدرب، والكشف عن نقطة نهاية التنبؤ.
  • Train_model.py
    يقوم بإنشاء وحفظ نموذج التعلم الآلي الذي سيقوم FastAPI بتحميله.
  • النماذج/
    يخزن التحف النموذجية المدربة. سيتم إنشاء هذا المجلد إذا لم يكن موجودًا بالفعل.
  • المتطلبات.txt
    ليس مطلوبًا ولكن يوصى به حتى يتمكن الآخرون من تثبيت كل شيء بأمر واحد.
  • .venv/
    يحتوي على بيئتك الافتراضية لإبقاء التبعيات معزولة.

الخطوة 1: إعداد المشروع

1.1 قم بإنشاء دليل المشروع الخاص بك

إنشاء دليل المشروع

قم بإنشاء دليل المشروع حيث سيتم وضع جميع التعليمات البرمجية والملفات والموارد الخاصة بهذا المشروع.

1.2 إنشاء بيئة افتراضية

تعمل البيئة الافتراضية على عزل تبعيات مشروعك عن المشاريع الأخرى الموجودة على جهاز الكمبيوتر الخاص بك.

python -m venv .venv

تفعيلها:

ويندوز

.venv\Scripts\activate

ماك/لينكس

source .venv/bin/activate

عندما تكون البيئة الخاصة بك جاهزة للعمل، يجب أن ترى “(.venv)” قبل الجهاز.

1.3 تثبيت التبعيات المطلوبة

فيما يلي قائمة بمكتبات Python التي سنستخدمها في خادم الويب FastAPI الخاص بنا:

  • FastAPI (الإطار الرئيسي لبناء واجهات برمجة تطبيقات الويب)
  • Uvicorn (خادم الويب ASGI لاستضافة تطبيقات FastAPI)
  • Scikit-Learn (لاستخدامه كنموذج للمدرب)
  • Pydantic (للتحقق التلقائي من صحة الإدخال)
  • Joblib (لمواصلة حفظ/تحميل نماذج ML)

تثبيتها:

pip install fastapi uvicorn scikit-learn pydantic joblib 

الخطوة 2: تدريب نموذج تعلم الآلة البسيط وحفظه

في هذا العرض التوضيحي، سيتم تدريب المصنف الخاص بنا على مجموعة بيانات Iris الكلاسيكية وسيتم حفظ النموذج على القرص. سيتم بعد ذلك تحميل النموذج المحفوظ في تطبيق الويب FastAPI الخاص بنا.

لتدريب نموذجنا وحفظه، سنقوم بإنشاء ملف يسمى Train_model.py:

تدريب نموذج ML بسيط
# train_model.py
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
import joblib
from pathlib import Path

MODEL_PATH = Path("models")
MODEL_PATH.mkdir(exist_ok=True)
MODEL_FILE = MODEL_PATH / "iris_model.joblib"

def train_and_save_model():
iris = load_iris()
X = iris.data
y = iris.target

    X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42, stratify=y
)

    clf = RandomForestClassifier(
        n_estimators=100,
        random_state=42
)
    clf.fit(X_train, y_train)

accuracy = clf.score(X_test, y_test)
print(f"Test accuracy: {accuracy:.3f}")

    joblib.dump(
    {
        "model": clf,
        "target_names": iris.target_names,
        "feature_names": iris.feature_names,
    },
    MODEL_FILE,
)
print(f"Saved model to {MODEL_FILE.resolve()}")

if __name__ == "__main__":
    train_and_save_model()

قم بتثبيت joblib إذا لزم الأمر:

pip install joblib

قم بتشغيل البرنامج النصي:

تنفيذ البرنامج النصي بايثون

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

الخطوة 3: قم بإنشاء برنامج FastAPI الذي سيقدم تنبؤات النموذج الخاص بك

في هذه الخطوة، سنقوم بإنشاء واجهة برمجة التطبيقات (API) التي يمكنها ذلك

  • قم بتحميل نموذج التعلم الآلي المدرب عند بدء التشغيل
  • قم بإنشاء مخطط إدخال يمكن استخدامه للتحقق من صحة البيانات المرسلة إلى واجهة برمجة التطبيقات
  • اتصل بنقطة النهاية /predict المحددة في الخطوة السابقة لإنشاء مخرجات بناءً على تنبؤات النموذج.

يخلق main.py:

# main.py
from fastapi import FastAPI
from pydantic import BaseModel, Field
from typing import List
import joblib
from pathlib import Path

MODEL_FILE = Path("models/iris_model.joblib")

class IrisFeatures(BaseModel):
    sepal_length: float = Field(..., example=5.1)
    sepal_width: float = Field(..., example=3.5)
    petal_length: float = Field(..., example=1.4)
    petal_width: float = Field(..., example=0.2)

class PredictionResult(BaseModel):
    predicted_class: str
    predicted_class_index: int
probabilities: List(float)

app = FastAPI(
title="Iris Classifier API",
description="A simple FastAPI service that serves an Iris classification model.",
version="1.0.0",
)

model = None
target_names = None
feature_names = None

@app.on_event("startup")
def load_model():
global model, target_names, feature_names

if not MODEL_FILE.exists():
    raise RuntimeError(
            f"Model file not found at {MODEL_FILE}. "
            f"Run train_model.py first."
    )

artifact = joblib.load(MODEL_FILE)
model = artifact("model")
    target_names = artifact("target_names")
    feature_names = artifact("feature_names")
    print("Model loaded successfully.")

@app.get("/")
def root():
return {
    "message": "Welcome to the Iris ML API",
    "predict_endpoint": "/predict",
    "docs": "/docs",
}

@app.post("/predict", response_model=PredictionResult)
def predict(features: IrisFeatures):
if model is None:
    raise RuntimeError("Model is not loaded.")

X = ((
        features.sepal_length,
        features.sepal_width,
        features.petal_length,
        features.petal_width,
))

    proba = model.predict_proba(X)(0)
    class_index = int(proba.argmax())
    class_name = str(target_names(class_index))

return PredictionResult(
        predicted_class=class_name,
        predicted_class_index=class_index,
    probabilities=proba.tolist(),
)

يحتوي هذا الملف على كافة التعليمات البرمجية التي ستسمح لنموذج التعلم الآلي بالعمل كتطبيق ويب.

الخطوة 4: تشغيل واجهة برمجة التطبيقات (API) واختبارها محليًا

4.1 ابدأ الخادم

يجري:

uvicorn main:app –reload 
بدء تشغيل الخادم

يبدأ التطبيق على: http://127.0.0.1:8000/

يبدأ التطبيق في المضيف المحلي

4.2 اختبار واجهة برمجة التطبيقات (API) باستخدام الوثائق التفاعلية المقدمة من FastAPI

يوفر FastAPI وثائق Swagger المضمنة على: http://127.0.0.1:8000/docs

واجهة برمجة تطبيقات مصنف القزحية

هناك ستجد:

  • الحصول على نقطة النهاية /
  • نقطة نهاية ما بعد /predict 

جرب /predict نقطة النهاية عن طريق النقر جربه والدخول:

{
  "sepal_length": 5.1,
  "sepal_width": 3.5,
  "petal_length": 1.4,
  "petal_width": 0.2
}
استخدام نقطة نهاية التنبؤ

سوف تحصل على التنبؤ مثل:

{ 
  "predicted_class": "setosa", 
  "predicted_class_index": 0, 
  "probabilities": (1, 0, 0) 
} 
الناتج المتوقع

تم الآن نشر نموذج ML الخاص بك بالكامل كواجهة برمجة التطبيقات (API).

النشر إلى السحابة

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

نشر على الرندر

يعد Render أحد أسرع الطرق لوضع تطبيق FastAPI على الإنترنت.

  1. ادفع مشروعك إلى GitHub.
  2. قم بإنشاء خدمة ويب جديدة على Render.
  3. قم بتعيين أمر البناء:
pip install -r requirements.txt
  1. ضبط أمر البدء:
uvicorn main:app --host 0.0.0.0 --port 10000

سيقوم Render بتثبيت الحزم الخاصة بك، وبدء تطبيقك، ويمنحك رابطًا عامًا. يمكن لأي شخص الآن إرسال طلبات إلى النموذج الخاص بك.

النشر إلى GitHub Codespaces

إذا كنت تريد فقط بيئة بسيطة عبر الإنترنت دون أي إعداد إضافي، فيمكن لـ Codespaces تشغيل تطبيق FastAPI الخاص بك.

  1. افتح مستودعك في Codespaces.
  2. تثبيت التبعيات الخاصة بك.
  3. إطلاق التطبيق:
uvicorn main:app --host 0.0.0.0 --port 8000

يعرض Codespaces المنفذ، حتى تتمكن من فتح الرابط مباشرة من متصفحك. يعد هذا أمرًا جيدًا للاختبار أو مشاركة عرض توضيحي سريع.

النشر على AWS EC2

يمكنك استخدام مثيل EC2 إذا كنت تريد التحكم في الخادم الخاص بك.

  1. قم بتشغيل جهاز EC2 صغير.
  2. تثبيت بايثون والنقطة.
  3. استنساخ مشروعك.
  4. تثبيت المتطلبات:
pip install -r requirements.txt
  1. ابدأ واجهة برمجة التطبيقات:
uvicorn main:app --host 0.0.0.0 --port 8000

تأكد من أن المنفذ 8000 مفتوح في إعدادات الأمان EC2. ستكون واجهة برمجة التطبيقات الخاصة بك متاحة على عنوان IP العام للجهاز.

الأخطاء والإصلاحات الشائعة

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

لم يتم العثور على ملف النموذج

    وهذا يعني عادةً أن البرنامج النصي للتدريب لم يتم تشغيله مطلقًا. يجري:

    python train_model.py

    تأكد من ظهور ملف النموذج داخل مجلد النموذج.

    مكتبات مفقودة

      إذا رأيت رسائل حول الوحدات المفقودة، فتأكد من أن البيئة الافتراضية الخاصة بك نشطة:

      source .venv/bin/activate

      ثم أعد تثبيت المكتبات المطلوبة:

      pip install fastapi uvicorn scikit-learn pydantic joblib

      مشكلة إعادة تحميل Uvicorn

        تستخدم بعض الأوامر عبر الإنترنت نوعًا خاطئًا من الشرطة.
        إذا فشل هذا:

        uvicorn main:app –reload

        استخدم هذا بدلا من ذلك:

        uvicorn main:app --reload

        لا يمكن للمتصفح استدعاء API

          إذا رأيت أخطاء CORS عندما تستدعي الواجهة الأمامية واجهة برمجة التطبيقات (API)، فأضف هذه الكتلة إلى تطبيق FastAPI الخاص بك:

          from fastapi.middleware.cors import CORSMiddleware
          
          app.add_middleware(
              CORSMiddleware,
              allow_origins=("*"),
              allow_methods=("*"),
              allow_headers=("*"),
          )
          1. أخطاء في شكل الإدخال

          يتوقع Scikit-learn الإدخال كقائمة من القوائم. تأكد من أن بياناتك على شكل مثل هذا:

          X = ((
              features.sepal_length,
              features.sepal_width,
              features.petal_length,
              features.petal_width,
          ))

          وهذا يتجنب معظم الأخطاء المتعلقة بالشكل.

          خاتمة

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

          الأسئلة المتداولة

          س1. ما الذي يجعل FastAPI مناسبًا لنشر نماذج التعلم الآلي؟

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

          س2. لماذا أحتاج إلى تشغيل البرنامج النصي للتدريب قبل بدء تشغيل واجهة برمجة التطبيقات؟

          أ. تقوم واجهة برمجة التطبيقات (API) بتحميل ملف نموذج محفوظ عند بدء التشغيل.

          س3. كيف يمكنني اختبار نقطة نهاية التنبؤ دون كتابة أي رمز عميل؟

          A. يتم شحن FastAPI مع مستندات Swagger على /docs. يمكنك فتحه في المتصفح، وملء نماذج المدخلات لـ /predict، وإرسال طلب لرؤية المخرجات الحقيقية من النموذج الخاص بك.

          جانفي كوماري

          مرحبًا، أنا جانفي، متحمس لعلوم البيانات وأعمل حاليًا في Analytics Vidhya. بدأت رحلتي إلى عالم البيانات بفضول عميق حول كيفية استخلاص رؤى ذات معنى من مجموعات البيانات المعقدة.

قم بتسجيل الدخول لمواصلة القراءة والاستمتاع بالمحتوى الذي ينظمه الخبراء.


Source link

مقالات ذات صلة

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

زر الذهاب إلى الأعلى