当前位置:   article > 正文

开源模型应用落地-Gradio正确集成Fastapi-助力模型交互-入门篇(一)_gradio fastapi

gradio fastapi

一、前言

    Gradio提供了直观的用户界面,当与Fastapi结合后,用户可以通过界面轻松地与模型进行交互,上传数据、获取推理结果等,使得交互性增强,提升了用户体验。

    在开源大语言模型遍地开花的时代,正确的使用Gradio和Fastapi,通过两者的集成,使得模型的部署和使用过程更加简化和规范化。


二、术语

2.1.Gradio

    是一个用于构建交互式界面的Python库。它使得在Python中创建快速原型、构建和共享机器学习模型变得更加容易。

    Gradio的主要功能是为机器学习模型提供一个即时的Web界面,使用户能够与模型进行交互,输入数据并查看结果,而无需编写复杂的前端代码。它提供了一个简单的API,可以将输入和输出绑定到模型的函数或方法,并自动生成用户界面。

2.2.Fastapi

    FastAPI 是一个用于构建 API 的现代、快速(高性能)的 Python Web 框架。它是基于标准 Python 类型注释的 ASGI (Asynchronous Server Gateway Interface) 框架。

FastAPI 具有以下主要特点:

  1. 快速: FastAPI 使用 ASGI 服务器和 Starlette 框架,在性能测试中表现出色。它可以与 Uvicorn 一起使用,提供非常高的性能。

  2. 简单: FastAPI 利用 Python 类型注释,使 API 定义变得简单且直观。开发人员只需要定义输入和输出模型,FastAPI 会自动生成 API 文档。

  3. 现代: FastAPI 支持 OpenAPI 标准,可以自动生成 API 文档和交互式文档。它还支持 JSON Schema 和数据验证。

  4. 全功能: FastAPI 提供了路由、依赖注入、数据验证、安全性、测试等功能,是一个功能齐全的 Web 框架。

  5. 可扩展: FastAPI 被设计为可扩展的。开发人员可以轻松地集成其他库和组件,如数据库、身份验证等。


三、前置条件

3.1. windows or linux操作系统均可

3.2. 创建虚拟环境&安装依赖

  1. conda create --name gradio python=3.10
  2. conda activate gradio
  3. pip install gradio fastapi uvicorn

四、技术实现

4.1. 使用Gradio实现小Demo

  1. import gradio as gr
  2. def greet(name):
  3. return "Hello " + name + "!"
  4. with gr.Blocks() as demo:
  5. #设置输入组件
  6. name = gr.Textbox(label="Name")
  7. # 设置输出组件
  8. output = gr.Textbox(label="Output Box")
  9. #设置按钮
  10. greet_btn = gr.Button("Greet")
  11. #设置按钮点击事件
  12. greet_btn.click(fn=greet, inputs=name, outputs=output)
  13. if __name__ == '__main__':
  14. demo.launch(server_name='0.0.0.0',server_port=8000)

调用结果:

4.2. 错误集成Gradio和Fastapi

先启动gradio

  1. import gradio as gr
  2. def greet(name):
  3. return "Hello " + name + "!"
  4. with gr.Blocks() as demo:
  5. #设置输入组件
  6. name = gr.Textbox(label="Name")
  7. # 设置输出组件
  8. output = gr.Textbox(label="Output Box")
  9. #设置按钮
  10. greet_btn = gr.Button("Greet")
  11. #设置按钮点击事件
  12. greet_btn.click(fn=greet, inputs=name, outputs=output)
  13. if __name__ == '__main__':
  14. demo.launch(server_name='0.0.0.0',server_port=8000)

再启动Fastapi,端口还被Gradio占用了,只能改端口咯

  1. import uvicorn
  2. from fastapi import FastAPI
  3. import gradio as gr
  4. fastapi_app = FastAPI()
  5. @fastapi_app.get("/chat")
  6. def read_main():
  7. return {"message": "This is your main app"}
  8. if __name__ == '__main__':
  9. uvicorn.run(fastapi_app, host='0.0.0.0', port=8001)

调用结果:

Fastapi正常返回接口内容

gradio正常交互

4.3. 正确集成Gradio和Fastapi

  1. import uvicorn
  2. from fastapi import FastAPI
  3. import gradio as gr
  4. fastapi_app = FastAPI()
  5. @fastapi_app.get("/chat")
  6. def read_main():
  7. return {"message": "This is your main app"}
  8. def greet(name):
  9. return "Hello " + name + "!"
  10. with gr.Blocks() as demo:
  11. #设置输入组件
  12. name = gr.Textbox(label="Name")
  13. # 设置输出组件
  14. output = gr.Textbox(label="Output Box")
  15. #设置按钮
  16. greet_btn = gr.Button("Greet")
  17. #设置按钮点击事件
  18. greet_btn.click(fn=greet, inputs=name, outputs=output)
  19. if __name__ == '__main__':
  20. app = gr.mount_gradio_app(fastapi_app, demo, path="/gr")
  21. uvicorn.run(fastapi_app, host='0.0.0.0',port=8000)

调用结果:

Fastapi正常返回接口内容

gradio正常交互

PS:

各位老铁,千万不要认为上述Demo很简单,万丈高楼平地起,任何复杂的代码都是通过简单的开始逐步演化而来。后面我们将把模型推理集成到上述的代码中。


五、附带说明

5.1. 问题:gradio交互失败,请求/run/predict地址,并返回422状态码

原因:Gradio版本太低,建议更新至最新版本,本章示例使用gradio-4.31.5版本

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/703739
推荐阅读
相关标签
  

闽ICP备14008679号