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一点点的组建页面,更详细的内容有兴趣的可以去官网文档中好好查看.


目录
相关文章
|
3月前
|
XML JSON 数据安全/隐私保护
Web服务
【10月更文挑战第18天】Web服务
69 9
|
5月前
|
安全 前端开发 API
【Azure 应用服务】Azure Web App 服务默认支持一些 Weak TLS Ciphers Suite,是否有办法自定义修改呢?
【Azure 应用服务】Azure Web App 服务默认支持一些 Weak TLS Ciphers Suite,是否有办法自定义修改呢?
|
3月前
|
XML JSON 安全
Web服务是通过标准化的通信协议和数据格式
【10月更文挑战第18天】Web服务是通过标准化的通信协议和数据格式
197 69
|
2月前
|
Go UED
Go Web服务中如何优雅平滑重启?
在生产环境中,服务升级时如何确保不中断当前请求并应用新代码是一个挑战。本文介绍了如何使用 Go 语言的 `endless` 包实现服务的优雅重启,确保在不停止服务的情况下完成无缝升级。通过示例代码和测试步骤,详细展示了 `endless` 包的工作原理和实际应用。
65 3
|
2月前
|
JSON Go UED
Go Web服务中如何优雅关机?
在构建 Web 服务时,优雅关机是一个关键的技术点,它确保服务关闭时所有正在处理的请求都能顺利完成。本文通过一个简单的 Go 语言示例,展示了如何使用 Gin 框架实现优雅关机。通过捕获系统信号和使用 `http.Server` 的 `Shutdown` 方法,我们可以在服务关闭前等待所有请求处理完毕,从而提升用户体验,避免数据丢失或不一致。
38 1
|
2月前
|
XML 安全 PHP
PHP与SOAP Web服务开发:基础与进阶教程
本文介绍了PHP与SOAP Web服务的基础和进阶知识,涵盖SOAP的基本概念、PHP中的SoapServer和SoapClient类的使用方法,以及服务端和客户端的开发示例。此外,还探讨了安全性、性能优化等高级主题,帮助开发者掌握更高效的Web服务开发技巧。
|
3月前
|
XML JSON 安全
定义Web服务
【10月更文挑战第18天】定义Web服务
90 12
|
3月前
|
前端开发 Java API
JAVA Web 服务及底层框架原理
【10月更文挑战第1天】Java Web 服务是基于 Java 编程语言用于开发分布式网络应用程序的一种技术。它通常运行在 Web 服务器上,并通过 HTTP 协议与客户端进行通信。
56 1
|
3月前
|
应用服务中间件 网络安全 nginx
nginx作为web服务以及nginx.conf详解
nginx作为web服务以及nginx.conf详解
|
3月前
|
XML 关系型数据库 MySQL
Web Services 服务 是不是过时了?创建 Web Services 服务实例
本文讨论了WebServices(基于SOAP协议)与WebAPI(基于RESTful)在开发中的应用,回顾了WebServices的历史特点,比较了两者在技术栈、轻量化和适用场景的差异,并分享了使用VB.net开发WebServices的具体配置步骤和疑问。
76 0