使用TVMC Python

将使用resnet50 v2模型:

mkdir myscripts
cd myscripts
wget https://github.com/onnx/models/raw/b9a54e89508f101a1611cd64f4ef56b9cb62c7cf/vision/classification/resnet/model/resnet50-v2-7.onnx
mv resnet50-v2-7.onnx my_model.onnx
touch tvmcpythonintro.py

tvmcpythonintro.py:

# 第 0 步:导入
from tvm.driver import tvmc

# 第 1 步:加载
model = tvmc.load('my_model.onnx', shape_dict={'data':[1, 3, 224, 224]}) # 指定shape_dict

# 第 2 步:编译
package = tvmc.compile(model, target="llvm", package_path="package.tar")

# 第 3 步:运行
result = tvmc.run(package, device="cpu", benchmark=True, repeat=100)
stat_table = result.format_times()
print(stat_table)

# 第 4 步:调优
tuning_records = tvmc.tune(model, target="llvm", tuning_records="tuning_records.json")

# 第 5 步:使用调优结果编译
package_tuned = tvmc.compile(model, target="llvm", tuning_records = tuning_records, package_path="package_tuned.tar")

# 第 6 步:运行调优后的模型
result_tuned = tvmc.run(package_tuned, device="cpu", benchmark=True, repeat=100)
stat_table_tuned = result_tuned.format_times()
print(stat_table_tuned)

第0步:导入

导入TVMC(TVM的命令行驱动程序)。

第1步:加载

将模型导入TVMC,这一步将机器学习模型从支持的框架(ONNX、PyTorch、Karas、TensorFlow和TFLite)转换为TVM的高级图形表示语言Relay。

所有框架都支持用 shape_dict 参数覆盖输入 shape。对于大多数框架,这是可选的;但对 PyTorch 是必需的,因为 TVM 无法自动搜索它。

可以通过model.summary()查看Relay

第2步:编译

这一步将模型从Relay编译为要运行的硬件(称为target)可理解的底层语言。

可以使用package_path参数保存编译结果到文件,一般是.tar格式的文件。

可以使用TVMCPackage函数加载编译结果:

package = tvmc.TVMCPackage(package_path="package.tar") # 从文件中加载编译结果

第3步:运行

编译后的package可在目标硬件上运行,设备输入的选项有:cpu、cuda、cl、metal和vulkan。

benchmark参数指定了是否对模块的执行进行基准测试,启用基准测试将导致模型执行 1 + r e p e a t ∗ n u m b e r 1 + repeat * number 1+repeatnumber次。

repeat参数指定了重复运行多少次,需要benchmark设置为True。

number参数指定了每次重复中要测量的运行次数,需要benchmark设置为True。

print(result)打印模型的输出结果。

第4步:调优

通过调优可以进一步提高运行速度。

target参数和编译过程用到的target是相同的。

enable_autoscheduler参数设置为True时,使用autoscheduler而不是autotvm,调优后的模型运行速度会更快,因为autoscheduler自动生成搜索空间,搜索空间更大。

tuning_records参数指定输出调优结果的文件名,一般是.json格式的文件。

prior_records参数可以在之前的基础上继续进行调优,prior_records参数是字符串类型,可以是文件路径也可以是调优结果字符串。

trials 参数指定了在自动调优过程中,要尝试的调度策略的总数量,默认为10000个。

repeat参数用于指定每个调度策略在评估时应该重复运行多少次,默认为1次。

number参数用于指定在每次repeat中,该调度策略应该连续运行多少次,默认为10次。

第5步:使用调优结果编译

tuning_records参数利用调优结果对模型进行编译,tuning_records参数是字符串类型,可以是文件路径也可以是调优结果字符串

第6步:运行调优后的模型

以第3步相同的形式运行模型,观察调优结果。

  • 15
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值