【python代码】一些小实验

news2025/5/25 22:47:31

 

目录

1. 测试Resnet50 ONNX模型的推理速度


1. 测试Resnet50 ONNX模型的推理速度

###############################
# 导出resnet50 模型
# 测试onnx模型推理 cpu 和 GPU 的对比
###############################



import time
import numpy as np
import onnxruntime as ort
import torchvision.models as models
import torch
 
def export_onnx(onnx_path):
    # ResNet50 模型, 保存onnx model 返回 torch model
    resnet50 = models.resnet50(pretrained=False)
    torch.onnx.export(
            resnet50,  # 模型
            torch.randn(1, 3, 224, 224),  # 输入
            onnx_path, # 输出文件名
            opset_version=12, # opset版本 
            input_names=["input"], # 输入变量名
            output_names=["output"], # 输出变量名
            dynamic_axes={"input":{0 : "batch_x"}, "output":{0: "batch_y"}} # 动态轴设置
            )
 
 
class ONNXModel:
    def __init__(self, model_path, use_gpu=False):
        """
        初始化 ONNX 模型推理类。
        
        :param model_path: ONNX 模型文件路径
        :param use_gpu: 是否使用 GPU 推理
        """
        self.model_path = model_path
        self.use_gpu = use_gpu
        self.session = None
        self.load_model()
        self.input_name = self.session.get_inputs()[0].name  # 输入名字
 
    def load_model(self):
        """
        加载 ONNX 模型。
        """
        try:
            print(f"Loading model from {self.model_path}...")
            providers = ['CUDAExecutionProvider', 'CPUExecutionProvider'] if self.use_gpu else ['CPUExecutionProvider']
            self.session = ort.InferenceSession(self.model_path, providers=providers)
        except Exception as e:
            print(f"Failed to load model: {e}")
            raise
        
        providers = self.session.get_providers()
        if 'CUDAExecutionProvider' in providers:
            print("✅ ONNX Runtime 正在使用 GPU 推理")
        else:
            print("❌ ONNX Runtime 正在使用 CPU 推理")
 
    def run_inference(self, input_data):
        """
        执行推理并返回结果。
        
        :param input_data: 输入数据,通常为 numpy 数组或字典
        :return: 推理结果
        """
        # 确保输入是字典格式
        input_data = {self.input_name: input_data}
        outputs = self.session.run(None, input_data)
        return outputs[0]
 
 
def eval(onnx_model, n):
    # 推理n 次 返回对比结果
    batch_size = 32
    print("评估中....")
    onnx_input = np.random.randn(batch_size,3,224,224).astype(np.float32)  # ONNX 需要 CPU 数据
    # 1. ONNX 时间
    t1 = time.time()
    for _ in range(n):
        onnx_model.run_inference(onnx_input)
    t2 = time.time()
    t = t2 - t1
    print(f"推理{n}次时间对比:")
    print(f"模型推理时间: {t:.4f} 秒")
    print(f"模型推理平均时间: {t/n:.4f} 秒")
   
 
def test():
    onnx_path = "./resnet50.onnx"
    # export_onnx(onnx_path)


    onnx_model_cpu = ONNXModel(onnx_path, use_gpu=False)
    # 评估推理性能
    eval(onnx_model_cpu, 50)
    
    onnx_model_gpu = ONNXModel(onnx_path, use_gpu=True)
    eval(onnx_model_cpu, 50)

 
# 示例用法
if __name__ == "__main__":
    test()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2385662.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux服务器配置深度学习环境(Pytorch+Anaconda极简版)

前言: 最近做横向需要使用实验室服务器跑模型,之前用师兄的账号登录服务器跑yolo,3张3090一轮14秒,我本地一张4080laptop要40秒,效率还是快很多,(这么算一张4080桌面版居然算力能比肩3090&#…

超低延迟音视频直播技术的未来发展与创新

引言 音视频直播技术正在深刻改变着我们的生活和工作方式,尤其是在教育、医疗、安防、娱乐等行业。无论是全球性的体育赛事、远程医疗、在线教育,还是智慧安防、智能家居等应用场景,都离不开音视频技术的支持。为了应对越来越高的需求&#x…

Java 内存模型(JMM)深度解析:理解多线程内存可见性问题

Java 内存模型(JMM)深度解析:理解多线程内存可见性问题 在 Java 编程中,多线程的运用能够显著提升程序的执行效率,但与此同时,多线程环境下的一些问题也逐渐凸显。其中,内存可见性问题是一个关…

转移dp简单数学数论

1.转移dp问题 昨天的练习赛上有一个很好玩的起终点问题,第一时间给出bfs的写法。 但是写到后面发现不行,还得是的dp转移的写法才能完美的解决这道题目。 每个格子可以经过可以不经过,因此它的状态空间是2^(n*m)&…

动静态库--

目录 一 静态库 1. 创建静态库 2. 使用静态库 2.1 第一种 2.2 第二种 二 动态库 1. 创建动态库 2. 使用动态库 三 静态库 VS 动态库 四 动态库加载 1. 可执行文件加载 2. 动态库加载 一 静态库 Linux静态库:.a结尾 Windows静态库:.lib结尾…

git clone时出现无法访问的问题

git clone时出现无法访问的问题 问题: 由于我的git之前设置了代理,然后在这次克隆时又没有打开代理 解决方案: 1、如果不需要代理,直接取消 Git 的代理设置: git config --global --unset http.proxy git config --gl…

文件系统·linux

目录 磁盘简介 Ext文件系统 块 分区 分组 inode 再谈inode 路径解析 路径缓存 再再看inode 挂载 小知识 磁盘简介 磁盘:一个机械设备,用于储存数据。 未被打开的文件都是存在磁盘上的,被打开的加载到内存中。 扇区:是…

【Matlab】雷达图/蛛网图

文章目录 一、简介二、安装三、示例四、所有参数说明 一、简介 雷达图(Radar Chart)又称蛛网图(Spider Chart)是一种常见的多维数据可视化手段,能够直观地对比多个指标并揭示其整体分布特征。 雷达图以中心点为原点&…

使用JProfiler进行Java应用性能分析

文章目录 一、基本概念 二、Windows系统中JProfiler的安装 1、下载exe文件 2、安装JProfiler 三、JProfiler的破解 四、IDEA中配置JProfiler 1、安装JProfiler插件 2、关联本地磁盘中JProfiler软件的执行文件 3、IDEA中启动JProfiler 五、监控本地主机中的Java应用 …

遥感解译项目Land-Cover-Semantic-Segmentation-PyTorch之一推理模型

文章目录 效果项目下载项目安装安装步骤1、安装环境2、新建虚拟环境和安装依赖测试模型效果效果 项目下载 项目地址 https://github.com/souvikmajumder26/Land-Cover-Semantic-Segmentation-PyTorch 可以直接通过git下载 git clone https://github.com/souvikmajumder26/Lan…

六、【前端启航篇】Vue3 项目初始化与基础布局:搭建美观易用的管理界面骨架

【前端启航篇】Vue3 项目初始化与基础布局:搭建美观易用的管理界面骨架 前言技术选型回顾与准备准备工作第一步:进入前端项目并安装 Element Plus第二步:在 Vue3 项目中引入并配置 Element Plus第三步:设计基础页面布局组件第四步…

C++ 前缀和数组

一. 一维数组前缀和 1.1. 定义 前缀和算法通过预处理数组,计算从起始位置到每个位置的和,生成一个新的数组(前缀和数组)。利用该数组,可以快速计算任意区间的和,快速求出数组中某一段连续区间的和。 1.2. …

细胞冻存的注意事项,细胞冻存试剂有哪些品牌推荐

细胞冻存的原理 细胞冻存的基本原理是利用低温环境抑制细胞的新陈代谢,使细胞进入一种“休眠”状态。在低温条件下,细胞的生物活动几乎停止,从而实现长期保存。然而,细胞在冷冻过程中可能会因为细胞内外水分结冰形成冰晶而受损。…

快速上手Linux火墙管理

实验网络环境: 主机IP网络f1192.168.42.129/24NATf2(双网卡) 192.168.42.128/24 192.168.127.20/24 NAT HOST-NOLY f3192.168.127.30/24HOST-ONLY 一、iptables服务 1.启用iptables服务 2.语法格式及常用参数 语法格式:参数&…

[创业之路-375]:企业战略管理案例分析 - 华为科技巨擘的崛起:重构全球数字化底座的超级生命体

在人类文明从工业时代(机械、电气、自动化)迈向数字智能(硬件、软件、算法、虚拟、智能)时代的临界点上,一家中国企业正以令人震撼的姿态重塑全球科技版图。从通信网络的底层架构到智能终端的生态闭环,从芯…

AI基础知识(05):模型提示词、核心设计、高阶应用、效果增强

目录 一、核心设计原则 二、高阶应用场景 三、突破性技巧 以下是针对DeepSeek模型的提示词设计思路及典型应用场景示例,帮助挖掘其潜在能力: 一、核心设计原则 1. 需求明确化:用「角色定位任务目标输出格式」明确边界 例:作为历…

推测解码算法在 MTT GPU 的应用实践

前言​ 目前主流的大模型自回归解码每一步都只生成一个token, 尽管kv cache等技术可以提升解码的效率,但是单个样本的解码速度依然受限于访存瓶颈,即模型需要频繁从内存中读取和写入数据,此时GPU的利用率有限。为了解决这种问题,…

Axure酒店管理系统原型

酒店管理系统通常被设计为包含多个模块或界面,以支持酒店运营的不同方面和参与者。其中,管理端和商户端是两个核心组成部分,它们各自承担着不同的职责和功能。 软件版本:Axure RP 9 预览地址:https://556i1e.axshare.…

写实交互数字人在AI招聘中的应用方案

随着科技的进步,越来越多的行业开始探索如何利用人工智能提升效率和服务质量。其中,写实交互数字人技术以其高度拟真的交互体验和丰富的情感表达能力,在人力资源领域特别是招聘环节中展现出了巨大潜力。本文将探讨写实交互数字人在AI招聘中的…

房贷利率计算前端小程序

利率计算前端小程序 视图效果展示如下&#xff1a; 在这里插入代码片 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0&qu…