API машинного обучения с использованием FASTAPI
Интерфейс прикладного программирования (API) — это набор определенных правил, которые позволяют различным приложениям взаимодействовать друг с другом. Он действует как промежуточный уровень, который обрабатывает передачу данных между системами, позволяя компаниям открывать данные и функции своих приложений для внешних сторонних разработчиков, деловых партнеров и внутренних отделов своих компаний.
API стали очень распространены в нашей повседневной жизни; мы ежедневно используем API, начиная с входа в наши приложения на мобильных телефонах и заканчивая нажатием кнопки для совершения платежа на веб-сайте. API-интерфейсы предоставляют платформу для взаимодействия между этими приложениями с помощью различных команд. В машинном обучении мы можем заставить других взаимодействовать с нашими моделями машинного обучения с помощью API. В этом проекте FastAPI использовался для того, чтобы другие могли взаимодействовать со встроенной моделью классификации машинного обучения, предсказывающей шансы на выживание на титаническом корабле. FastAPI — это современная, быстрая (высокопроизводительная) веб-инфраструктура для создания API с Python 3.7+ на основе стандартных подсказок типа Python.
Ключевые особенности FastAPI включают в себя;
- Быстро: FastAPI — одна из самых быстрых доступных платформ Python. Он имеет очень высокую производительность, которая находится на одном уровне с NodeJS и Go.
- Быстро кодировать
- Меньше ошибок: Сокращение примерно 40% ошибок, вызванных человеком (разработчиком).
- Easy: Разработан, чтобы быть простым в использовании и обучении. Меньше времени на чтение документов.
- Надежность: получите готовый к работе код. С автоматической интерактивной документацией.
Ниже описана процедура создания моего FastAPI.
- Настройка виртуальной среды
Окна:
python -m venv venv; venv\Scripts\activate; python -m pip install -q --upgrade pip; python -m pip install -qr requirements.txt
MacOS и Linux
python3 -m venv venv; source venv/bin/activate; python -m pip install -q --upgrade pip; python -m pip install -qr requirements.txt
2. Импортированные необходимые библиотеки
###Imports from fastapi import FastAPI from sklearn import preprocessing import pickle, uvicorn,os from pydantic import BaseModel from sklearn.impute import SimpleImputer from sklearn.compose import make_column_selector as selector from sklearn.metrics import accuracy_score import pandas as pd import numpy as np from typing import Union
В отличие от фреймворка Flask, FastAPI не содержит встроенного сервера разработки. Поэтому нам нужен Увикорн. Библиотека реализует стандарты ASGI и работает молниеносно. ASGI означает асинхронный интерфейс шлюза сервера. Uvicorn использует библиотеки uvloop и httptools. Он также обеспечивает поддержку HTTP/2 и WebSockets, которые не могут быть обработаны WSGI.
Pydantic — это библиотека Python для анализа и проверки данных. Он использует механизм подсказки типов более новых версий Python 3.6+ и проверяет типы во время выполнения. Pydantic определяет классBaseModel. Он действует как базовый класс для создания пользовательских моделей.
3. Конфигурация и установка
Чтобы настроить и настроить наш API, нам нужно указать путь каждой переменной в среде.
##Variable of environment DIRPATH = os.path.dirname(__file__) ASSETSDIRPATH = os.path.join(DIRPATH ,'assets') ml_components = os.path.join(ASSETSDIRPATH ,'api_with_ml_pipline.pkl') print(f"{'*'*10} Config {'*'*10}\n INFO: DIRPATH = {DIRPATH}\n INFO:ASSETSDIRPATH ={ASSETSDIRPATH}") ## API Basic Config app = FastAPI(title = 'Titanic Survival API', version = '0.0.1', desccription = "Prediction of Surival on the titanic Ship" )
4. Загрузка экспорта из блокнота Jupyter.
Модель и конвейер были экспортированы из Jupyter Notebook для встраивания в этот API.
## Loading of assets with open(ml_components,'rb')as f: loaded_items = pickle.load(f) print("INFO: Loaded assets :",loaded_items) ml_processsor = loaded_items['pipeline_for_preprocessing'] ml_model = loaded_items['model']
Чтобы экспортировать файл require.txt, модель и конвейер из ноутбука в API, использовались приведенные ниже коды.
ml_api = {'pipeline_for_preprocessing':preprocessor, 'numeric_columns': num_cols, 'categorical_columns': cat_cols, 'model':best_rf_model} with open("api_with_ml_pipline.pkl", 'wb') as file: pickle.dump(ml_api, file) with open('api_with_ml_pipline.pkl', 'rb') as file: loaded_object = pickle.load(file)
5. Получение входных данных и их обработка для возврата в качестве выходных данных
На этом этапе мы берем входные данные для прогноза и пропускаем их через любую предварительную обработку, которая ранее выполнялась в блокноте Jupyter. В данном случае это наш конвейер и модель.
### Base Model class ModelInput(BaseModel): SibSp: float PassengerId :float Pclass: float Parch :float Fare : float Age: float Sex_female: float Embarked_C : float Embarked_Q : float def processing_FE(dataset, imputer=None, FE=None ): if imputer is not None: output_dataset = imputer.transform(dataset) else: output_dataset = dataset.copy() if FE is not None: output_dataset = FE.transform(output_dataset) return output_dataset def make_prediction( SibSp,PassengerId,Pclass, Parch,Fare, Age,Sex_female, Embarked_C,Embarked_Q ): df = pd.DataFrame([[SibSp,PassengerId,Pclass, Parch,Fare, Age,Sex_female, Embarked_C,Embarked_Q]], columns = ['SibSp','PassengerId','Pclass','Parch','Fare' ,'Age','Sex_female', ' Embarked_C',Embarked_Q ], ) X = processing_FE(dataset = df, FE = None) model_output = ml_model.predict(X).tolist() return model_output
6. Конечные точки
Конечные точки API — это определенное цифровое местоположение, куда одна программа отправляет запросы на информацию для получения существующих там цифровых ресурсов. Конечные точки указывают, где API могут получить доступ к ресурсам, и помогают гарантировать правильное функционирование встроенного программного обеспечения.
### Endpoints @app.post('/titanic survivor') async def predict(input: ModelInput): """__descr___ ____details___ """ output_pred = make_prediction(SibSp = input.SibSp, PassengerId = input.PassengerId, Pclass = input.Pclass, Parch = input.Parch, Fare = input.Fare, Age = input.Age, Sex_female = input.Sex_female, Embarked_C = input.Embarked_C, Embarked_Q = input.Embarked_Q)
7. Маркировка вывода модели
# Labelling Model output if output_pred == 0: output_pred = "No,the person didn't survive" else: output_pred = "Yes,the person survived" return{ "prediction": output_pred, "input": input} ####################################### @app.get("/") async def root(): return {"message": "Hello Mavis"}
8.Исполнение
######Execution if __name__ =="__main__": uvicorn('api :app',reload = True, )
Для запуска приложения FASTAPI использовался приведенный ниже код.
uvicorn src.demo_01.api:app --reload
Вот краткий обзор того, как выглядит мой API
Эта ссылка ведет на репозиторий проекта на github, набор данных и блокнот доступны для ознакомления.
Также хотелось бы услышать ваше мнение о проекте. Дайте ссылку на linkedIn.
ИСПОЛЬЗОВАННАЯ ЛИТЕРАТУРА