百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Ascend+FastAPI+ Uvicorn 实现推理

off999 2025-02-07 18:44 105 浏览 0 评论

1、FastAPI & Uvicorn

FastAPI

FastAPI 是一个用于构建 API 的现代、快速(高性能)的 Python Web 框架,专为在 Python 中构建 RESTful API 而设计,具有以下特点:

高性能

  • 性能卓越:FastAPI 的性能可与 NodeJS 和 Go 等语言的高性能 Web 框架相媲美,是最快的 Python Web 框架之一。这得益于其底层的 Starlette 框架和异步编程模型,能够充分利用 Python 异步生态系统,提供卓越的性能和吞吐量。
  • 异步支持:FastAPI 支持基于 Python 3.7 及以上版本的异步编程,使得处理 IO 密集型任务更加高效,非常适合高并发的场景。
from fastapi import FastAPI
app = FastAPI()

@app.get("/")
async def read_root():
    return {"Hello": "World"}

@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str = None):
    return {"item_id": item_id, "q": q}

在这个例子中,我们定义了两个路由:一个根路由 / 和一个带参数的路由 /items/{item_id}。通过装饰器 @app.get(),我们指定了 HTTP 方法和路由路径。函数参数将自动从查询参数、路径参数、请求头等中提取,并进行数据验证。

Uvicorn

Uvicorn 是一个基于 ASGI(Asynchronous Server Gateway Interface)的轻量级异步服务器,用于运行 Python Web 应用程序,特别是那些基于 ASGI 的现代异步框架,如 FastAPI、Starlette 等。以下是关于 Uvicorn 的详细介绍:

基本功能

  • 异步支持:Uvicorn 是一个异步服务器,能够充分利用 Python 的异步编程特性。它使用 Python 的 asyncio 库来处理并发请求,使得应用程序能够更高效地处理大量并发连接,特别适合处理 IO 密集型任务,如网络请求、数据库操作等。
  • 高性能:Uvicorn 的性能非常出色,它能够快速地处理请求和响应,提供高吞吐量和低延迟的服务。在许多基准测试中,Uvicorn 的性能表现与一些传统的同步服务器(如 Gunicorn)相比具有显著优势,尤其是在处理大量并发请求时。

FastAPI + Uvicorn 的结合

  • 无缝集成:Uvicorn 与 FastAPI 结合使用非常方便。FastAPI 生成的 ASGI 应用可以直接由 Uvicorn 运行,无需额外的适配。这种组合充分利用了 FastAPI 的开发友好性和 Uvicorn 的高性能,使得开发和部署异步 Web 应用变得非常简单。
  • 生产环境:在生产环境中,Uvicorn 可以与 Nginx 等反向代理服务器配合使用,提供更稳定、更安全的服务。Nginx 可以处理静态文件、负载均衡、SSL/TLS 加密等任务,而 Uvicorn 专注于处理动态请求。

假设有一个简单的 FastAPI 应用 app.py

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def read_root():
    return {"Hello": "World"}

可以通过以下命令使用 Uvicorn 启动该应用:

bash复制uvicorn app:app --host 0.0.0.0 --port 8000

访问 http://localhost:8000 即可看到返回的 JSON 响应。

2、Ascend上跑推理

方案设计

具体的模型通过transformers 库的from_pretrained接口从xxx-config配置文章引入。

model = AutoModel.from_pretrained("xxx-config", torch_dtype="auto").to("npu:0"),

引入。然后就是,以FastAPI + Uvicorn启动一个web服务,通过generate_chat_output运行推理,获取推理结果。

整体方案代码参考如下

import torch
import torch_npu
import uvicorn
from typing import List
from fastapi import FastAPI
from contextlib import asynccontextmanager
from transformers import AutoTokenizer, AutoModel
from fastapi.middleware.cors import CORSMiddleware

# 设置卡
torch.npu.set_device("npu:0")

# 配置tokenizer 
tokenizer = AutoTokenizer.from_pretrained("xxx-config")

# 获取模型
model = AutoModel.from_pretrained("xxx-config", torch_dtype="auto").to("npu:0")

@asynccontextmanager
async def lifespan(app: FastAPI):
    yield
    if torch_npu.npu.is_available():
        torch_npu.npu.empty_cache()

# 实例化api服务器
app = FastAPI(lifespan=lifespan)

app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
)

# 推理实现
@app.post("/llm/chat")
async def generate_chat_output(item: Item):
    try:
        texts = [t.replace("\n", " ") for t in item.sentences]
        encoded_inputs = tokenizer(texts, truncation=True, return_tensors="pt", padding=True, max_length=512).to("npu:0")
        with torch.no_grad():
            model_output = model(**encoded_inputs)
    except Exception as e:
        traceback.print_exc()

    return sequence_embeddings.tolist()

# uvicorn提供服务化
if __name__ == '__main__':
    uvicorn.run(app, host="0.0.0.0", port=8080)

构建测试

测试文件test.py如下:

import httpx
data = {
    "sentences": ["中国GDP为129.43万亿元,GDP增速为5.25%,人均GDP为8.94万元/人,人均GDP增速为5.40%,其中第一产业占6.90%,第二产业占36.80%,第三产业占56.30%"]
}
def request_url():
    with httpx.Client() as client:
        res = client.post("http://127.0.0.1:1025/llm/chat", json=data)
        print(res.json())

运行

python test.py

客户端和服务器均正常。

添加图片注释,不超过 140 字(可选)

上述他图片结果,仅攻参考。

相关推荐

photoshop下载安装教程(ps下载安装教程视频)

1.下载安装并激活Photoshop需要一定的步骤和技巧,但是只要按照正确的方法进行,就可以成功完成。2.首先需要从Adobe官网下载Photoshop的安装程序,然后按照提示进行安装。安装完成后...

防火墙软件下载(360防火墙app下载)

如果你的刚下载的软件被防火墙阻止了,你可以尝试以下方法解决问题。首先,确保你的防火墙设置允许该软件的访问权限。你可以在防火墙设置中找到应用程序列表,然后添加该软件到允许访问的列表中。如果你不确定如何进...

51漫画app下载安装在线观看(51漫画app下载安装免费下)

51动漫的登录账号,需要先在51动漫官方网站进行注册。注册完成后,便可用该账号在51动漫客户端进行登录。具体登录步骤是:打开51动漫客户端,点击右上角头像进行登录,在弹出的登录页面中输入注册时使用的账...

冒险岛手游官网下载(冒险岛手游 百度百科)

要下载冒险岛的官方游戏,请按照以下步骤操作:首先,打开您的网络浏览器,然后在搜索引擎中输入“冒险岛官网”。点击搜索结果中的官方网站链接,进入官方网站。在网站上,寻找游戏下载页面或下载按钮。点击下载按钮...

雨水情测报系统(雨水情测报系统验收)

为加强防汛管理,规范水雨情测报工作,明确水雨情测报条件、测报频次、记录报送等基本要求。适用于总库容10万立方米以上、1000万立方米以下小型水库水雨情测报工作。应具备必要的水情、雨情观测设施,也可利用...

软件应用商店大全(应用商店软件下载排行榜)

360手机助手是android智能手机的手机管理专家。提供海量的游戏、软件、音乐、小说、视频、图片,通过它轻松下载、安装、管理手机资源。所有提供信息资源,全部经过360安全检测中心的审核认证,绿色无毒...

下书网电子书下载网站(下书网免费下载小说)

存放在我的书架里,可以查看

cad怎么下载(cad怎么下载到电脑上)

1、在搜索引擎中输入cad安装包并点击搜索,选择一款安装包进行下载。2、将下载的cad安装包解压出来,右键点击解压文件,在解压出来的文件里面找到setup安装程序,双击开始安装。3、点击开始安装,勾选...

ps教程免费视频教程全集(ps教程视频全集观看)

Photoshop自带的教程关了以后怎么找到首先我们打开Photoshop,在最上面的工具栏中找到窗口。点击窗口,在下面找到“学习”工具。然后点击,教程就会出现啦。Photoshop自带的教程关了以后...

抖抈短视频app下载安装(抖抈短视频app下载大全)

抖拍抖拍app56个民族服饰换装特效视频拍摄是最近非常火爆的民族服饰换装拍摄视频的特效素材,涵盖了非常多好玩的特效素材可以免费进行拍摄使用,在线一键换装56个民族的服饰拍摄,感受各地的异域风情,看看自...

qq电脑版免费下载(qq 电脑版官方下载免费下载)

下载QQ的方法如下:1)登录QQ手机版官网http://im.qq.com/mobileqq选择你的手机机型或手机操作平台进行下载。2)通过AppStore(苹果商城)、手机应用商店搜索“QQ...

驾考宝典下载安装(河南驾考宝典下载安装)

1、可以在电脑上下载传到手机上。2、可以直接在手机上下载,安卓市场里就有。驾考宝典电脑版激活方法如下:首先,打开驾考宝典电脑版软件,点击右上角的“激活”按钮,然后输入购买时所提供的激活码,点击“确定...

天气预报30天查询(天气预报30天查询温州市)

一月份天气预报查询是可以查询30天的天气预报。现在的天气预报都比较准,能查询当天的,也能查询一星期半个月的,查询30天的也可以,只是天数越多误差也就越大了,一般都会查询几天的天气预报和十五天的天气情况...

姓名打分免费查询(姓名打分免费查询周易官网)

妈妈好孕网的姓名打分测试是一种基于姓名学理论的个性特征及吉凶预测方法,通过对汉字笔画、五行属性等进行分析,来评估姓名所包含的信息和作用。但是,这种测试并没有科学依据,也无法完全准确地反映出一个人的性格...

游戏下载软件(十大手游平台app)

App里面下载游戏,我们只能在手机app里面就能下载,以下就是下载的方法首先我们打开手机,在手机页面中,我们找到下载游戏的app的图标,然后我们点击打开App进入页面,我们点击搜索框搜索游戏,...

取消回复欢迎 发表评论: