利用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服务,这样我们微调的大模型就能很简单的发布给他人使用,非常的方便便捷。
当然这个样例程序还有需要待完善的地方,你觉得该如何完善?
相关文章:
利用uvicorn、Starlette和pipeline将一个训练好的大模型发布成一个web服务
技术名词: 1、Starlette: 它是一个轻量级、高度可用性和可扩展性的Web框架,它专门为异步应用程序设计。 Starlette基于Python 3.6的异步/协程语法,具有快速响应性能和低延迟。你可以将它理解为Java的Spring。 安装:…...
贝赛尔曲线 - Vue3实现加入购物车抛物线效果组件
贝赛尔曲线 - Vue3实现加入购物车抛物线效果组件(可连续多个动画,动态回收DOM) 前言 在前几天的一次迭代中,我遇到了这么一个需求,模仿支付宝首页应用中心的编辑功能,支持编辑首页展示的应用,…...
AddressSanitizer failed to allocate 0xdfff0001000 (15392894357504) bytes解决方法
打开一个编译选项启用ASan的程序: AddressSanitizer failed to allocate 0xdfff0001000 (15392894357504) bytes然后程序启动失败。 原因: [cfe-dev] Question about Clang/LLVM addresssanitizer /proc/sys/vm/overcommit_memory是一个用于控制内存…...
Fortinet 2023上半年全球威胁态势研究报告:勒索软件检测成下降趋势,针对性攻击持续升温
近日,专注于推动网络与安全融合的全球网络安全领导者Fortinet(NASDAQ:FTNT),发布《2023上半年全球威胁态势研究报告》。报告显示,2023 年上半年勒索软件检出数量继续下降、高级持续性威胁(APT&a…...
MySQL ——多表连接查询
一、(左、右和全)连接概念 内连接: 假设A和B表进行连接,使用内连接的话,凡是A表和B表能够匹配上的记录查询出来。A和B两张表没有主付之分,两张表是平等的。 关键字:inner join on 语句…...
前沿技术 --> 待定
一、可会可不会 1.1如何优雅的编写技术文档 网址: 如何优雅的编写技术文档? - YouTube...
Linux定时python脚本(crontab版本)
1.0 使用Linux系统命令 crontab 自带的定时命令2.0 crontab的使用 2.1 添加定时任务 crontab -e2.2 查看定时任务的完成情况 2.2.1 查看日志 tail -f /var/log/syslog | grep CRON 2.2.2 任务执行情况 grep CRON /var/log/syslog 2.3 定时任务的规则 每隔一分钟执行一次…...
修改 Ubuntu .cache 和 pip cache 默认路径
修改 Ubuntu .cache 和 pip cache 默认路径 非常不建议修改 .cache 默认路径,除非你知道修改后的影响。 执行下面命令进行修改, vi /root/.bashrc--- 追加 export XDG_CACHE_HOME/u01/.cache export PIP_CACHE_DIR/u01/.cache ---完结!...
【Java SE】Lambda表达式
目录 ♫什么是Lambda表达式 ♫Lambda表达式的语法 ♫函数式接口 ♫Lambda表达式的使用 ♫变量捕获 ♫ Lambda表达式在集合中的使用 ♪Collection的foreach(): ♪List的sort(): ♪Map的foreach() ♫什么是Lambda表达式 Lambda 表达式是 Java SE 8中一个…...
Kafka-UI
有多款kafka管理应用,目前选择的是github上star最多的UI for Apache Kafka。 关于 To run UI for Apache Kafka, you can use either a pre-built Docker image or build it (or a jar file) yourself. UI for Apache Kafka is a versatile, fast, and lightweight…...
Unity 制作登录功能02-创建和链接数据库(SQlite)
国际惯例:先看效果 1.SQlite是一种嵌入型数据库 在Unity开发游戏时使用SQLite有多种原因,以下是其中一些主要原因: 嵌入式数据库:SQLite是一个嵌入式数据库引擎,这意味着它不需要单独的服务器进程。这使得使用SQLite非…...
算法 岛屿数量-(递归回溯)
牛客网 BM57. 二维矩阵,值为1表示岛屿,0表示海洋,求海洋中岛屿数量。 解题思路: 遍历二维数组,值为1增加岛屿数量记数,同时对此位置进行单独递归遍历上下左右4个方向,将数组坐标范围内同时值为1的元素置…...
安卓恶意应用识别(番外篇)(Python并行(多线程or多进程)执行cmd)
前言 本人为了批量反编译,不得不涉及到批量执行,之前没有彻底理解有关于多线程的概念和python方法,现在只能一步一步尝试,并且实践,写本文以记录。 1. 进程与线程 1.1 什么是进程? 1.1.1 概念 进程是一…...
基于大语言模型扬长避短架构服务
秘诀: 扬泛化之长, 避时延之短...
初识网络编程
一、概述 地球村:亦称世界村,是通过电子媒介将世界紧密联系起来的形象表达,是信息网络时代的集中体现 TCP和UDP: TCP:打电话 -->连接 -->接了 -->通话 UDP:发送完即可 -->接收 计算机网络&a…...
轻松使用androidstudio交叉编译libredwg库
对于安卓或嵌入式开发者而言,交叉编译是再熟悉不过的操作了,可是对于一些刚入门或初级开发者经常会遇到这样的问题:如何交叉编译C++库来生成安卓下的so库呢? 最近有一些粉丝找到我求救,那么我最近刚好有空大致研究了下,帮他们成功编译了其中一个libredwg的C++库,这篇文章…...
【C++杂货铺】一颗具有搜索功能的二叉树
文章目录 一、二叉搜索树概念二、二叉搜索树的操作2.1 二叉搜索树的查找2.2 二叉搜索树的插入2.3 二叉搜索树的删除 三、二叉搜索树的实现3.1 BinarySearchTreeNode(结点类)3.2 BinarySearchTree(二叉搜索树类)3.2.1 框架3.2.2 in…...
uni-app使用vue3,在元素或组件实例上添加ref,用this.$refs显示undefined
项目中引用了一个UI组件库,在表单上添加了ref属性,方便提交时验证。触发提交方法时显示不存在这个方法或this.$refs为undefined。 <u--form labelPosition"left" :model"userInfo" :rules"rules" ref"loginForm&…...
蜂蜜配送销售商城小程序的作用是什么
蜂蜜是农产品中重要的一个类目,其受众之广市场需求量大,但由于非人人必需品,因此传统线下门店经营也面临着痛点,线上入驻平台也有很多限制难以打造自有品牌,无法管理销售商品及会员、营销等,缺少自营渠道&a…...
大数据Flink(八十四):SQL语法的DML:窗口聚合
文章目录 SQL语法的DML:窗口聚合 一、滚动窗口(TUMBLE)...
解密Java静态调用图:架构师的高效分析实战
解密Java静态调用图:架构师的高效分析实战 【免费下载链接】java-callgraph2 Programs for producing static call graphs for Java programs. 项目地址: https://gitcode.com/gh_mirrors/ja/java-callgraph2 你是否曾面对一个庞大的Java项目,想要…...
Circuit Playground开发板入门:从零到一玩转集成传感器与Arduino编程
1. 项目概述与核心价值如果你对电子制作和编程感兴趣,但一看到复杂的电路图和密密麻麻的代码就头疼,那么Circuit Playground可能就是为你量身打造的“入场券”。它不是一个需要你从零焊接电阻、电容的散件包,而是一块将所有常用传感器和交互元…...
基于MCP协议构建AI驱动的加密货币数据智能查询系统
1. 项目概述:当加密货币数据需要“智能”起来如果你正在开发一个需要实时加密货币数据的应用,或者你是一个数据分析师,每天需要手动从几十个交易所网站和API里抓取价格、市值、交易量,那么你大概率已经对数据源的分散、格式的不统…...
AI Agent工作流引擎:从DAG编排到生产级应用实践
1. 项目概述:AI Agent工作流引擎的诞生与价值最近在GitHub上看到一个挺有意思的项目,叫“ai-agent-workflow”。光看名字,你可能觉得这又是一个关于AI智能体的框架,但仔细研究它的代码和设计理念,你会发现它瞄准的是一…...
突然想写一些东西
---title: blogdate: 2026-05-15 02:18:57tags: ["chitchat"]about: 突然想写一些东西---马上毕业了,在写致谢的时候发现好像想写的东西挺多的,但是不知道怎么写出来了,可能是因为很久没写东西了?也可能是AI用多了自己深…...
ASCII艺术乱码修复:ascii-fix工具解决终端编码兼容性问题
1. 项目概述:当字符艺术遇上编码乱码如果你经常在终端里折腾,或者喜欢用命令行工具处理文本,那你肯定遇到过这种情况:一个精心设计的ASCII艺术Logo,或者一个结构清晰的表格,在某个终端或编辑器里打开时&…...
ARM EDPRSR寄存器解析与嵌入式调试实践
1. ARM EDPRSR寄存器深度解析在嵌入式系统开发中,调试功能的重要性不言而喻。作为ARM架构调试系统的核心组件之一,EDPRSR(External Debug Processor Status Register)寄存器为开发者提供了处理器状态监控的关键窗口。这个32位寄存…...
从零到一:Ubuntu Server上构建生产级Slurm计算集群
1. 环境准备与系统配置 在开始构建Slurm集群之前,我们需要确保所有节点都处于干净、一致的初始状态。我建议使用Ubuntu Server 22.04 LTS版本,这个长期支持版本经过充分测试,稳定性有保障。实际部署中发现,不同Linux发行版间的软件…...
Prometheus数据采集扩展:claw-prometheus项目详解与实战
1. 项目概述:一个为Prometheus量身定制的“数据抓取器”在云原生和微服务架构大行其道的今天,监控系统的地位不言而喻。Prometheus,作为这个领域的“事实标准”,以其强大的多维数据模型和灵活的查询语言(PromQL&#x…...
历史学博士生紧急避坑指南:NotebookLM误用导致的3类史料误读及权威校验方案
更多请点击: https://intelliparadigm.com 第一章:NotebookLM在历史学研究中的定位与风险图谱 NotebookLM 是 Google 推出的基于用户上传文档构建语义理解模型的实验性工具,其核心能力在于对私有史料(如扫描PDF、OCR文本、手稿转…...
