全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 数据分析与数据挖掘
1273 1
2020-12-09
FastAPI:烧瓶的正确替代品?
完成模型构建和适当的超参数调整后,数据科学项目的下一步是向公众展示最终结果。这样做非常重要,因为并非每个人都对查看代码感兴趣,并且他们对最终结果更感兴趣。它还可以帮助数据科学有抱负的人建立一个端到端的项目,从而使他们比其他人更具优势,并使他们对其他技术有所了解。
机器学习模型的部署可以采用不同的路线,具体取决于要为其提供模型的平台。该网络接口是服务于一个模型,但不限于最常见的方式Android和iOS应用或IOT设备,如树莓派。如果您在详细研究这一点,那么一个框架,均居搜索查询与烧瓶框架这是一个简约的应用程序快速设置Web服务器,但它有一些问题,这是目前解决在最新发布的框架调用FastAPI这是获得了这些天很受欢迎。
在本文中,我们将通过示例代码来了解FastAPI框架在Flask方面的优势,以便更好地理解事物。在此之前,如果您对Android应用程序部署感兴趣,则可以阅读我的文章“在Android App中部署ML”。
FastAPI与Flask
烧瓶
这是一个基于Python的框架,可让您使用较少的代码连接网站。您可以使用它创建一个小型网站,因为它可以在每个步骤进行自定义。作为一个简约的软件包,只有核心组件与此捆绑在一起,所有其他扩展都需要显式设置。许多开发人员都使用Flask托管其API。API(应用程序接口)是一种允许多个中介之间进行通信的接口,这意味着人们可以使用任何技术来访问任何类型的数据。例如,您可以使用可以使用Python构建的Javascript访问API。flask中的一个简单程序如下所示:
从flask导入Flask,jsonify
app = Flask(__ name__)
@ app.route(“ / <名称>”,方法= ['GET'])
def home(名称):
    返回jsonify({“ message”:f“你好!{name}”})
如果__name__ ==“ __main__”:
    app.run(debug = True)
在访问URL localhost / AnyNameHere时,将显示类似于以下内容的JSON结果:(我使用称为JSON viewer的chrome扩展名。系统可能会提示您输入纯文本而不是此格式的输出)
烧瓶
烧瓶问题
这种方法的问题是没有数据验证,也就是说,我们可以传递任何类型的数据,包括字符串,元组,数字或任何字符。这经常会破坏程序,您可以想象,如果ML模型获取错误的数据类型,程序将崩溃。您可以在进一步传递值之前创建数据检查器,但这会增加额外的工作。
Flask中的错误页面是简单的HTML页面,当在其他应用程序中调用API时会引发解码器错误。Flask还存在其他一些问题,例如缓慢的特性,没有异步功能以及对Web套接字的支持,这些问题可以加快处理过程,最终没有自动化的文档生成系统。您需要为API的用法和示例手动设计用户界面。所有这些问题都在新框架中得到解决。
FastAPI
这是一个现代的框架,可让您轻松地无缝构建API。它具有将服务器代码与业务逻辑分开的功能,从而提高了代码的可维护性。由于名称本身具有快速性,因此与烧瓶相比要快得多,因为它是基于ASGI(异步服务器网关接口)而不是WSGI(Web服务器网关接口)构建的。它具有一个数据验证系统,该系统可以在运行时检测到任何无效的数据类型,并以JSON格式将错误输入的原因返回给用户,从而使开发人员不必显式管理此异常。
它生成的文件,当你正在开发这是所有开发商最要求的事情API在旅途中。文档是其他开发人员在项目上进行协作的一种好方法,因为它向他们展示了可以用必要的说明完成的所有事情。它还生成了一个不错的GUI,可以解决烧瓶中缺少的所有问题。
它完成了OpenAI规范和Swagger的所有这些工作,以实现这些规范。作为开发人员,您只专注于逻辑构建部分,其余所有事情都由FastAPI管理。让我们看看使用现在在FastAPI中实现的Flask创建的示例:
进口脐带
从fastapi导入FastAPI
应用= FastAPI()
@ app.get(“ /”)
def home(名称:str):
    return {“ message”:f“ Hello!{name}”}
如果__name__ ==“ __main__”:
    uvicorn.run(app,host ='127.0.0.1',port = 8000,debug = True)
在访问URL localhost /?name = AnyNameHere时,系统将提示您输出:
FastAPI
您可以看到该代码与flask非常相似,但是在这里我们使用的是uvicorn服务器,它是ASGI的实现。另外,这里我们没有路由任何端点,而是直接使用装饰器创建端点,这更有意义。这里的函数只是简单地将所需的参数作进一步处理,从而消除了调用请求对象的需要。
现在介绍有趣的部分。要访问自动生成的文档,请单击端点/ docs,然后将为您提供Swagger UI,该界面允许您测试API端点,还可以定义为示例以供用户测试端点:
API端点
FastAPI捆绑了另一个文档生成器,即ReDoc,它也生成了列出所有端点的精美文档。可以通过点击端点/ redoc来访问它:
ReDoc
要设置数据验证,我们可以简单地创建从Pydantic的基本模型继承的数据类型类。它是一个使用Python类型注释提供数据验证的库。我们可以添加实体的描述,并提供要在文档中显示的自定义示例。
ML FastAPI示例
我想分享一个使用FastAPI部署ML DecisionTree分类器模型的示例。问题的陈述是音乐流派分类器,其中基于音乐的技术方面(例如节奏,价态),音乐是摇滚或嘻哈音乐。我制作了一个音乐课来验证要传递给模型的数据,如下所示:
从pydantic导入BaseModel
音乐(BaseModel)类:
    声学:浮动
    舞蹈性:浮动
    能量:浮动
    工具性:浮动
    活度:浮动
    语言:浮动
    速度:浮动
    价:浮动
这是生成的API:
FastApi示例
如果要查看整个代码,请转到此GitHub存储库。
结论:选择哪一个?
在所有讨论之后,这个问题仍然没有答案,谁赢了?基于所有因素,我建议在Flask上采用FastAPI。设置非常容易,将旧的flask项目迁移到其中不会花费很多时间,异步,Web套接字和自动文档生成功能是最重要的。
可以选择flask框架来设置整个Web界面(前端和后端),但涉及ML,而ML的主要目标是检查模型是否在生产环境中正常工作,因此创建API更为合理因为其余的事情可以由其他开发人员团队管理,并且可以清楚地向他们解释您开发的程序的用法,所以FastAPI自动文档是一个很好的解决方案。
题库
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2023-1-13 11:32:11
厉害了,学习了,谢谢啦
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群