Един аспект на сценария е създаването на модел за машинно обучение. Той трябва да може да се използва в реалния свят и да е достъпен за потребителите и разработчиците.
Най-простият и популярен начин за внедряване на модели за машинно обучение е да ги включите в 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 обект с персонализирано съобщение. Параметърът за име се взема направо от 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.
Изграждане и обучение на модела за машинно обучение
Без да събираме или анализираме данни, ние просто ще обучим прост модел. Те не са свързани с внедряването на модели и не са съществени за разглежданата тема.
Модел, базиран на набора от данни на Iris, може да бъде инсталиран с помощта на същия невронна мрежа метод на инсталиране.
И ние ще направим точно това: изтеглете Набор от данни за ириса и обучете модела. Това няма да е просто. За да започнете, направете файл с име jaysmlmodel.py.
В него ще направите следното:
- Импортиране — Ще ви трябват pandas, scikit-RandomForecastClassifier, BaseModel на learn's pydantic (ще разберете защо в следващата стъпка) и joblib за съхраняване и зареждане на модели.
- Декларирайте клас IrisSpecies, който наследява от базовия модел. Този клас съдържа само полета, необходими за прогнозиране на един вид цвете (повече за това в следващия раздел)
- Създайте клас. IrisModel е инструмент за обучение и прогнозиране на модели.
- Декларирайте метод с име _train model в IrisModel. Използва се за обучение на модели с помощта на техниката Random Forests. Обученият модел се връща от процедурата.
- Декларирайте функция за предвиден вид в IrisModel. Използва се за прогнозиране въз основа на 4 входни фактора (измервания на цветя). Както прогнозата (цветен вид), така и вероятността за прогнозиране се връщат от алгоритъма.
- Променете конструктора в IrisModel, така че да зарежда набора от данни на Iris и да обучава модела, ако липсва в папката. Това решава проблема с многократното обучение на нови модели. Библиотеката joblib се използва за зареждане и запазване на модела.
Ето целия код:
Надявам се, че горният списък и коментарите са го направили лесен за разбиране, въпреки че това беше значително количество код за създаване. Сега, след като този модел е разработен, нека публикуваме неговите възможности за прогнозиране над a REST API.
Конструиране на пълен REST API
Върнете се към файла ml_model.py и изчистете всички данни. Шаблонът ще бъде по същество същият като това, което сте имали преди, но трябва да започнем отначало с празен файл.
Този път ще дефинирате само една крайна точка, която се използва за определяне на вида цвете. 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 документация, както и как да я тествате.
Това е много за едно парче, така че не се изненадвайте, ако са необходими няколко четения, за да разберете правилно.
Честито кодиране.
Оставете коментар