当前位置: 首页 > news >正文

利用uvicorn、Starlette和pipeline将一个训练好的大模型发布成一个web服务

技术名词:

1、Starlette:

它是一个轻量级、高度可用性和可扩展性的Web框架,它专门为异步应用程序设计。 Starlette基于Python 3.6+的异步/协程语法,具有快速响应性能和低延迟。你可以将它理解为Java的Spring。

安装:pip install starlette

2、uvicorn

它是一个Python Web服务器,用于实现基于ASGI(异步服务器网关接口)的异步Web应用程序。它是用Python编写的,可高效、高性能地处理HTTP请求和响应,而且很容易配置和部署。你可以将它理解为Java的Tomcat。

安装:pip install uvicorn

编写一个web服务server.py:

from starlette.applications import Starlette
from starlette.responses import JSONResponse
from starlette.routing import Route
from transformers import pipeline
from transformers import AutoModelForSequenceClassification, AutoTokenizer
import asyncioasync def homepage(request):payload = await request.body()string = payload.decode("utf-8")response_q = asyncio.Queue()await request.app.model_queue.put((string, response_q))output = await response_q.get()return JSONResponse(output)async def server_loop(q):model_name = "/data/checkpoint-10598"tokenizer = AutoTokenizer.from_pretrained(model_name)tokenizer.deprecation_warnings["Asking-to-pad-a-fast-tokenizer"] = Truemodel = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=4)pipe = pipeline("text-classification", model=model, tokenizer=tokenizer)while True:(string, response_q) = await q.get()out = pipe(string)await response_q.put(out)app = Starlette(routes=[Route("/", homepage, methods=["POST"]),],
)@app.on_event("startup")
async def startup_event():q = asyncio.Queue()app.model_queue = qasyncio.create_task(server_loop(q))

启动服务:

uvicorn server:app --port 8000

测试:

[ipa@comm]$ curl -X POST -d "我爱你" http://127.0.0.1:6788

结果:

[{"label":"LABEL_3","score":0.8000535368919373}]

总结:

利用transformers的pipeline来搭建一个Python的web服务,这样我们微调的大模型就能很简单的发布给他人使用,非常的方便便捷。

当然这个样例程序还有需要待完善的地方,你觉得该如何完善?

http://www.lryc.cn/news/176956.html

相关文章:

  • 贝赛尔曲线 - Vue3实现加入购物车抛物线效果组件
  • AddressSanitizer failed to allocate 0xdfff0001000 (15392894357504) bytes解决方法
  • Fortinet 2023上半年全球威胁态势研究报告:勒索软件检测成下降趋势,针对性攻击持续升温
  • MySQL ——多表连接查询
  • 前沿技术 --> 待定
  • Linux定时python脚本(crontab版本)
  • 修改 Ubuntu .cache 和 pip cache 默认路径
  • 【Java SE】Lambda表达式
  • Kafka-UI
  • Unity 制作登录功能02-创建和链接数据库(SQlite)
  • 算法 岛屿数量-(递归回溯)
  • 安卓恶意应用识别(番外篇)(Python并行(多线程or多进程)执行cmd)
  • 基于大语言模型扬长避短架构服务
  • 初识网络编程
  • 轻松使用androidstudio交叉编译libredwg库
  • 【C++杂货铺】一颗具有搜索功能的二叉树
  • uni-app使用vue3,在元素或组件实例上添加ref,用this.$refs显示undefined
  • 蜂蜜配送销售商城小程序的作用是什么
  • 大数据Flink(八十四):SQL语法的DML:窗口聚合
  • 系统集成|第十八章(笔记)
  • 480万商品,如何架构商品治理平台?
  • 【C++入门指南】C如何过渡到C++?祖师爷究竟对C++做了什么?
  • 简易磁盘自动监控服务
  • 【100天精通Python】Day65:Python可视化_Matplotlib3D绘图mplot3d,绘制3D散点图、3D线图和3D条形图,示例+代码
  • 十六,镜面IBL--预滤波环境贴图
  • 信息安全:恶意代码防范技术原理.
  • 开源媒体浏览器Kyoo
  • 人脸解锁设备时出现相机报错
  • 【广州华锐互动】利用VR开展工业事故应急救援演练,确保救援行动的可靠性和有效性
  • 还不知道数据类岗位的相关技能和职责吗?涤生大数据告诉你(二)