【TVM 教程】使用 TVM 部署框架预量化模型 - 第 3 部分(TFLite)

TVM部署预定义模型 TVM部署预定义模型 本文通过深度学习框架量化的模型加载到TVM中。预量化的模型导入是在TVM中提供的量化支持之一。 本文演示如何加载和运行由PyTorch,MXNet和TFLite量化的模型。加载后,可以在任何TVM支持的硬件上运行已编译的量化模型。 首先,必要输入 from PIL import Image import numpy as np import torch from torchvision.models.quantization import mobilenet as qmobilenet 阅读详情

更多 TVM 中文文档可访问 →Apache TVM 是一个端到端的深度学习编译框架,适用于 CPU、GPU 和各种机器学习加速芯片。 | Apache TVM 中文站

作者:Siju Samuel

此教程介绍如何量化 TFLite 计算图,并通过 TVM 编译和执行。

有关使用 TFLite 量化模型的更多详细信息,参阅 转换量化模型。

TFLite 模型下载 链接。

开始前,先安装 TensorFlow 和 TFLite 包。

# 安装 tensorflow 和 tflite
pip install tensorflow==2.1.0
pip install tflite==2.1.0

执行 python -c "import tflite" 命令检查 TFLite 包是否安装成功。

导入必要的包​

import os
import numpy as np
import tflite

import tvm
from tvm import relay

下载预训练的量化 TFLite 模型​

# 下载 Google 的 mobilenet V2 TFLite 模型
from tvm.contrib.download import download_testdata

model_url = (
 "https://storage.googleapis.com/download.tensorflow.org/models/"
 "tflite_11_05_08/mobilenet_v2_1.0_224_quant.tgz"
)

# 下载模型 tar 文件,解压得到 mobilenet_v2_1.0_224.tflite
model_path = download_testdata(
    model_url, "mobilenet_v2_1.0_224_quant.tgz", module=["tf", "official"]
)
model_dir = os.path.dirname(model_path)

下载及提取 zip 文件的所有函数​

def extract(path):
 import tarfile

 if path.endswith("tgz") or path.endswith("gz"):
        dir_path = os.path.dirname(path)
        tar = tarfile.open(path)
        tar.extractall(path=dir_path)
        tar.close()
 else:
 raise RuntimeError("Could not decompress the file: " + path)



extract(model_path)

加载测试图像​

获取 e2e 测试的真实图像​

def get_real_image(im_height, im_width):
 from PIL import Image

    repo_base = "https://github.com/dmlc/web-data/raw/main/tensorflow/models/InceptionV1/"
    img_name = "elephant-299.jpg"
    image_url = os.path.join(repo_base, img_name)
    img_path = download_testdata(image_url, img_name, module="data")
    image = Image.open(img_path).resize((im_height, im_width))
    x = np.array(image).astype("uint8")
    data = np.reshape(x, (1, im_height, im_width, 3))
 return data

data = get_real_image(224, 224)

加载 TFLite 模型​

打开 mobilenet_v2_1.0_224.tflite:

tflite_model_file = os.path.join(model_dir, "mobilenet_v2_1.0_224_quant.tflite")
tflite_model_buf = open(tflite_model_file, "rb").read()

# Get TFLite model from buffer
try:
 import tflite

    tflite_model = tflite.Model.GetRootAsModel(tflite_model_buf, 0)
except AttributeError:
 import tflite.Model

    tflite_model = tflite.Model.Model.GetRootAsModel(tflite_model_buf, 0)

运行 TFLite 预量化模型推理,获得 TFLite 预测。

def run_tflite_model(tflite_model_buf, input_data):
 """执行 TFLite 的通用函数"""
 try:
 from tensorflow import lite as interpreter_wrapper
 except ImportError:
 from tensorflow.contrib import lite as interpreter_wrapper

    input_data = input_data if isinstance(input_data, list) else [input_data]

    interpreter = interpreter_wrapper.Interpreter(model_content=tflite_model_buf)
    interpreter.allocate_tensors()

    input_details = interpreter.get_input_details()
    output_details = interpreter.get_output_details()

 # 设置输入
 assert len(input_data) == len(input_details)
 for i in range(len(input_details)):
        interpreter.set_tensor(input_details[i]["index"], input_data[i])

 # 运行
    interpreter.invoke()

 # 得到输出
    tflite_output = list()
 for i in range(len(output_details)):
        tflite_output.append(interpreter.get_tensor(output_details[i]["index"]))

 return tflite_output

运行 TVM 编译的预量化模型推理,获得 TVM 预测。

def run_tvm(lib):
 from tvm.contrib import graph_executor

    rt_mod = graph_executor.GraphModule(lib["default"](tvm.cpu(0)))
    rt_mod.set_input("input", data)
    rt_mod.run()
    tvm_res = rt_mod.get_output(0).numpy()
    tvm_pred = np.squeeze(tvm_res).argsort()[-5:][::-1]
 return tvm_pred, rt_mod

使用 TFLite 推理​

在量化模型上运行 TFLite 推理:

tflite_res = run_tflite_model(tflite_model_buf, data)
tflite_pred = np.squeeze(tflite_res).argsort()[-5:][::-1]

TVM 编译和推理​

用 TFLite-Relay 解析器将 TFLite 预量化计算图,转换为 Relay IR。注意,预量化模型的前端解析器调用与 FP32 模型的前端解析器调用完全相同。推荐删除 print(mod) 中的注释,并检查 Relay 模块。可以看到许多 QNN 算子,例如 Requantize、Quantize 和 QNN Conv2D。

dtype_dict = {"input": data.dtype.name}
shape_dict = {"input": data.shape}

mod, params = relay.frontend.from_tflite(tflite_model, shape_dict=shape_dict, dtype_dict=dtype_dict)
# print(mod)

使用 “llvm” target(或替换为其他平台)编译 Relay 模块。

target = "llvm"
with tvm.transform.PassContext(opt_level=3):
    lib = relay.build_module.build(mod, target=target, params=params)

输出结果:

/workspace/python/tvm/driver/build_module.py:268: UserWarning: target_host parameter is going to be deprecated. Please pass in tvm.target.Target(target, host=target_host) instead.
 "target_host parameter is going to be deprecated. "

最后在 TVM 编译模块上调用推理。

tvm_pred, rt_mod = run_tvm(lib)

精度比较​

因为 TFLite 和 Relay 之间的再量化实现不同,导致最终输出数字不匹配。因此打印 MXNet 和 TVM 推理的前 5 个标签,通过标签测试准确性。

print("TVM Top-5 labels:", tvm_pred)
print("TFLite Top-5 labels:", tflite_pred)

输出结果:

TVM Top-5 labels: [387 102 386 341 349]
TFLite Top-5 labels: [387 102 386 341 349]

测试性能​

以下举例说明如何测试 TVM 编译模型的性能。

n_repeat = 100 # 为使测试更准确,应选取更大的数值
dev = tvm.cpu(0)
print(rt_mod.benchmark(dev, number=1, repeat=n_repeat))

输出结果:

Execution time summary:
 mean (ms)   median (ms)    max (ms)     min (ms)     std (ms)
 119.3810 119.3190 121.4095 118.6146 0.3802

备注
如果硬件对 INT8 整数的指令没有特殊支持,量化模型与 FP32 模型速度相近。如果没有 INT8 整数的指令,TVM 会以 16 位进行量化卷积,即使模型本身是 8 位。
对于 x86,可以在具有 AVX512 指令集的 CPU 上实现最佳性能。在这种情况下,TVM 对给定 targe 使用最快的可用 8 位指令。包括对 VNNI 8 位点积指令(CascadeLake 或更新版本)的支持。对于 EC2 C5.12x 大型实例,本教程的 TVM 延迟约为 2 毫秒。
与许多 TFLite 网络的 ARM NCHW conv2d 空间包调度相比,ARM 上的英特尔 conv2d NCHWc 调度提供了更好的端到端延迟。 ARM winograd 性能更高,但内存占用较高。
此外,以下有关 CPU 性能的一般技巧同样适用:

将环境变量 TVM_NUM_THREADS 设置为物理内核数
为硬件选择最佳 target,例如「llvm -mcpu=skylake-avx512」或「llvm -mcpu=cascadelake」(未来会出现更多支持 AVX512 的 CPU)
执行自动调优 - 为 x86 CPU 自动调优卷积网络。
要在 ARM CPU 上获得最佳推理性能,根据设备更改 target 参数并遵循 自动调整 ARM CPU 的卷积网络。

脚本总运行时长: (1 分 52.874 秒)

下载 Python 源代码:deploy_prequantized_tflite.py

下载 Jupyter Notebook:deploy_prequantized_tflite.ipynb

TVM学习教程 目录Step 1:TVM 视频介绍Step 2:研读 TVM 论文Step 3:了解 TVM 官网中可以学习的资料Step 4:上手 TVM CodeStep 5:TVM 其他相关资料 Step 1:TVM 视频介绍 https://www.bilibili.com/video/av29521815/ Step 2:研读 TVM 论文 https://www.usenix.org/system/files/osdi18-chen.pdf Step 3:了解 TVM 官网中可以学习的资料 https://tv 阅读详情

相关推荐

mobilenet_v2_1.0_224.rar

基于tensorflow架构训练出来的MobileNetV2类型的tflite模型文件

TVM框架详解

在上面TVM的架构图中,主要包含三个部分内容:Unified IR/*!*//*!/*!/*!*//*!/*!/*!/*!/*!/*!*//*!在该部分中,主要包含三个方面的内容。

探索未知,成就非凡 3746

mobilenet_v2_1.0_224

mobilenet_v2_1.0_224的cpkt文件,有时候下载不了.....做个备份 https://github.com/tensorflow/models/tree/master/research/slim/#Pretrained

【tvm官网教程01】设计和架构-1

【tvm官网教程01】设计和架构-1目的1. 编译流1.1 关键数据结构1.2 Transformations1.2.1 变换的分类1.2.2 relay/transform1.2.2.1 子函数1.2.2.2 overall问题1.2.3 tir/transform1.3 搜索空间和基于学习的transformation1.4 Target Translation1.5 Runtime Execution1.6 小结2. 逻辑组件2.1 tvm/support2.2 tvm/runtime2.3 tvm

B10030607的博客 1994

Java 网络编程(超级详细)

1. 网络编程 1.1 网络编程概述 计算机网络 是指将地理位置相同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统、网络管理软件及通信协议的管理和协调下,实现资源共享和信息传递的计算机系统 1.2 网络编程三要素 1、IP地址 要想让网络中的计算机能够互相通信,必须为计算机指定一个标识号,通过这个标识号来指定要接受数据的计算机和识别发送的计算机,而IP地址就是这个标识号,也就是设备的标识。 2、端口 网络的通信,本质上是两个应用程序的通信。每台计算机都有很多的应用程

imByte的博客 3万+

从零到一:鲲鹏920服务器上的DeepSeek模型部署全流程解析

本文详细解析了在华为鲲鹏920服务器上部署DeepSeek模型的全流程,包括环境准备、模型服务框架部署、性能优化及生产环境方案。通过ARM架构优化和量化技术,显著提升模型推理效率,适用于企业级AI应用场景,助力国产化技术落地。

weixin_29094775的博客 599

【TVM 教程】使用 TVM 部署框架预量化模型

本文介绍如何将深度学习框架量化的模型加载到 TVM。预量化模型的导入是 TVM 中支持的量化之一。有关 TVM 中量化的更多信息,参阅。这里演示了如何加载和运行由 PyTorch、MXNet 和 TFLite 量化的模型。加载后,可以在任何 TVM 支持的硬件上运行编译后的量化模型。

HyperAI超神经 1381

开源处理器Rocket的分支预测机制研究与性能评估(二)

Rocket是基于RISC-V指令集架构的开源处理器,具有分支预测功能,其实现了GShare分支预测机制,在分析Rocket处理器分支预测处理过程、分支预测实现原理的基础上,利用模拟器进行了性能测试,并依据测试结果,对Rocket处理器分支预测参数配置给出建议。

leishangwen的专栏 5691

TVM 项目实战:部署预量化 TFLite 模型全流程指南

在边缘计算和移动设备上部署深度学习模型时,模型量化是提升推理效率的关键技术。本文将详细介绍如何使用 TVM 框架部署预量化的 TFLite 模型,涵盖从模型加载到性能优化的完整流程。 ## 环境准备 首先需要安装必要的 Python 依赖: ```bash pip install tensorflow==2.1.0 pip install tflite==2.1.0 ``` 安装完成后,可

gitblog_00904的博客 654

jmeter问题系列:Begin size 0 is not equal to fixed size 5

Begin size 0 is not equal to fixed size 5 ,问题的解决

雨水的早晨的博客 2411

Vue集成天地图:从定位到交互绘图的完整实践指南

本文详细介绍了如何在Vue项目中集成天地图API,从基础配置到高级功能实现,包括定位、标点、画线等交互绘图功能。通过实战代码示例和性能优化技巧,帮助开发者快速掌握Vue与天地图的结合应用,提升地图开发效率。

weixin_29013129的博客 248

神经网络INT8量化部署实战教程

作者|Oldpan 编辑| 江大白点击下方卡片,关注“自动驾驶之心”公众号ADAS巨卷干货,即可获取点击进入→自动驾驶之心【模型部署】技术交流群导读INT8量化是一种深度学习推理加速技术,可以将32位浮点数格式的神经网络权重和激活值转换为8位整数格式,从而大幅降低神经网络的计算量和存储空间需求。本文分享了神经网络的INT8量化教程,值得收藏学习。开篇刚开始接触神经网络量化是2年前那会,用NC...

CV_Autobot的博客 2170

基于OpenCV的实时疲劳检测系统实现

本文介绍了一个基于OpenCV的实时疲劳检测系统,使用Python实现。系统通过Haar级联分类器检测人脸和眼睛,计算眼睛宽高比(EAR)和PERCLOS(眼睛闭合时间比例)来评估疲劳程度,分为4个等级:正常、轻度、中度和重度疲劳。核心代码包含人脸眼睛检测、疲劳评估和可视化显示功能,具有实时性、稳定性和直观的视觉反馈。系统可通过摄像头实时监控驾驶员状态,为疲劳驾驶预警提供简单有效的解决方案。

weixin_62135607的博客 232

基于TVM在Arduino上部署轻量级视觉模型的完整指南

本文将详细介绍如何使用TVM框架,在资源受限的Arduino设备上部署一个轻量级的视觉识别模型。我们将从模型训练开始,逐步完成量化、编译和部署的全过程。 ## 背景与挑战 物联网设备通常需要具备视觉理解能力,但受限于成本和功耗,这些设备往往配备的是低性能处理器(如nRF52840或RP2040),内存通常只有250KB左右。传统视觉模型(如MobileNet)难以在这样的环境中运行。 ##

gitblog_00978的博客 579

Thor芯片部署

英伟达Jetson Thor芯片性能分析与应用现状 摘要:英伟达最新发布的Jetson Thor芯片基于Blackwell架构,官方宣称AI算力达2070TFLOPS(FP4),较前代Orin提升7.5倍,配备14核Arm CPU和128GB内存。然而实际量产版算力缩水至700TOPS,且因4nm制程良率问题多次延期至2025-2026年交付。该芯片支持FP4/FP8量化、Transformer引擎等先进特性,适用于自动驾驶、机器人等边缘AI场景,但受供应链限制,国内厂商倾向自研方案。开发者可通过JetPa

xiaomu_347的博客 431

【四足机器人项目实战】MIT四足机器人力控电机优劣分析及解决办法

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、mit力控电机方案二、弊端三、优点四、解决办法设计相关看专栏其他博客 前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对XXX做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章 提示:以下是本篇文章正文内容 一、mit力控电机方案 MITCheetahMini驱动器采用的电机是类似于公版电机T-MotorU8的型号

qq_35635374的博客 6090

深度学习模型部署全攻略:从云端到边缘的落地实践

本文摘要: 《深度学习模型部署全攻略》系统介绍了从研发到生产的模型落地流程。核心内容包括:1)部署目标与通用流程(模型准备、格式转换、环境搭建、推理优化、工程封装、上线运维);2)主流部署工具与技术选型(TensorRT/ONNX/TFLite等适配不同场景);3)云端推理服务实战(基于TensorRT+FastAPI的高并发方案)。重点解决硬件适配、性能优化、工程化封装等挑战,提供从理论到实践的完整指导,助力AI模型高效稳定落地。

今天比昨天更努力一点! 1万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

为什么大厂都在用这些模型量化工具?:揭秘背后的技术壁垒与部署逻辑

掌握高效部署AI模型的方法,本文解析大厂常用的模型量化的工具及其核心技术逻辑。涵盖推理加速、内存压缩等关键优势,适用于边缘设备与大规模服务部署场景,显著降低算力成本。技术细节深度拆解,值得收藏。

AlgoPerch的博客 793

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

医疗AI模型轻量化部署实战与优化策略

模型轻量化是深度学习在边缘计算场景的核心技术,通过剪枝、量化等方法减少模型体积和计算量,同时保持模型精度。其原理是去除冗余参数或降低数值精度,在医疗、物联网等领域实现高效部署。技术价值在于解决算力限制与实时性需求之间的矛盾,特别是在医疗影像分析等场景中,轻量化模型能显著提升推理速度。应用场景包括移动端医疗诊断、实时影像处理等。本文以Keras框架为例,详细解析模型剪枝、量化部署等轻量化技术,并针对医疗AI的特殊需求,提出动态分辨率输入、模型分片加载等优化策略,结合ResNet50、DenseNet121等经

weixin_29074409的博客 269

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

深度学习之神经网络量化理解

刚开始接触神经网络,对量化是2年前那会,用NCNN和TVM在树莓派上部署一个简单的SSD网络。那个时候使用的量化脚本是参考于TensorRT和NCNN的PTQ量化(训练后量化)模式,使用交叉熵的方式对模型进行量化,最终在树莓派3B+上部署一个简单的分类模型(识别剪刀石头布静态手势)。这是那会的一篇文章,略显稚嫩哈哈:一步一步解读神经网络编译器TVM(二)——利用TVM完成C++端的部署转眼间过了这么久啦,神经网络量化应用已经完全实现大面积落地了、相比之前成熟多了!

二爷的博客 2615

【嵌入式AI开发必看】:C++部署深度学习模型的3种主流框架对比

掌握C++在嵌入式AI推理中的模型部署关键方法,本文对比TensorRT、OpenVINO和TFLite三大主流框架,涵盖适用硬件、推理优化与集成技巧,提升边缘设备性能。实用指南值得收藏。

CompiTide的博客 956

一起实践神经网络INT8量化系列教程(一)

开篇 老潘刚开始接触神经网络量化是2年前那会,用NCNN和TVM在树莓派上部署一个简单的SSD网络。那个时候使用的量化脚本是参考于TensorRT和NCNN的PTQ量化(训练后量化)模式,使用交叉熵的方式对模型进行量化,最终在树莓派3B+上部署一个简单的分类模型(识别剪刀石头布静态手势)。 这是那会的一篇文章,略显稚嫩哈哈: 一步一步解读神经网络编译器TVM(二)——利用TVM完成C++端的部署 转眼间过了这么久啦,神经网络量化应用已经完全实现大面积落地了、相比之前成熟多了! 我工作的时候虽然也简单接

老潘的博客 6270

TVM 裸机部署实战:基于 Cortex-M55 与 CMSIS-NN 运行人员检测模型

本指南讲解如何在 TVM 开源仓库自带的示例工程中,把量化(int8)神经网络模型编译到 **Arm Cortex-M55 裸机(bare metal)环境**,并借助 **CMSIS-NN** 库在 Arm Corstone-300 固定虚拟平台(FVP)上完成一次完整的人员检测推理。读者将掌握从环境准备、tvmc 编译参数、C 头文件数据生成到裸机应用构建与仿真运行的完整链路,并了解 TVM

gitblog_00721的博客 397

Audacity 完整指南:0 元搞定录音剪辑,降噪多轨全都会

刚录完一段播客,回放时空调嗡声混在台词里怎么都洗不掉,找降噪软件一搜,不是试用 7 天就是按年收费?Audacity 就是为这种情况准备的免费开源多轨音频编辑器,Windows、macOS、Linux 通吃,从录音、剪辑到导出成品全都不用花钱,播客主、音乐创作者和纯新手都够用。 ## 定位:它是什么,适合谁 这一节先把它和付费工作站放在同一个货架上比价,你看完再决定要不要装。 - 🎧 跨

gitblog_01019的博客 139
上一篇: 斯坦福/苹果等23所机构发布DCLM基准测试,高质量数据集能否撼动Scaling Laws?基础模型与Llama3 8B表现相当
下一篇: 小模型大突破!神经网络透视空间异质性,准确描述复杂地理现象
HyperAI超神经
博客等级 码龄7年 8872粉丝 1753原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值