100天搞定机器学习 番外:使用FastAPI构建机器学习API

简介: 100天搞定机器学习 番外:使用FastAPI构建机器学习API

FastAPI


FastAPI 是一个高性能 Web 框架,用于构建 API。


640.png


FastAPI 建立在 StarlettePydantic 之上。


  • Starlette:轻量级的 ASGI 框架和工具包,用来构建高性能的 asyncio 服务
  • Pydantic:Python中用于数据接口schema定义与检查的库。通过它,可以更为规范地定义和使用数据接口。


想要深入学习这两个库,可以移步对应官方文档


https://pydantic-docs.helpmanual.io/

https://www.starlette.io/


实际应用中,FastAPI 需要与Uvicorn一起使用,Uvicorn主要用于加载和提供应用程序的服务器。


FastAPI和Uvicorn的使用方法


使用之前先安装


pip install fastapi
pip install uvicorn


看一个小例子,感受一下FastAPI 多方便,多简单:


from typing import Optional
from fastapi import FastAPI
import uvicorn
#创建FastAPI实例
app = FastAPI()
#创建访问路径
@app.get("/")
def read_root():#定义根目录方法
    return {"message": "Hello World"}#返回响应信息
#定义方法,处理请求
@app.get("/items/{item_id}")
async def read_item(item_id: int):
    return {"item_id": item_id}
#运行
if __name__ == '__main__':
    uvicorn.run(app, host="127.0.0.1", port=8000)


uvicron服务器运行之后可以尝试访问


http://127.0.0.1:8000/items/666,返回:


640.png


也可进在文档中调试


打开交互文档(Swagger UI)http://127.0.0.1:8000/docs


也可以访问API文档(ReDoc)http://127.0.0.1:8080/redoc


640.png


FastAPI部署机器学习模型


第一步:准备模型


import numpy as np
import os
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline
import joblib
from sklearn import datasets
def main():
    clf = LogisticRegression()
    p = Pipeline([('clf', clf)])
    print('Training model...')
    p.fit(X, y)
    print('Model trained!')
    filename_p = 'IrisClassifier.pkl'
    print('Saving model in %s' % filename_p)
    joblib.dump(p, filename_p)
    print('Model saved!')
if __name__ == "__main__":
    print('Loading iris data set...')
    iris = datasets.load_iris()
    X, y = iris.data, iris.target
    print('Dataset loaded!')
    main()


第二步:创建FastAPI实例


import uvicorn
from fastapi import FastAPI 
import joblib
from os.path import dirname, join, realpath
from typing import List
app = FastAPI(
    title="Iris Prediction Model API",
    description="A simple API that use LogisticRegression model to predict the Iris species",
    version="0.1",
)
# load  model
with open(
    join(dirname(realpath(__file__)), "models/IrisClassifier.pkl"), "rb"
) as f:
    model = joblib.load(f)
def data_clean(str):
    arr = str.split(',')
    arr = list(map(float,arr))
    return arr
# Create Prediction Endpoint
@app.get("/predict-result")
def predict_iris(request):
    # perform prediction
    request = data_clean(request)
    prediction = model.predict([request])
    output = int(prediction[0])
    probas = model.predict_proba([request])
    output_probability = "{:.2f}".format(float(probas[:, output]))
    # output dictionary
    species = {0: "Setosa", 1: "Versicolour", 2:"Virginica"}
    # show results
    result = {"prediction": species[output], "Probability": output_probability}
    return result
if __name__ == '__main__':
    uvicorn.run(app, host="127.0.0.1", port=8001)


第三步:传入参数


我们用模型预测属性为以下值时Iris应该属于哪一类,并输出预测概率。


sepal_length=7.233
sepal_width=4.652
petal_length=7.39
petal_width=0.324

打开网址,传入参数


http://127.0.0.1:8001/predict-result?request=7.233%2C4.652%2C7.39%2C0.324


640.png

bingo!

相关文章
|
10天前
|
搜索推荐 安全 API
电商API接口开放平台的生态构建与运营策略
本文探讨了电商API接口开放平台在推动电商行业发展中的重要作用,涵盖用户体验提升、业务创新促进、运营效率提高及销售渠道拓展等方面。同时,文章分析了生态构建的关键要素,如明确目标受众、制定吸引政策和强化支持体系,并提出数据共享、个性化服务与安全合规等运营策略。最后展望未来,指出跨平台支持、个性化服务与生态共赢将成为主要发展趋势,为电商行业的持续创新提供参考。
67 2
|
2月前
|
缓存 安全 API
API 接口开发与合理利用:构建高效、安全、可维护的数字桥梁
本文全面解析API接口的设计、优化与安全维护。API作为系统间交互的标准化契约,核心价值在于解耦系统、提升复用性和构建开放生态。设计时需遵循六大原则:明确输入输出、关注单一职责、实现自我表达、确保功能无重叠、保障幂等性及合理版本化。性能优化从批量处理、异步调用、并行执行等方面入手,同时结合缓存、池化技术和SQL优化提升效率。安全性涵盖加密传输、加签验签、Token认证、防重放攻击及限流熔断等十大要点。最后,通过文档自动生成、日志体系和版本管理确保接口可持续迭代。优秀的API应以契约优先、演进思维和防御心态为核心,成为系统的数字资产,支持内外部高效协作与生态建设。
|
2月前
|
前端开发 JavaScript NoSQL
使用 Node.js、Express 和 React 构建强大的 API
本文详细介绍如何使用 Node.js、Express 和 React 构建强大且动态的 API。从开发环境搭建到集成 React 前端,再到利用 APIPost 高效测试 API,适合各水平开发者。内容涵盖 Node.js 运行时、Express 框架与 React 库的基础知识及协同工作方式,还涉及数据库连接和前后端数据交互。通过实际代码示例,助你快速上手并优化应用性能。
|
3月前
|
人工智能 缓存 自然语言处理
构建智能天气助手:基于大模型API与工具函数的调用实践
在人工智能快速发展的今天,大语言模型(LLM)已经成为构建智能应用的重要基础设施。本文将介绍如何利用大模型API和工具函数集成,构建一个能够理解自然语言并提供精准天气信息的智能助手。
272 11
|
3月前
|
JSON API 网络架构
如何用Flask构建API
这篇文章介绍了如何使用Python的轻量级框架Flask构建自己的API。通过简单步骤,你将学会创建响应请求的基础API、返回JSON格式数据,并实现动态路由处理用户输入。从“Hello, World!”示例到返回水果信息列表,再到根据具体水果名称提供详细信息,逐步深入理解API的工作原理。最后,通过动态路由增强API灵活性。适合初学者快速上手,开启API开发之旅!
|
3月前
|
人工智能 JavaScript 测试技术
构建智能 API 开发环境:在 Cursor 中连接 Apifox MCP Server
本文介绍了如何将Apifox MCP Server与Cursor结合,通过AI直接获取和理解API文档,大幅提升开发效率。首先需配置Apifox的Access Token和项目ID,并在Cursor中设置MCP连接。实际应用场景包括快速生成模型代码、同步更新接口文档与代码、生成CRUD操作、搜索API文档及自动生成测试用例。此外,还提供了管理多项目、安全性实践和优化AI响应质量的技巧。这种组合可显著减少从API规范到代码实现的时间,降低错误率并加速迭代过程,为开发者带来更高效的体验。
|
3月前
|
机器学习/深度学习 设计模式 API
Python 高级编程与实战:构建 RESTful API
本文深入探讨了使用 Python 构建 RESTful API 的方法,涵盖 Flask、Django REST Framework 和 FastAPI 三个主流框架。通过实战项目示例,详细讲解了如何处理 GET、POST 请求,并返回相应数据。学习这些技术将帮助你掌握构建高效、可靠的 Web API。
|
25天前
|
机器学习/深度学习 数据采集 人工智能
20分钟掌握机器学习算法指南
在短短20分钟内,从零开始理解主流机器学习算法的工作原理,掌握算法选择策略,并建立对神经网络的直观认识。本文用通俗易懂的语言和生动的比喻,帮助你告别算法选择的困惑,轻松踏入AI的大门。
89 7
|
7月前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
418 6
|
2月前
|
机器学习/深度学习 存储 Kubernetes
【重磅发布】AllData数据中台核心功能:机器学习算法平台
杭州奥零数据科技有限公司成立于2023年,专注于数据中台业务,维护开源项目AllData并提供商业版解决方案。AllData提供数据集成、存储、开发、治理及BI展示等一站式服务,支持AI大模型应用,助力企业高效利用数据价值。

热门文章

最新文章