היבט אחד של התרחיש הוא יצירת מודל למידת מכונה. זה חייב להיות שמיש בעולם האמיתי וזמין לצרכנים ולמפתחים.
הדרך הפשוטה והפופולרית ביותר לפרוס מודלים של למידת מכונה היא לכלול אותם ב- REST API.
עם ספרייה פופולרית בשם FastAPI, זה בדיוק מה שנשיג היום.
אבל, מה כן FastAPI?
מסגרת האינטרנט של FastAPI Python נוצרה מהיסוד כדי לנצל את היכולות העכשוויות של Python.
לתקשורת אסינכרונית, במקביל עם לקוחות, הוא עומד בתקן ASGI, בעוד הוא מסוגל גם להשתמש ב-WSGI.
נקודות קצה ומסלולים יכולים שניהם להפעיל פונקציות אסינכרון. בנוסף, FastAPI מאפשר יצירה פרודוקטיבית של אפליקציות אינטרנט בקוד Python עם רמזים, נקיים ועכשוויים.
מקרה השימוש העיקרי של FastAPI הוא, כפי שהשם מרמז, יצירת נקודות קצה של API.
שימוש בתקן OpenAPI, הכולל ממשק משתמש אינטראקטיבי של Swagger, או מתן נתוני מילון Python כ-JSON הן שתי דרכים פשוטות להשיג זאת. עם זאת, FastAPI אינו מיועד רק לממשקי API.
ניתן להשתמש בו כדי להציע דפי אינטרנט סטנדרטיים באמצעות מנוע התבנית Jinja2 ולשרת אפליקציות המשתמשות ב-WebSockets, בנוסף כמעט לכל דבר אחר שמסגרת אינטרנט יכולה לעשות.
במאמר זה, נפתח מודל למידת מכונה פשוטה ולאחר מכן נשתמש ב-FastAPI כדי לפרוס אותו. בואו נתחיל.
התקנה של FastAPI ויצירת ה-API הראשון
תחילה נדרשת התקנת הספרייה ושרת ASGI; או Uvuicorn או Hypercorn יעבדו. זה עובד על ידי הזנת הפקודה הבאה למסוף:
כעת לאחר יצירת ה-API, אתה יכול להשתמש בעורך הקוד המועדף עליך ולדפדף בו. צור סקריפט Python בשם ml_model.py כדי להתחיל. אתה מוזמן לתת לשלך שם אחר, אבל למען הפוסט הזה, אתייחס לקובץ זה בשם ml_model.py.
כדי ליצור ממשק API פשוט עם שתי נקודות קצה, עליך לבצע את המשימות הבאות:
- ייבא את ספריות FastAPI ו-Uvicorn.
- הגדר מופע מחלקה של FastAPI.
- הכריז על המסלול הראשון, אשר בדף האינדקס מייצר אובייקט JSON פשוט.
- הכריז על המסלול השני, המספק אובייקט JSON פשוט עם הודעה מותאמת אישית. פרמטר השם נלקח ישירות מכתובת האתר (לדוגמה, https://127.0.0.1:8000/Jay).
- השתמש ב-Uvicorn כדי להפעיל את ה-API.
יישום חמשת השלבים הללו מוצג בקטע הקוד הבא, כלומר. יצירת API פשוט
הכל בוצע! בואו להפעיל את ה-API שלנו באופן מיידי. פתח חלון מסוף ליד הקובץ ml model.py כדי לבצע זאת. לאחר מכן, הזן את הפרטים הבאים:
מקש Enter. לפני שנמשיך, בואו נפתור את הקביעה הזו. האפליקציה הראשונה עושה שימוש בשם הקובץ Python בלבד, ללא הסיומת. האפליקציה השנייה חייבת להיות באותו שם כמו מופע ה-FastAPI שלך.
על ידי שימוש ב--reload, אתה אומר ל-API שאתה רוצה שהוא ייטען מחדש באופן אוטומטי כאשר אתה שומר את הקובץ במקום להתחיל מאפס.
כעת הפעל דפדפן ונווט אל https://127.0.0.1:8000; התוצאה צריכה להופיע כך:
כעת אתה מבין כיצד ליצור ממשק API פשוט באמצעות FastAPI.
בנייה והדרכה של מודל Machine Learning
מבלי לאסוף או לנתח נתונים כלשהם, אנו פשוט נאמן מודל פשוט. אלה אינם קשורים לפריסת מודלים ואינם חיוניים לנושא הנדון.
ניתן להתקין מודל המבוסס על מערך הנתונים של Iris באמצעות אותו רשת עצבית שיטת התקנה.
ואנחנו נעשה בדיוק את זה: הורד את ה מערך איריס ולהכשיר את הדגם. זה לא יהיה פשוט. כדי להתחיל, צור קובץ בשם jaysmlmodel.py.
בו תעשה את הפעולות הבאות:
- יבוא - תזדקק לפנדות, scikit-RandomForecastClassifier, ה-BaseModel של Learn's pydantic (תגלה למה בשלב הבא), ו-joblib לאחסון וטעינת דגמים.
- הכריז על מחלקה של IrisSpecies שיורשת מהמודל הבסיסי. מחלקה זו מכילה רק שדות הדרושים לחיזוי מין פרח בודד (עוד על כך בסעיף הבא)
- צור כיתה. IrisModel הוא כלי אימון וחיזוי מודל.
- הכריז על שיטה בשם _train model בתוך IrisModel. הוא משמש לאימון דגמים באמצעות טכניקת היערות האקראיים. הדגם המאומן מוחזר על ידי הנוהל.
- הכריז על פונקציית מין חזויה בתוך IrisModel. הוא משמש לחיזוי על סמך 4 גורמי קלט (מדידות פרחים). הן התחזית (מיני פרחים) והן הסתברות החיזוי מוחזרות על ידי האלגוריתם.
- שנה את הבנאי ב-IrisModel כך שיטען את מערך הנתונים של Iris ויאמן את המודל אם הוא חסר בתיקייה. זה פותר את הבעיה של הכשרת דגמים חדשים שוב ושוב. ספריית joblib משמשת לטעינת מודלים ולשמירה.
הנה כל הקוד:
אני מקווה שהרשימה לעיל וההערות הפכו את זה קל לתפיסה למרות שזו הייתה כמות נכבדת של קוד ליצור. כעת, לאחר שמודל זה פותח, בואו נפרסם את יכולות החיזוי שלו על פני א REST API.
בניית REST API מלא
חזור לקובץ ml_model.py וטקה את כל הנתונים. ה-boilerplate יהיה בעצם זהה למה שהיה לך קודם, אבל כדאי שנתחיל מחדש עם קובץ ריק.
הפעם תגדיר רק נקודת קצה אחת, שהיא זו המשמשת לקביעת סוג הפרח. IrisModel.predict species(), שהוכרז בסעיף הקודם, נקרא על ידי נקודת קצה זו כדי לבצע את החיזוי.
סוג הבקשה הוא השינוי הגדול השני. על מנת לשדר פרמטרים ב-JSON ולא ב-URL, מומלץ להשתמש ב-POST בעת השימוש למידת מכונה ממשקי API.
המשפט שלמעלה אולי נשמע כמו ג'יבריש אם אתה א מדען נתונים, אבל זה בסדר. כדי לעצב ולפרוס מודלים, לא בהכרח צריך להיות מומחה בבקשות HTTP וממשקי API של REST.
המשימות עבור ml model.py הן מעטות ופשוטות:
- עליך לייבא את הדברים הבאים מקובץ jaymlmodel.py שנוצר בעבר: uvicorn, FastAPI, IrisModel ו-IrisSpecies.
- צור מופעים של FastAPI ו- IrisModel.
- הכריז על פונקציה בכתובת https://127.0.0.1:8000/predict לביצוע תחזיות.
- השיטה IrisModel.predict species() מקבלת אובייקט מסוג IrisSpecies, הופכת אותו למילון ולאחר מכן מחזירה אותו. תשואות הן המחלקה הצפויה וההסתברות החזויה.
- השתמש ב-uvicorn כדי להפעיל את ה-API.
שוב, הנה הקוד של הקובץ כולו יחד עם ההערות שלו:
זה כל מה שאתה צריך לעשות. בשלב הבא, בואו נבדוק את ה-API.
בודקים את ה- API
הזן מחדש את השורה הבאה לתוך הטרמינל כדי להפעיל את ה-API: uvicorn ml_model:app –reload
כך מופיע דף התיעוד:
אז זהו להיום. בחלק שאחרי זה, בואו נסיים.
סיכום
היום, למדת מה זה FastAPI וכיצד להשתמש בו, תוך שימוש בדוגמה פשוטה של API וגם בדוגמה פשוטה של למידת מכונה. למדת גם כיצד ליצור ולהציג תיעוד API, כמו גם כיצד לבדוק אותו.
זה הרבה עבור יצירה בודדת, אז אל תתפלאו אם נדרשות כמה קריאות כדי להבין כראוי.
קידוד שמח.
השאירו תגובה