Gradio快速搭建ML/DL Web端服务
文章目录
- Gradio快速搭建ML/DL Web端服务
- 前言
- 开始
- 模型训练
- 部署
- 源码部分
Gradio快速搭建ML/DL Web端服务
前言
当我们训练好了某个模型并且效果还不错时,最先想到的应该是部署.部署又可以分为线上Web服务和边缘模块上;为了汇报的时候往往还是选择线上部署,毕竟盒子部署好了还得配置相应的硬件输入也不方便展示.在这个专栏之前尝试用fastapi
搭建了Web服务,并且将一些算法模型部署到api接口中,但是由于要自己设计一些预处理工作,路由,附加功能以及页面UI感觉很麻烦.所以今天就介绍一下这个基于fastapi
构建的一个非常方便就可以部署模型且功能强大的Web框架—Gradio
官网的链接在这里,大家可以先去了解一下Gradio 虽然目前没有中文文档,但是我感觉整个文档写的还是比较好读懂的,所以一步步模仿文档操作也不难.
介绍了这么多,下面就开始写demo.计划是这样的
- 撸一个简单的层数较少的ResNet,在
cifar10
上训练一下,得到一个效果好点的模型(这里不用迁移主要是之前为了实验重参数化在ResNet结构上效果不好然后自己写了个简单的顺便拿来用了) - 使用
Gradio
编写一个Web服务,其实只要我们实现推理的函数就行,其他的只用实例化接口,非常快捷.
开始
模型训练
最基本的残差模块堆一堆,接个全连接层分类然后就可以训练了.这里面训练特意尝试了一下最近几年提出的Ranger优化器代替之前的sgd,adam之类的,效果确实会有一定的提升.
来看看官网给出的效果对比,经过我的训练结果来看也确实如此.
使用的最简单方法只需要把ranger21.py下载下来,然后训练的时候引用就可以了或者按照官网用pip安装pip install git+https://github.com/lessw2020/Ranger21.git
只有几层的模型最终效果也还不错
这样我们就得到了一个效果还可以的模型,下一步就使用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)
上面的解释基于默认的``SHAP`,也可以设置自己的解释函数.再来看看其他的结果
到这里基本的部署部分就实现了,但是和以往惯例一样,还是要带着看看源码的.
源码部分
开头我说这是基于fastapi
封装的框架,那就来好好看看它的一些实现.最基本的既然是Web框架,那就先看看它的路由部分.
很明显,就是利用fastapi来搭建路由的.App
继承了FastAPI
,实现了自己的相关路由(login,config,file等等)
然后在blocks
中有更多功能的实现,包括前处理,运行注册函数和后处理,这也是调用预测的重要代码
再来看看基础设置,类似于url,端口号这些都在networking.py
中,设置如下图
当然,我们也可以对页面进行一些自己的diy设计
可以看出来静态页面是从templates
文件夹下读取的,所以我们可以对页面进行更改.或者我们想要简单的添加一些内容,可以试试模仿标题和描述那样,调用Markdown()
进行添加
当然如果想要创造更复杂的页面,就需要使用Blocks
一点点的组建页面,更详细的内容有兴趣的可以去官网文档中好好查看.
Gradio快速搭建ML/DL Web端服务相关推荐
- zabbix搭建完,web端显示“zabbix服务器端运行中 不”
zabbix搭建完,web端显示"zabbix服务器端运行中 不"如下图: 但是查看服务器的状态是running 然后查日志/var/log/zabbix/zabbix-serve ...
- 深度学习Web端服务搭建及部署服务器
本文章的所有代码和相关文章, 仅用于经验技术交流分享,禁止将相关技术应用到不正当途径,滥用技术产生的风险与本人无关. 本文章是自己学习的一些记录. 主要配置信息 前端:html.css.js等 后端: ...
- 30分钟快速搭建移动应用直传OSS服务
30分钟快速搭建移动应用直传服务 背景 这是一个移动互联的时代.手机APP上传的数据会越来越多.把数据存储的问题交给OSS, 让开发者能更加专注于自己的应用逻辑. 那么怎么样基于OSS构建一个APP存 ...
- 如何快速搭建一个 “简单模式” 的微服务架构
何谓微服务架构的简单模式? 相对于大型互联网平台动辄几万并发的访问量,或者每天多次的在线版本发布,绝大多数企业和项目并没有这样的需求.他们关注的是如何更好地提高开发效率,如何更快地实现新需求,如何更便 ...
- 快速搭建自己的GPT网页服务
国内访问openAI的chatGPT需要使用魔法,非常不方便,GitHub上的一个开源项目可以让你快速搭建属于自己的GPT网页 登录GitHub,搜索chatGPT Next Web. 如上图 下滑找 ...
- Tomcat【环境搭建 02】Web端403 Access Denied You are not authorized to view this page解决方法(Tomcat 10.2.12 版本)
1. 问题说明 启动Tomcat之后,我们常常是要打开Web端进行验证,其实Web端的功还有很多,但是有一些管理页面权限不足: 我们点击 Manager Status 或 Manager App 链接 ...
- 一小时快速搭建基于阿里云容器服务-Kubernetes的Web应用
本文面向的读者 如果您是一个Kubernetes的初学者,本文可以帮助你快速在云上搭建一个可实际使用的集群环境,并发布自己的第一个应用.你无须提前准备任何的硬件资源或者下载任何的软件包. 如果您已经 ...
- 快速搭建 Serverless 人脸识别离线服务
简介 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute):函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传.函数计算准 ...
- 快速搭建一个简易的KMS 服务
xu言: 之前,闹的沸沸扬扬的KMS激活工具自身都存在问题的事.让我们对以前的什么小马激活.kms激活.各种激活工具都去打了一个深深的"?",到底哪些能用.哪些不能用.有些还注明的 ...
最新文章
- C# 中xml数组的序列和反序列化方法
- 11没有源码注释_我们为什么要看源码、应该如何看源码?
- hibernate 刷新_Hibernate事实:了解刷新操作顺序很重要
- python(1) - 数据类型和变量
- python选取tensor某一维_Pytorch的Tensor操作(1)
- ajax是什么实现的步骤,AJAX使用步骤及实现过程
- Ubuntu-创建wifi热点-Android能连接(2)
- 《Python简明教程》一
- linux shell文件转码命令:iconv
- apollo(阿波罗) 分布式部署指南
- 快手-开眼快创 Flutter 实践
- 基于单片机的超声波测距
- 计算机专业就业现状及指导
- Cesium源码解读系列(一):GeoJsonDataSource如何处理geojson格式的数据
- 区别wchar_t,char,WCHAR
- 【ADNI】数据预处理(1)SPM,CAT12;数据集
- 华科世界第六,北邮碾压伯克利:USNews世界大学CS榜发布
- cass里填充面怎么导入arcgis_ArcGIS与CASS在地籍建库中的结合应用视频课程(GIS思维)...
- [激光原理与应用-51]:《激光焊接质量实时监测系统研究》-2-激光焊接及其物理现象
- Radmin FAQ