- Оригинальный адрес:Publishing Machine Learning API with Python Flask
- Оригинальный автор:Andrejus Baranovskis
- Перевод с:Программа перевода самородков
- Постоянная ссылка на эту статью:GitHub.com/rare earth/gold-no…
- Переводчик:sisibeloved
- Корректор:alictopo,zhmhhu
В этой статье описывается, как предоставлять модели машинного обучения внешнему миру через REST API Python Flask.
Колба как ееОфициальный сайтСказал, весело и легко установить. Действительно, этот микрофреймворк Python предоставляет эффективный способ аннотировать функции Python с помощью конечных точек REST. В настоящее время я использую Flask для публикации API модели машинного обучения, к которому могут обращаться сторонние бизнес-приложения.
Этот пример основан на XGBoost.
Для лучшей поддержки кода я рекомендую использовать отдельный блокнот Jupyter для публикации API модели машинного обучения. Импортируйте Flask и модуль CORS Flask:
from flask import Flask, jsonify, request
from flask_cors import CORS, cross_origin
import pickle
import pandas as pd
Эта модель используетНабор данных о диабете индейцев пима(База данных по диабету индейцев пима). Данные в формате CSV можно загрузить сздесьскачать. Чтобы создать переменную типа Pandas dataframe для использования в качестве моделипредсказыватьНа входе функции нам нужно определить массив, содержащий имена столбцов набора данных:
# 获取请求头中的 payload
headers = ['times_pregnant', 'glucose', 'blood_pressure', 'skin_fold_thick', 'serum_insuling', 'mass_index', 'diabetes_pedigree', 'age']
Загрузите предварительно обученную модель с помощью Pickle:
# 使用 Pickle 加载预训练模型
with open(f'diabetes-model.pkl', 'rb') as f:
model = pickle.load(f)
Хорошей практикой является тестовый запуск и проверка правильности работы модели. Сначала создайте кадр данных с массивом имен столбцов и массивом данных (используя новые данные, которых нет в обучающем или тестовом наборе данных). Затем вызовите две функции -model.predictиmodel.predict_probaлюбой из . я обычно предпочитаюmodel.predict_proba, который возвращает вероятность того, что прогнозируемый результат равен 0 или 1, что помогает объяснить результаты в диапазоне (например, от 0,25 до 0,75). Наконец, создайте кадр данных Pandas с примером полезной нагрузки, а затем выполните прогнозы модели:
# 用数据帧测试模型
input_variables = pd.DataFrame([[1, 106, 70, 28, 135, 34.2, 0.142, 22]],
columns=headers,
dtype=float,
index=['input'])
# 获取模型的预测结果
prediction = model.predict(input_variables)
print("Prediction: ", prediction)
prediction_proba = model.predict_proba(input_variables)
print("Probabilities: ", prediction_proba)
Ниже показано, как написан Flask API. Обязательно включите CORS, иначе вызовы API с других хостов не будут успешными. Закомментируйте функцию, которую вы хотите предоставить через REST API, и укажите имя конечной точки и поддерживаемый метод REST (в данном случае POST). Получите данные полезной нагрузки из запроса, затем создайте кадр данных Pandas и выполните модель.predict_probaфункция:
app = Flask(__name__)
CORS(app)
@app.route("/katana-ml/api/v1.0/diabetes", methods=['POST'])
def predict():
payload = request.json['data']
values = [float(i) for i in payload.split(',')]
input_variables = pd.DataFrame([values],
columns=headers,
dtype=float,
index=['input'])
# 获取模型的预测结果
prediction_proba = model.predict_proba(input_variables)
prediction = (prediction_proba[0])[1]
ret = '{"prediction":' + str(float(prediction)) + '}'
return ret
# 运行 REST 接口,port=5000 用于直接测试
if __name__ == "__main__":
app.run(debug=False, host='0.0.0.0', port=5000)
Результат функции создается в виде строки JSON и возвращается в качестве ответа. Я запускаю Flask в контейнере Docker, поэтому я использую 0.0.0.0 в качестве IP-адреса хоста, на котором он работает. Порт 5000 отображается как внешний порт, чтобы разрешить вызовы извне.
Хотя запуск интерфейса Flask непосредственно в блокноте Jupyter также возможен, я бы рекомендовал преобразовать его в скрипт Python и запускать из командной строки как службу. Использование Юпитераnbconvertкоманда, чтобы преобразовать его в скрипт Python:
jupyter nbconvert — to python diabetes_redsamurai_endpoint_db.ipynb
Программы Flask можно запускать в фоновом режиме с помощью диспетчера процессов PM2. Таким образом, вы можете запустить конечную точку как службу и включить несколько процессов, работающих на разных портах (для балансировки нагрузки). Команда запуска PM2:
pm2 start diabetes_redsamurai_endpoint_db.py
pm2 monitМожет отображать информацию о запущенных процессах:
Используйте Postman для вызова модели классификации машинного обучения REST API, предоставляемой Flask:
Дополнительная информация:
-
GitHub Исходный код хранилища
-
Назад к обучению модели XGBoostстатья
Если вы обнаружите ошибки в переводе или в других областях, требующих доработки, добро пожаловать наПрограмма перевода самородковВы также можете получить соответствующие бонусные баллы за доработку перевода и PR. начало статьиПостоянная ссылка на эту статьюЭто ссылка MarkDown этой статьи на GitHub.
Программа перевода самородковэто сообщество, которое переводит высококачественные технические статьи из Интернета сНаггетсДелитесь статьями на английском языке на . Охват контентаAndroid,iOS,внешний интерфейс,задняя часть,блокчейн,продукт,дизайн,искусственный интеллектЕсли вы хотите видеть более качественные переводы, пожалуйста, продолжайте обращать вниманиеПрограмма перевода самородков,официальный Вейбо,Знай колонку.