TVMC python:一种TVM的高级API
Step 0: Imports
from tvm.driver import tvmc
Step 1: Load a model
- 下载模型:
wget https://github.com/onnx/models/raw/b9a54e89508f101a1611cd64f4ef56b9cb62c7cf/vision/classification/resnet/model/resnet50-v2-7.onnx
mv resnet50-v2-7.onnx my_model.onnx
- 模型导入TVMC
此步骤将机器学习模型从支持的框架转换为 TVM 的高级图形表示语言(称为 Relay)。这是为了在tvm中为所有模型提供统一的起点。我们目前支持的框架是:Keras,ONNX,Tensorflow,TFLite和PyTorch。
model = tvmc.load('my_model.onnx') #Step 1: Load
如果想查看Relay,可运行:model.summary()
PS:查看模型Input/shape_dict的一种建议方法是通过 netron
。打开模型后,单击第一个节点以查看输入部分中的名称和形状。
Step 2: Compile
现在我们的模型处于 Relay 中,我们的下一步是将其编译为所需的硬件以在其上运行。我们将此硬件称为目标.此编译过程将模型从 Relay 转换为目标计算机可以理解的较低级别语言。
为了编译模型,需要一个 tvm.target 字符串。要了解有关 tvm.targets 及其选项的更多信息,请查看文档。一些例子包括:
- cuda (Nvidia GPU)
- llvm (CPU)
- llvm -mcpu=cascadelake (Intel CPU)
package = tvmc.compile(model, target="llvm") #Step 2: Compile
编译步骤将返回一个包
Step 3: Run
现在可以在硬件目标上运行已编译的包。设备输入选项包括:CPU、Cuda、CL、Metal 和 Vulkan。
result = tvmc.run(package, device="cpu") #Step 3: Run
可以使用print(result)
打印输出结果
Step 1.1: Tune [Optional & Recommended]
优化:似乎需要运行在编译只后才能用
通过调优可进一步提高运行速度。此可选步骤使用机器学习来查看模型(函数)中的每个操作,并尝试找到一种更快的方法来运行它。我们通过成本模型和基准测试可能的时间表来做到这一点。
简单示例如下:
tvmc.tune(model, target="llvm") #Step 1.1: Optional Tune
注:自动调优过程中,需要xgboost自行搜索优化空间,即需要xgboost的支持,但在执行过程报如下错误:
ImportError: cannot import name 'EarlyStopException' from 'xgboost.core' (/usr/local/lib/python3.8/dist-packages/xgboost/core.py)
查阅资料:
ImportError: cannot import name 'EarlyStopException' from 'xgboost.core'[Bug]
xgboost在1.6.0及之后的版本,去掉了EarlyStopException
函数,同样可在xgboost中的core.py的github中可看到
因此,需要将xgboost版本回退到1.5.x版本
pip uninstall xgboost
pip install xgboost==1.5.0
终端输出结果如下:
可能存在可以忽略的UserWarnings。这应该会使最终结果更快,但可能需要数小时才能调整。
请参阅下面的“‘Saving the Tuning Results”部分。如果要应用优化结果,请确保将优化结果传递到编译中。
#tvmc.compile(model, target="llvm", tuning_records = "records.log") #Step 2: Compile
Example results:
In [102]: print(result)
Execution time summary:
mean (ms) median (ms) max (ms) min (ms) std (ms)
49.7363 49.5313 52.3399 48.5140 0.9405
Output Names:
['output_0']
优化后的模型:
In [29]: print(result)
Execution time summary:
mean (ms) median (ms) max (ms) min (ms) std (ms)
38.9687 39.0195 39.3786 38.2033 0.3377
Output Names:
['output_0']
Saving the tuning results
优化结果可以保存在文件中,供以后重复使用。
Method 1:
log_file = "hello.json"
# Run tuning
tvmc.tune(model, target="llvm", tuning_records=log_file)
...
# Later run tuning and reuse tuning results
tvmc.tune(model, target="llvm",tuning_records=log_file)
Method 2:
# Run tuning
tuning_records = tvmc.tune(model, target="llvm")
...
# Later run tuning and reuse tuning results
tvmc.tune(model, target="llvm",tuning_records=tuning_records)
Saving the model
为了加快速度,以后在加载模型(步骤 1)后,保存 Relay 版本。然后,该模型将显示在您保存它的位置,以便稍后在隐含的语法中使用。
model = tvmc.load('my_model.onnx') #Step 1: Load
model.save(desired_model_path)
Using Autoscheduler
使用下一代 tvm 实现可能更快的运行速度结果。计划搜索空间是自动生成的,这与以前需要手写计划不同。
tvmc.tune(model, target="llvm", enable_autoscheduler = True)
TVMC python:一种TVM的高级API的更多相关文章
- 使用python的Flask实现一个RESTful API服务器端[翻译]
最近这些年,REST已经成为web services和APIs的标准架构,很多APP的架构基本上是使用RESTful的形式了. 本文将会使用python的Flask框架轻松实现一个RESTful的服务 ...
- Python入门(四,高级)
一,面向对象 面向对象技术简介 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 类变量:类变量在整个实例化的对象中是公用的. ...
- 使用python的Flask实现一个RESTful API服务器端
使用python的Flask实现一个RESTful API服务器端 最近这些年,REST已经成为web services和APIs的标准架构,很多APP的架构基本上是使用RESTful的形式了. 本文 ...
- Python进阶:全面解读高级特性之切片!
导读:切片系列文章连续写了三篇,本文是对它们做的汇总.为什么要把序列文章合并呢?在此说明一下,本文绝不是简单地将它们做了合并,主要是修正了一些严重的错误(如自定义序列切片的部分),还对行文结构与章节衔 ...
- PJSUA2开发文档--第三章 PJSUA2高级API
3. PJSUA2高级API PJSUA2是PJSUA API以上的面向对象抽象.它为构建会话发起协议(SIP)多媒体用户代理应用程序(也称为IP / VoIP软电话)提供高级API.它将信令,媒体和 ...
- Kafka技术内幕 读书笔记之(三) 生产者——消费者:高级API和低级API——基础知识
1. 使用消费组实现消息队列的两种模式 分布式的消息系统Kafka支持多个生产者和多个消费者,生产者可以将消息发布到集群中不同节点的不同分区上:消费者也可以消费集群中多个节点的多个分区上的消息 . 写 ...
- python三大web框架Django,Flask,Flask,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架
Python几种主流框架 从GitHub中整理出的15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python We ...
- Qt 事件系统浅析 (用 Windows API 描述,分析了QCoreApplication::exec()和QEventLoop::exec的源码)(比起新号槽,事件机制是更高级的抽象,拥有更多特性,比如 accept/ignore,filter,还是实现状态机等高级 API 的基础)
事件系统在 Qt 中扮演了十分重要的角色,不仅 GUI 的方方面面需要使用到事件系统,Signals/Slots 技术也离不开事件系统(多线程间).我们本文中暂且不描述 GUI 中的一些特殊情况,来说 ...
- Python几种并发实现方案的性能比较
http://blog.csdn.net/permike/article/details/54846831 Python几种并发实现方案的性能比较 2017-02-03 14:33 1541人阅读 评 ...
- Hadoop(四)HDFS的高级API操作
一 HDFS客户端环境准备 1.1 jar包准备 1)解压hadoop-2.7.6.tar.gz到非中文目录 2)进入share文件夹,查找所有jar包,并把jar包拷贝到_lib文件夹下 3)在全部 ...
随机推荐
- vue中的find()函数的用法与扩展用法
find函数基本格式:let obj=this.list.find(item=>item.code===val)首先在这里我们要知道的两个基础知识一.find是一个查找函数.二.箭头函数find ...
- tomcat启动时启动窗口出现乱码的解决方案
工具/原料 一台安装了tomcat的电脑 方法/步骤 先来看看问题(图示),在tomcat的启动窗口打印的启动信息中包含了大量的中文乱码,虽然这些对tomcat本身的使用没有任何影响,但却 ...
- 【COM3D2Mod 制作教程(8)】实战!制作衣服部分(下)
[COM3D2Mod 制作教程(8)]实战!制作衣服部分(下) 制作袜子 Mod 体会了裙子 Mod 的制作流程,不知道你有没有被麻烦的权重和形态键搞崩溃过,现在做袜子难道还得在来一遍?而且裆下的权重 ...
- spring官宣接入deepseek,真的太香了~
写在前面 经常逛Spring官网(https://docs.spring.io/spring-ai/reference/api/chat/deepseek-chat.html)的小伙伴会发现, Spr ...
- Zookeeper - Zookeeper启动失败,日志报错 Missing election port for server: 2
Missing election port for server: 2 [整理日期]2023年6月1日 [基础环境]JDK 1.8.0_372.Zookeeper 3.4.5 [问题描述]进行部署分布 ...
- UE5 C++ 程序进程退出
// Fill out your copyright notice in the Description page of Project Settings. #pragma once #include ...
- JSON驱动的vue可视化表单设计器组件
form-create-designer 是基于 @form-create/element-ui 实现的表单设计器组件.可以通过拖拽的方式快速创建表单,轻松帮你搞定表单. 源码地址: Github | ...
- 使用PySide6/PyQt6实现Python跨平台表格数据分页打印预览处理
我曾经在前面使用WxPython开发跨平台应用程序的时候,写了一篇<WxPython跨平台开发框架之列表数据的通用打印处理>,介绍在WxPython下实现表格数据分页打印处理的过程,在Wi ...
- pytorch报错 No module named 'nn'
问题描述 pytorch 报错 No module named 'nn' 如果你 import torch 没问题,而 import torch.nn时出现问题,你可能命名使用了一个名字为 torch ...
- zookeeper windows 安装
下载 zookeeper 下载地址为: https://zookeeper.apache.org/releases.html. 选择一个地址点击版本下载: 配置 下载后解压到指定磁盘的 zookeep ...