Μια πτυχή του σεναρίου είναι η δημιουργία ενός μοντέλου μηχανικής μάθησης. Πρέπει να είναι χρησιμοποιήσιμο στον πραγματικό κόσμο και διαθέσιμο σε καταναλωτές και προγραμματιστές.
Ο απλούστερος και πιο δημοφιλής τρόπος ανάπτυξης μοντέλων μηχανικής εκμάθησης είναι να τα περικλείσετε σε ένα REST API.
Με μια δημοφιλή βιβλιοθήκη που ονομάζεται FastAPI, αυτό ακριβώς θα επιτύχουμε σήμερα.
Αλλά, τι είναι FastAPI?
Το πλαίσιο web FastAPI Python δημιουργήθηκε από την αρχή για να αξιοποιήσει τις σύγχρονες δυνατότητες της Python.
Για ασύγχρονη, ταυτόχρονη επικοινωνία με πελάτες, τηρεί το πρότυπο ASGI, ενώ έχει και δυνατότητα χρήσης WSGI.
Τα τελικά σημεία και οι διαδρομές μπορούν να χρησιμοποιούν ασύγχρονες λειτουργίες. Επιπλέον, το FastAPI επιτρέπει την παραγωγική δημιουργία εφαρμογών ιστού με υποδείξεις τύπου, καθαρό, σύγχρονο κώδικα Python.
Η κύρια περίπτωση χρήσης του FastAPI είναι, όπως υποδηλώνει το όνομα, η δημιουργία τελικών σημείων API.
Η χρήση του προτύπου OpenAPI, το οποίο περιλαμβάνει ένα διαδραστικό Swagger UI, ή η παροχή δεδομένων λεξικού Python ως JSON είναι απλοί τρόποι για να επιτευχθεί αυτό. Ωστόσο, το FastAPI δεν είναι μόνο για API.
Μπορεί να χρησιμοποιηθεί για την προσφορά τυπικών ιστοσελίδων χρησιμοποιώντας τη μηχανή προτύπων Jinja2 και για την εξυπηρέτηση εφαρμογών που χρησιμοποιούν WebSockets, επιπλέον σχεδόν οτιδήποτε άλλο μπορεί να κάνει ένα πλαίσιο Ιστού.
Σε αυτό το άρθρο, θα αναπτύξουμε ένα απλό μοντέλο μηχανικής εκμάθησης και στη συνέχεια θα χρησιμοποιήσουμε το FastAPI για να το αναπτύξουμε. Ας ξεκινήσουμε.
Εγκατάσταση του FastAPI και δημιουργία του πρώτου API
Απαιτείται πρώτα η εγκατάσταση της βιβλιοθήκης και ενός διακομιστή ASGI. είτε το Uvuicorn είτε το Hypercorn θα λειτουργήσουν. Λειτουργεί εισάγοντας την ακόλουθη εντολή στο Terminal:
Τώρα που δημιουργήθηκε το API, μπορείτε να χρησιμοποιήσετε τον επεξεργαστή κώδικα που προτιμάτε και να περιηγηθείτε σε αυτό. Δημιουργήστε ένα σενάριο Python που ονομάζεται ml_model.py για να ξεκινήσετε. Είστε ευπρόσδεκτοι να δώσετε ένα διαφορετικό όνομα στο δικό σας, αλλά για χάρη αυτής της ανάρτησης, θα αναφερθώ σε αυτό το αρχείο ως ml_model.py.
Για να δημιουργήσετε ένα απλό API με δύο τελικά σημεία, πρέπει να ολοκληρώσετε τις ακόλουθες εργασίες:
- Εισαγάγετε τις βιβλιοθήκες FastAPI και Uvicorn.
- Ρυθμίστε μια παρουσία κλάσης FastAPI.
- Δηλώστε την πρώτη διαδρομή, η οποία, στη σελίδα ευρετηρίου, παράγει ένα απλό αντικείμενο JSON.
- Δηλώστε τη δεύτερη διαδρομή, η οποία παρέχει ένα απλό αντικείμενο JSON με ένα προσαρμοσμένο μήνυμα. Η παράμετρος ονόματος λαμβάνεται απευθείας από τη διεύθυνση URL (για παράδειγμα, 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 μπορεί να εγκατασταθεί χρησιμοποιώντας το ίδιο νευρικό σύστημα μέθοδος εγκατάστασης.
Και θα κάνουμε ακριβώς αυτό: κατεβάστε το Σύνολο δεδομένων Iris και εκπαιδεύστε το μοντέλο. Αυτό δεν θα είναι απλό. Για να ξεκινήσετε, δημιουργήστε ένα αρχείο με το όνομα jaysmlmodel.py.
Σε αυτό, θα κάνετε τα εξής:
- Εισαγωγές — Θα χρειαστείτε panda, scikit-RandomForecastClassifier, Learn's pydantic's BaseModel (θα ανακαλύψετε γιατί στο επόμενο βήμα) και joblib για την αποθήκευση και τη φόρτωση μοντέλων.
- Δηλώστε μια κλάση IrisSpecies που κληρονομείται από το βασικό μοντέλο. Αυτή η τάξη περιέχει μόνο πεδία που απαιτούνται για την πρόβλεψη ενός μεμονωμένου είδους λουλουδιών (περισσότερα για αυτό στην επόμενη ενότητα)
- Δημιουργήστε μια τάξη. Το IrisModel είναι ένα μοντέλο εκπαίδευσης και εργαλείο πρόβλεψης.
- Δηλώστε μια μέθοδο με το όνομα _train model μέσα στο IrisModel. Χρησιμοποιείται για την εκπαίδευση μοντέλων χρησιμοποιώντας την τεχνική Random Forests. Το εκπαιδευμένο μοντέλο επιστρέφεται με τη διαδικασία.
- Δηλώστε μια προβλεπόμενη λειτουργία είδους μέσα στο IrisModel. Χρησιμοποιείται για πρόβλεψη με βάση 4 παράγοντες εισόδου (μετρήσεις λουλουδιών). Τόσο η πρόβλεψη (είδος λουλουδιών) όσο και η πιθανότητα πρόβλεψης επιστρέφονται από τον αλγόριθμο.
- Αλλάξτε τον κατασκευαστή στο IrisModel έτσι ώστε να φορτώνει το σύνολο δεδομένων Iris και να εκπαιδεύει το μοντέλο εάν λείπει από το φάκελο. Αυτό λύνει το πρόβλημα της επανειλημμένης εκπαίδευσης νέων μοντέλων. Η βιβλιοθήκη joblib χρησιμοποιείται για τη φόρτωση και αποθήκευση μοντέλων.
Εδώ είναι ολόκληρος ο κώδικας:
Ελπίζω ότι η παραπάνω λίστα και τα σχόλια κατέστησαν εύκολη την κατανόηση, παρόλο που αυτό ήταν ένα αρκετά μεγάλο ποσό κώδικα για τη δημιουργία. Τώρα που αναπτύχθηκε αυτό το μοντέλο, ας δημοσιεύσουμε τις δυνατότητες πρόβλεψής του σε α REST API.
Δημιουργία πλήρους REST API
Επιστρέψτε στο αρχείο ml_model.py και διαγράψτε όλα τα δεδομένα. Το boilerplate θα είναι ουσιαστικά το ίδιο με αυτό που είχατε πριν, αλλά θα πρέπει να ξεκινήσουμε από την αρχή με ένα κενό αρχείο.
Αυτή τη φορά θα ορίσετε μόνο ένα τελικό σημείο, το οποίο είναι αυτό που χρησιμοποιείται για τον προσδιορισμό του τύπου του λουλουδιού. Το IrisModel.predict species(), το οποίο δηλώθηκε στην προηγούμενη ενότητα, καλείται από αυτό το τελικό σημείο για να πραγματοποιήσει την πρόβλεψη.
Ο τύπος αιτήματος είναι η άλλη μεγάλη αλλαγή. Για τη μετάδοση παραμέτρων σε JSON και όχι σε URL, συνιστάται η χρήση POST κατά τη χρήση μάθηση μηχανής APIs.
Η παραπάνω πρόταση μπορεί να ακουγόταν σαν ασυναρτησία αν είστε α επιστήμονας δεδομένων, αλλά δεν πειράζει. Για να σχεδιάσει και να αναπτύξει μοντέλα, δεν χρειάζεται απαραίτητα να είναι ειδικός σε αιτήματα HTTP και REST API.
Οι εργασίες για το 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, καθώς και πώς να τη δοκιμάζετε.
Αυτό είναι πολύ για ένα μόνο κομμάτι, οπότε μην εκπλαγείτε αν χρειαστούν μερικές αναγνώσεις για να το κατανοήσετε σωστά.
Καλή κωδικοποίηση.
Αφήστε μια απάντηση