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

本文介绍了如何将Gradio与Fastapi结合,以创建直观的用户界面,让用户与深度学习模型进行交互。内容包括Gradio和Fastapi的简介,集成过程中的错误示例及解决方案,以及集成后的成功演示。适合自然语言处理和语言模型开发者参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、前言

    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. 创建虚拟环境&安装依赖

conda create --name gradio python=3.10
conda activate gradio 
pip install gradio fastapi uvicorn

四、技术实现

4.1. 使用Gradio实现小Demo

import gradio as gr

def greet(name):
    return "Hello " + name + "!"

with gr.Blocks() as demo:
    #设置输入组件
    name = gr.Textbox(label="Name")
    # 设置输出组件
    output = gr.Textbox(label="Output Box")
    #设置按钮
    greet_btn = gr.Button("Greet")
    #设置按钮点击事件
    greet_btn.click(fn=greet, inputs=name, outputs=output)

if __name__ == '__main__':
    demo.launch(server_name='0.0.0.0',server_port=8000)

调用结果:

4.2. 错误集成Gradio和Fastapi

先启动gradio

import gradio as gr

def greet(name):
    return "Hello " + name + "!"

with gr.Blocks() as demo:
    #设置输入组件
    name = gr.Textbox(label="Name")
    # 设置输出组件
    output = gr.Textbox(label="Output Box")
    #设置按钮
    greet_btn = gr.Button("Greet")
    #设置按钮点击事件
    greet_btn.click(fn=greet, inputs=name, outputs=output)

if __name__ == '__main__':
    demo.launch(server_name='0.0.0.0',server_port=8000)

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

import uvicorn
from fastapi import FastAPI
import gradio as gr

fastapi_app = FastAPI()

@fastapi_app.get("/chat")
def read_main():
    return {"message": "This is your main app"}

if __name__ == '__main__':

    uvicorn.run(fastapi_app, host='0.0.0.0', port=8001)

调用结果:

Fastapi正常返回接口内容

gradio正常交互

4.3. 正确集成Gradio和Fastapi

import uvicorn
from fastapi import FastAPI
import gradio as gr

fastapi_app = FastAPI()

@fastapi_app.get("/chat")
def read_main():
    return {"message": "This is your main app"}

def greet(name):
    return "Hello " + name + "!"

with gr.Blocks() as demo:
    #设置输入组件
    name = gr.Textbox(label="Name")
    # 设置输出组件
    output = gr.Textbox(label="Output Box")
    #设置按钮
    greet_btn = gr.Button("Greet")
    #设置按钮点击事件
    greet_btn.click(fn=greet, inputs=name, outputs=output)

if __name__ == '__main__':
    app = gr.mount_gradio_app(fastapi_app, demo, path="/gr")
    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版本

评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

开源技术探险家

以微薄之力温暖这个世界

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值