Gradio快速搭建ML/DL Web端服务

简介: Gradio快速搭建ML/DL Web端服务

Gradio快速搭建ML/DL Web端服务


前言


当我们训练好了某个模型并且效果还不错时,最先想到的应该是部署.部署又可以分为线上Web服务和边缘模块上;为了汇报的时候往往还是选择线上部署,毕竟盒子部署好了还得配置相应的硬件输入也不方便展示.在这个专栏之前尝试用fastapi搭建了Web服务,并且将一些算法模型部署到api接口中,但是由于要自己设计一些预处理工作,路由,附加功能以及页面UI感觉很麻烦.所以今天就介绍一下这个基于fastapi构建的一个非常方便就可以部署模型且功能强大的Web框架—Gradio


官网的链接在这里,大家可以先去了解一下Gradio  虽然目前没有中文文档,但是我感觉整个文档写的还是比较好读懂的,所以一步步模仿文档操作也不难.


介绍了这么多,下面就开始写demo.计划是这样的


  1. 撸一个简单的层数较少的ResNet,在cifar10上训练一下,得到一个效果好点的模型(这里不用迁移主要是之前为了实验重参数化在ResNet结构上效果不好然后自己写了个简单的顺便拿来用了)
  2. 使用Gradio编写一个Web服务,其实只要我们实现推理的函数就行,其他的只用实例化接口,非常快捷.


开始


模型训练


最基本的残差模块堆一堆,接个全连接层分类然后就可以训练了.这里面训练特意尝试了一下最近几年提出的Ranger优化器代替之前的sgd,adam之类的,效果确实会有一定的提升.

来看看官网给出的效果对比,经过我的训练结果来看也确实如此.


image.png

使用的最简单方法只需要把ranger21.py下载下来,然后训练的时候引用就可以了或者按照官网用pip安装pip install git+https://github.com/lessw2020/Ranger21.git

只有几层的模型最终效果也还不错



image.pngimage.png


这样我们就得到了一个效果还可以的模型,下一步就使用Gradio部署


部署


从官网的入门教程可以看到,我们需要自己写推理部分的函数,并且在gr.Interface()中注册自己的函数以及输入输出一些附加功能.不得不说这个框架封装之后真的非常便于开发,很多功能已经实现了,比如:结果缓存,模型解释甚至考虑到访问量特别大的时候利用队列而不是并行进行结果响应等等


先加载模型然后写推理函数


if os.path.exists("best.pt"):
    ResNet.load_state_dict(torch.load('best.pt'))
ResNet.eval()
labels=['airplane','automobile','bird','cat','deer','dog','frog','horse','ship','truck']
def classify_image(img):
    img = transforms.ToTensor()(img).unsqueeze(0).cuda()
    with torch.no_grad():
        predict=torch.nn.functional.softmax(ResNet(img)[0],dim=0).cpu()
        confidence={labels[i]:float(predict[i]) for i in range(10)}
    return confidence
复制代码


然后注册到接口实例化并启动


gr.Interface(
    fn=classify_image,
    inputs=gr.Image(type="pil",shape=(320,320)),
    outputs=gr.Label(num_top_classes=10),
    examples=['./data/airplane.jpeg'],
    interpretation="default",cache_examples=True,title="Shelgi的分类Demo"
).launch(enable_queue=True)
复制代码


image.png


上面的解释基于默认的``SHAP`,也可以设置自己的解释函数.再来看看其他的结果


image.png


到这里基本的部署部分就实现了,但是和以往惯例一样,还是要带着看看源码的.


源码部分


开头我说这是基于fastapi封装的框架,那就来好好看看它的一些实现.最基本的既然是Web框架,那就先看看它的路由部分.


image.png

很明显,就是利用fastapi来搭建路由的.App继承了FastAPI,实现了自己的相关路由(login,config,file等等)

然后在blocks中有更多功能的实现,包括前处理,运行注册函数和后处理,这也是调用预测的重要代码


image.png


再来看看基础设置,类似于url,端口号这些都在networking.py中,设置如下图


image.png

当然,我们也可以对页面进行一些自己的diy设计


image.png

可以看出来静态页面是从templates文件夹下读取的,所以我们可以对页面进行更改.或者我们想要简单的添加一些内容,可以试试模仿标题和描述那样,调用Markdown()进行添加


image.png

image.png

当然如果想要创造更复杂的页面,就需要使用Blocks一点点的组建页面,更详细的内容有兴趣的可以去官网文档中好好查看.


目录
相关文章
|
2月前
|
安全 前端开发 API
【Azure 应用服务】Azure Web App 服务默认支持一些 Weak TLS Ciphers Suite,是否有办法自定义修改呢?
【Azure 应用服务】Azure Web App 服务默认支持一些 Weak TLS Ciphers Suite,是否有办法自定义修改呢?
|
3月前
|
存储 自然语言处理 API
通义万相AIGC技术Web服务体验评测
随着人工智能技术的不断进步,图像生成技术已成为创意产业的一大助力。通义万相AIGC技术,作为阿里云推出的一项先进技术,旨在通过文本到图像、涂鸦转换、人像风格重塑及人物写真创建等功能,加速艺术家和设计师的创作流程。本文将详细评测这一技术的实际应用体验。
137 4
|
2月前
|
JSON 定位技术 数据格式
web GIS神器,一行命令快捷构建精灵图服务
web GIS神器,一行命令快捷构建精灵图服务
|
2月前
|
网络协议 Serverless API
现代化 Web 应用构建问题之验证各个服务是否已成功部署如何解决
现代化 Web 应用构建问题之验证各个服务是否已成功部署如何解决
19 1
|
2月前
|
Java 缓存 数据库连接
揭秘!Struts 2性能翻倍的秘诀:不可思议的优化技巧大公开
【8月更文挑战第31天】《Struts 2性能优化技巧》介绍了提升Struts 2 Web应用响应速度的关键策略,包括减少配置开销、优化Action处理、合理使用拦截器、精简标签库使用、改进数据访问方式、利用缓存机制以及浏览器与网络层面的优化。通过实施这些技巧,如懒加载配置、异步请求处理、高效数据库连接管理和启用GZIP压缩等,可显著提高应用性能,为用户提供更快的体验。性能优化需根据实际场景持续调整。
50 0
|
2月前
|
Java 网络架构 数据格式
Struts 2 携手 RESTful:颠覆传统,重塑Web服务新纪元的史诗级组合!
【8月更文挑战第31天】《Struts 2 与 RESTful 设计:构建现代 Web 服务》介绍如何结合 Struts 2 框架与 RESTful 设计理念,构建高效、可扩展的 Web 服务。Struts 2 的 REST 插件提供简洁的 API 和约定,使开发者能快速创建符合 REST 规范的服务接口。通过在 `struts.xml` 中配置 `<rest>` 命名空间并使用注解如 `@Action`、`@GET` 等,可轻松定义服务路径及 HTTP 方法。
38 0
|
2月前
|
前端开发 API 开发者
JSF与RESTful服务的完美邂逅:如何打造符合现代Web潮流的数据交互新体验
【8月更文挑战第31天】随着互联网技术的发展,RESTful架构风格因其实现简便与无状态特性而在Web服务构建中日益流行。本文探讨如何结合JavaServer Faces (JSF) 和 JAX-RS 构建RESTful API,展示从前端到后端分离的完整解决方案。通过定义资源类、配置 `web.xml` 文件以及使用依赖注入等步骤,演示了在JSF项目中实现RESTful服务的具体过程,为Java开发者提供了实用指南。
32 0
|
2月前
|
JSON API 数据库
探索FastAPI:不仅仅是一个Python Web框架,更是助力开发者高效构建现代化RESTful API服务的神器——从环境搭建到CRUD应用实战全面解析
【8月更文挑战第31天】FastAPI 是一个基于 Python 3.6+ 类型提示标准的现代 Web 框架,以其高性能、易用性和现代化设计而备受青睐。本文通过示例介绍了 FastAPI 的优势及其在构建高效 Web 应用中的强大功能。首先,通过安装 FastAPI 和 Uvicorn 并创建简单的“Hello, World!”应用入门;接着展示了如何处理路径参数和查询参数,并利用类型提示进行数据验证和转换。
43 0
|
3月前
|
Java Serverless Docker
函数计算产品使用问题之使用Docker镜像部署的Web服务如何获取客户端的真实IP
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
2月前
|
数据可视化 Python
通过python建立一个web服务查看服务器上的文本、图片、视频等文件
通过python建立一个web服务查看服务器上的文本、图片、视频等文件
31 0
下一篇
无影云桌面