飞桨x昇腾生态适配方案:13_API离线推理

简介: ais_bench 提供了基于昇腾硬件的 Python API,用于离线模型(.om模型)推理。支持静态与动态API场景,如单个或多个OM模型推理。通过 `InferSession` 类加载模型并执行推理,可灵活处理输入输出形状转换。示例代码涵盖图片读取、形状调整、多模型串联推理及资源释放等操作,满足多样化推理需求。

ais_bench提供的python API可供使能基于昇腾硬件的离线模型(.om模型)推理。具体介绍可参考API_GUIDE
下面列举几个常用的API推理场景使用方法。

静态API推理

单个om推理

api_1.py

import cv2
import numpy as np
from ais_bench.infer.interface import InferSession
from ais_bench.infer.common.utils import logger_print


def infer_api_static():
    device_id = 0
    model_path = '/home/w30067200/paddle_test/PaddleOCR/inference/om/inference.om'
    image_path = '/home/w30067200/paddle_test/PaddleOCR/test/general_ocr_002.png'
    image = cv2.imread(image_path)

    # create session of om model for inference
    session = InferSession(device_id, model_path)

    # create new numpy data according inputs info
    shape0 = session.get_inputs()[0].shape
    print(shape0)
    height, width = shape0[2], shape0[3]
    resized_image = cv2.resize(image, (width, height))
    image_array = np.array(resized_image).astype(np.float32)

    feeds = [image_array]

    # execute inference, inputs is ndarray list and outputs is ndarray list
    outputs = session.infer(feeds, mode='static')
    print(outputs[0].shape)

    np.set_printoptions(threshold=np.inf)
    print(outputs1[0])

    # cv2.imwrite('output.png', outputs1[0])
    logger_print("outputs: %s" % outputs)

    # free model resource and device context of session
    session0.free_resource()


infer_api_static()

多个om推理

这里需要注意的是需要将前一个om推理结果输出的shape转化为下一个om推理模型输入的shape:
api_2.py

import cv2
import numpy as np
from ais_bench.infer.interface import InferSession
from ais_bench.infer.common.utils import logger_print


def infer_api_static():
    device_id = 0
    model_path0 = './det.om'
    model_path = './rec.om'
    image_path = './general_ocr_002.png'
    image = cv2.imread(image_path)

    # create session of om model for inference
    session0 = InferSession(device_id, model_path0)
    session = InferSession(device_id, model_path)

    # create new numpy data according inputs info
    shape0 = session0.get_inputs()[0].shape
    shape1 = session.get_inputs()[0].shape
    print("shape0:",shape0)
    print("shape1:",shape1)
    height, width = shape0[2], shape0[3]
    resized_image = cv2.resize(image, (width, height))
    image_array = np.array(resized_image).astype(np.float32)

    feeds = [image_array]

    # execute inference, inputs is ndarray list and outputs is ndarray list
    outputs = session0.infer(feeds, mode='static')
    print("outputs[0].shape:",outputs[0].shape)
    # det.om推理结果输出的shape [1, 1, 640, 480] 转化为下一个rec.om推理模型输入的shape[1, 3, 48, 320]
    height, width = shape1[2], shape1[3]
    arr = np.repeat(outputs[0], 3, axis=1)
    arr = arr.transpose(0, 2, 3, 1)  # [1, 224, 224, 3]

    resized = cv2.resize(arr[0], (width, height), interpolation=cv2.INTER_LINEAR)


    resized = resized[np.newaxis, ...].transpose(0, 3, 1, 2)  # [1, 3, 48, 680]

    '''
    resized_image1 = cv2.resize(arr, (width, height))
    image_array1 = np.array(resized_image1).astype(np.float32)
    '''
    feeds = [resized]
    print("feeds[0].shape",feeds[0].shape)
    # execute inference, inputs is ndarray list and outputs is ndarray list
    outputs1 = session.infer(feeds, mode='static')
    np.set_printoptions(threshold=np.inf)
    # print(outputs1[0].shape)

    # cv2.imwrite('output.png', outputs1[0])
    # logger_print("outputs1: %s" % outputs1)

    # free model resource and device context of session
    session0.free_resource()


infer_api_static()

执行结果如下所示:
01_静态API推理结果.png

动态API推理

多个om推理

import onnx
import numpy as np
from ais_bench.infer.interface import InferSession



def infer_api_dymshape():
    model_path0 = './model_dest_linux_x86_64.om'
    model_path1 = './mode_loop_input2_i_cond_linux_x86_64.om'

    # Load the model
    device_id = 1
    session0 = InferSession(device_id, model_path0)
    session1 = InferSession(device_id, model_path1)

    # 假设 batch 大小为 4
    batch = 4

    # 生成全 1 的 input1
    input1 = np.ones((batch, 16, 32), dtype=np.float32)

    # 生成全 2 的 input2
    input2 = np.full((batch, 16, 32), 2, dtype=np.float32)

    # print("input1 的形状:", input1.shape)
    # print("input2 的形状:", input2.shape)

    input = [input1, input2]
    # 执行model_dest_linux_x86_64.om推理
    output0 = session0.infer(input, mode='dymshape')
    input3 = output0[0]
    cnts = output0[1]

    for i in range(cnts):
        inputs = {"x.13": input3, "input2": input2}
        # 执行mode_loop_input2_i_cond_linux_x86_64.om 推理
        input3 = session1.infer(inputs, mode='dymshape')
    print("input3", input3)

    # free model resource and device context of session
    session0.free_resource()
    session1.free_resource()

infer_api_dymshape()

执行结果:
02_动态API推理结果.png

目录
相关文章
|
运维 安全 API
统一接入API赋能开发者:自动高效、灵活编排的云产品日志采集方案
随着企业对网络安全和数据安全防护水平要求的逐步提升,企业管理对企业生产运维过程中所产生的日志数据,在留存处理、权限隔离、跨境合规、数据汇总等方面提出了更高阶的需求。为了满足大客户及一些国际化客户安全合规、简单快速地接入日志、使用日志、操作日志,我们提出了一种新的解决方案——“云产品统一接入API”。统一接入API主要针对阿里云云产品日志类型,以API的方式提供企业或组织用户快速上手,编排灵活的日志采集方案。
|
2月前
|
人工智能 JSON API
0代码将存量 API 适配 MCP 协议
本文主要讲述通过 Nacos+Higress 的方案实现0代码改造将 Agent 连接到存量应用,能够显著降低存量应用的改造成本。
646 44
0代码将存量 API 适配 MCP 协议
|
23天前
|
数据采集 安全 大数据
Dataphin 5.1:API数据源及管道组件升级,适配多样化认证的API
为提升API数据交互安全性,Dataphin 5.1推出两种新认证方式:基于OAuth 2.0的动态授权与请求签名认证。前者通过短期Access Token确保安全,后者对关键参数加密签名保障数据完整性。功能支持API数据源OAuth 2.0认证和自定义签名配置,未来还将拓展更灵活的认证方式以满足多样化需求。
86 14
|
2月前
|
存储 人工智能 API
离线VS强制登录?Apipost与Apifox的API工具理念差异深度解析
在代码开发中,工具是助手还是枷锁?本文通过对比Apipost和Apifox在断网环境下的表现,探讨API工具的选择对开发自由度的影响。Apifox强制登录限制了离线使用,而Apipost支持游客模式与本地存储,尊重开发者数据主权。文章从登录策略、离线能力、协作模式等方面深入分析,揭示工具背后的设计理念与行业趋势,帮助开发者明智选择,掌握数据控制权并提升工作效率。
|
3月前
|
人工智能 Java API
ai-api-union项目,适配各AI厂商api
本项目旨在实现兼容各大模型厂商API的流式对话和同步对话接口,现已支持智谱、豆包、通义、通义版DeepSeek。项目地址:[https://gitee.com/alpbeta/ai-api-union](https://gitee.com/alpbeta/ai-api-union)。通过`ChatController`类暴露两个接口,入参为`ChatRequest`,包含会话ID、大模型标识符和聊天消息列表。流式对话返回`Flux<String>`,同步调用返回`String`
150 2
|
5月前
|
机器学习/深度学习 人工智能 安全
GLM-Zero:智谱AI推出与 OpenAI-o1-Preview 旗鼓相当的深度推理模型,开放在线免费使用和API调用
GLM-Zero 是智谱AI推出的深度推理模型,专注于提升数理逻辑、代码编写和复杂问题解决能力,支持多模态输入与完整推理过程输出。
373 24
GLM-Zero:智谱AI推出与 OpenAI-o1-Preview 旗鼓相当的深度推理模型,开放在线免费使用和API调用
|
4月前
|
机器学习/深度学习 人工智能 自然语言处理
企业级API集成方案:基于阿里云函数计算调用DeepSeek全解析
DeepSeek R1 是一款先进的大规模深度学习模型,专为自然语言处理等复杂任务设计。它具备高效的架构、强大的泛化能力和优化的参数管理,适用于文本生成、智能问答、代码生成和数据分析等领域。阿里云平台提供了高性能计算资源、合规与数据安全、低延迟覆盖和成本效益等优势,支持用户便捷部署和调用 DeepSeek R1 模型,确保快速响应和稳定服务。通过阿里云百炼模型服务,用户可以轻松体验满血版 DeepSeek R1,并享受免费试用和灵活的API调用方式。
354 12
|
10月前
|
机器学习/深度学习 缓存 数据处理
《零基础实践深度学习》2.3.3 校验数据有效性 基于飞桨Dataset和DataLoader API完成数据处理
这篇文章详细介绍了在深度学习任务中进行数据处理的步骤,包括数据校验、封装数据读取与处理函数、使用飞桨Dataset和DataLoader API完成数据加载,以及数据增强/增广的方法和实践,旨在确保数据的有效性和提高模型训练效果。
|
9月前
|
Cloud Native 关系型数据库 Serverless
基于阿里云函数计算(FC)x 云原生 API 网关构建生产级别 LLM Chat 应用方案最佳实践
本文带大家了解一下如何使用阿里云Serverless计算产品函数计算构建生产级别的LLM Chat应用。该最佳实践会指导大家基于开源WebChat组件LobeChat和阿里云函数计算(FC)构建企业生产级别LLM Chat应用。实现同一个WebChat中既可以支持自定义的Agent,也支持基于Ollama部署的开源模型场景。
1406 72
|
9月前
|
API 搜索推荐