ARM-CPU卷积网络的自动调谐

本文详细介绍了如何对ARM CPU进行卷积网络的自动调谐,利用TVM的RPC Tracker管理和注册设备,加快调谐过程。通过在远程设备上构建TVM运行时并启动RPC Tracker,然后进行设备注册,最终实现跨设备的并行性能测量。调谐过程中,TVM会生成最佳操作旋钮值的日志文件,用于提高运算效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ARM-CPU卷积网络的自动调谐
为特定的ARM设备自动调谐对于获得最佳性能至关重要。这是一个关于如何调整整个卷积网络的资料。
以模板的形式编写了TVM中ARM CPU的操作实现。模板有许多可调旋钮(平铺系数、矢量化、展开等)。将调整神经网络中的所有卷积和深度卷积算子。在调优之后,生成一个日志文件,其中存储了所有所需操作符的最佳旋钮值。当TVM编译器编译这些运算符时,它将查询此日志文件以获得最佳的旋钮值。
还发布了一些arm设备的预调参数。可以转到arm cpu基准测试来查看结果。
本文不会在Windows或最新版本的macOS上运行。要让它运行,需要将本教程的主体包装在if name == “main”: 块中。
安装依赖项
要在tvm中使用autotvm包,需要安装一些额外的依赖项。(如果使用python2,请将“3”更改为“2”):
pip3 install --user psutil xgboost tornado
为了使TVM在调谐过程中运行更快,建议使用cython作为TVM的FFI。在TVM的根目录中,执行(如果使用python2,将“3”更改为“2”):
pip3 install --user cython
sudo make cython3
现在回到python代码。导入包。
import os

import numpy as np
import tvm
from tvm import relay, autotvm
import tvm.relay.testing
from tvm.autotvm.tuner import XGBTuner, GATuner, RandomTuner, GridSearchTuner
from tvm.contrib.utils import tempdir
import tvm.contrib.graph_runtime as runtime
Define network
首先需要在转换前端API中定义网络。可以从转换测试. 也可以从MXNet、ONNX和TensorFlow加载模型。
def get_network(name, batch_size):
“”“Get the symbol definition and random weight of a network”""
input_shape = (batch_size, 3, 224, 224)
output_shape = (batch_size, 1000)

if "resnet" in name:
    n_layer = int(name.split("-")[1])
    mod, params = relay.testing.resnet.get_workload(
        num_layers=n_layer, batch_size=batch_size, dtype=dtype
    )
elif "vgg" in name:
    n_layer = int(name.split("-")[1])
    mod, params = relay.testing.vgg.get_workload(
        num_layers=n_layer, batch_size=batch_size, dtype=dtype
    )
elif name == "mobilenet":
    mod, params = relay.testing.mobilenet.get_workload(batch_size=batch_size)
elif name == "squeezenet_v1.1":
    mod, params = relay.testing.squeezenet.get_workload(
        batch_size=batch_size, version="1.1", dtype=dtype
    )
elif name == "inception_v3":
    input_shape = (batch_size, 3, 299, 299)
    mod, params = relay.testing.inception_v3.get_workload(batch_size=batch_size, dtype=dtype)
elif name == "mxnet":
    # an example for mxnet model
    from mxnet.gluon.model_zoo.vision import get_model

    block = get_model("resnet18_v1", pretrained=True)
    mod, params = relay.frontend.from_mxnet(block, shape={"data": input_shape}, dtype=dtype)
    net = mod["main"]
    net = relay.Function(
        net.params,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值