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

Ascend+FastAPI+ Uvicorn 实现推理

off999 2025-02-07 18:44 87 浏览 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 字(可选)

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

相关推荐

办公软件office下载(office办公软件正版下载)

office字体都变成了英文是因为设置了英文模式。具体的解决步骤如下:我们需要准备的材料分别是:电脑、Word文档。1、首先我们打开Word文档,点击打开左上角的文件中的“选项”。2、然后我们在弹出来...

windows打开注册表(windows打开注册表编辑器的命令)

如果装了杀毒软件,并且开了注册表保护功能,关闭此功能,如果关闭后可以正常写入了,说明是这个问题造成的,之所以打开后不能写入了,是由于注册表保护功能的提示项目被关闭了,打开设置项目,打开提示即可,这样以...

win7本地组策略编辑器怎么打开

1、在桌面上新建一个记事本文件,随后双击打开它将下方的代码全部复制粘贴进去:  @echooff  pushd"%~dp0"  dir/bC:\Windows\servicing\Packag...

笔记本连接不上无线网(笔记本连接不上无线网络)

1、笔记本电脑连不上wifi原因有很多,如果是所有WIFI都连接不上,那就是电脑自身设置出错。2、方法一:电脑连不上wifi,图标会有黄色叹号,在右下角右键点击无线wifi图标,再点击打开网络和共享中...

国内杀毒软件(国内杀毒软件有哪些完整名单)

小米手机自带的安全中心中就有病毒扫描功能,可能小米与360不太兼容,不过我觉得小米自带的杀毒也可以的,不用再单独下载一个杀毒软件了,我觉得是软件问题,因为有的软件手机是不支持的,强行安装后就会出现启动...

tplink18r18e如何设置(tplink19216811路由器设置)

TL-H28R路由器恢复了出厂设置,现在要设置其连接宽带上网,需要经过以下几个步骤:1、TL-H28R路由器与TL-H28E扩展器注册;将TL-H28R路由器和TL-H28E扩展器分别插到电源插座上,...

win7现在还能用吗(win7现在还能用么2021年)
win7现在还能用吗(win7现在还能用么2021年)

WINDOWS7系统还可以用多久?什么时候会被淘汰?先不说WINDOWS7系统可以用多久,先说说XP系统到目前为止可以在系统之家上搜索,并且下载,只要硬件支持,XP系统都可以继续在使用,也不用担心,XP系统在使用的过程中系统出现崩溃或者...

2025-12-03 21:03 off999

免费下载升级(免费下载升级拖拉机两副牌80分)

以创维E530E系列为例:1、第一步:到创维社区下载官方本地升级包,将升级包放到U盘的根目录下,不能放到文件夹中否则检测不到升级包2、将U盘插入电视背后的USB接口。插上U盘后,电视会检测到U盘,选择...

win10家庭版是多少位(win10家庭版是32位吗)

win10家庭版包含32位win10家庭版和64位win10家庭版。32位操作系统针对的32位的CPU设计。CPU内部寄存器和寻址总线是32位,指令集可以运行32位数据指令,也就是说一次可以提取32位...

联想投诉电话人工服务(联想总部投诉热线95539有用吗)

投诉某家联想售后服务中心的话,你可以按照以下步骤来进行操作:1.收集证据:整理好所有的证据材料,包括维修单据、交流记录、照片或视频等,以便提供给投诉部门。2.联系联想客服:首先,你可以尝试通过联想...

win7旗舰版bios设置(win7旗舰版bios设置教程)

Win7旗舰版的BIOS高级模式指的是进入计算机主板的BIOS(基本输入输出系统)设置中的一种模式,该模式提供了更高级的设置选项,可以更好地控制硬件性能和外设的功能。高级模式比标准模式更加复杂,需要进...

怎么设置自己家的wifi(怎样设置自己家的wifi)

要设置家里的WiFi,首先确保你有一个无线路由器。将路由器连接到宽带调制解调器,并通过网线连接到电脑。打开浏览器,输入路由器的默认IP地址,登录路由器的管理界面。根据路由器的说明书,设置WiFi名称(...

xp万能驱动下载(winxp万能驱动)

查看自己打印机的型号,然后去官网下载对应的驱动使用纯净版XP系统的时候还要安装声卡驱动,当我们对这个方面的驱动都完全的安装好了之后,这样才可以更好地保障今后的使用。电脑之中,只是安装系统还是无法使用的...

主机亮了显示器黑屏(主机亮了显示器黑屏怎么办)

1、如果按键盘、移动鼠标都没反应,那么你的电脑有可能进入了休眠状态,这个时候需要按下电源按钮以此来唤醒电脑;电脑休眠指的是将当前处于运行状态的数据保存在硬盘中,整机将完全停止供电。在休眠时可以完全断开...

美国vs威尔士比分预测(威尔士vs美国直播)

同学你好,这所大学创校于1914年,是一所综合性的私立大学。它设有47项学位,包含商业课程、烹饪艺术、餐饮管理及教育等,提供学生良好的就业机会。所有的学系均设有学士、硕士。不仅限于本科。但是这所...

取消回复欢迎 发表评论: