码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 利用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:

    1. from starlette.applications import Starlette
    2. from starlette.responses import JSONResponse
    3. from starlette.routing import Route
    4. from transformers import pipeline
    5. from transformers import AutoModelForSequenceClassification, AutoTokenizer
    6. import asyncio
    7. async def homepage(request):
    8. payload = await request.body()
    9. string = payload.decode("utf-8")
    10. response_q = asyncio.Queue()
    11. await request.app.model_queue.put((string, response_q))
    12. output = await response_q.get()
    13. return JSONResponse(output)
    14. async def server_loop(q):
    15. model_name = "/data/checkpoint-10598"
    16. tokenizer = AutoTokenizer.from_pretrained(model_name)
    17. tokenizer.deprecation_warnings["Asking-to-pad-a-fast-tokenizer"] = True
    18. model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=4)
    19. pipe = pipeline("text-classification", model=model, tokenizer=tokenizer)
    20. while True:
    21. (string, response_q) = await q.get()
    22. out = pipe(string)
    23. await response_q.put(out)
    24. app = Starlette(
    25. routes=[
    26. Route("/", homepage, methods=["POST"]),
    27. ],
    28. )
    29. @app.on_event("startup")
    30. async def startup_event():
    31. q = asyncio.Queue()
    32. app.model_queue = q
    33. asyncio.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服务,这样我们微调的大模型就能很简单的发布给他人使用,非常的方便便捷。

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

  • 相关阅读:
    【数据结构】二叉树的·深度优先遍历(前中后序遍历)and·广度优先(层序遍历)
    申请400电话的详细步骤及操作指南
    PerfView专题 (第六篇):如何洞察 C# 中 GC 的变化
    计算机毕业论文java毕业设计选题源代码ssm校园兼职系统|求职招聘系统
    MCDF实验2
    把这份关于软件测试一系列笔记研究完,进大厂是个“加分项”...
    Apollo 应用与源码分析:Monitor监控-软件监控-channel时间延迟监控
    测试员有必要转测试开发吗?
    k8s教程(10)-pod生命周期、重启策略及健康检查
    Restcloud ETL实践之数据行列转换
  • 原文地址:https://blog.csdn.net/duzm200542901104/article/details/133362517
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号