精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

【TVM 教程】創建使用 microTVM 的 MLPerfTiny 提交 原創

發布于 2025-5-19 10:51
瀏覽
0收藏

Apache TVM 是一個深度的深度學習編譯框架,適用于 CPU、GPU 和各種機器學習加速芯片。更多 TVM 中文文檔可訪問 →https://tvm.hyper.ai/

作者:Mehrdad Hessar

本教程展示了如何使用 microTVM 構建 MLPerfTiny 提交。該教程演示了從 MLPerfTiny 基準模型中導入一個 TFLite 模型,使用 TVM 進行編譯,并生成一個可以刷寫到支持 Zephyr 的板上的 Zephyr 項目,以使用 EEMBC runner 對模型進行基準測試的步驟。

安裝 microTVM Python 依賴項

TVM 不包含用于 Python 串行通信的軟件包,因此在使用 microTVM 之前,我們必須安裝它。我們還需要 TFLite 來加載模型。

pip install pyserial==3.5 tflite==2.1
import os
import pathlib
import tarfile
import tempfile
import shutil

安裝 Zephyr

# 安裝 west 和 ninja
python3 -m pip install west
apt-get install -y ninja-build

# 安裝 ZephyrProject
ZEPHYR_PROJECT_PATH="/content/zephyrproject"
export ZEPHYR_BASE=${ZEPHYR_PROJECT_PATH}/zephyr
west init ${ZEPHYR_PROJECT_PATH}
cd ${ZEPHYR_BASE}
git checkout v3.2-branch
cd ..
west update
west zephyr-export
chmod -R o+w ${ZEPHYR_PROJECT_PATH}

# 安裝 Zephyr SDK
cd /content
ZEPHYR_SDK_VERSION="0.15.2"
wget "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v${ZEPHYR_SDK_VERSION}/zephyr-sdk-${ZEPHYR_SDK_VERSION}_linux-x86_64.tar.gz"
tar xvf "zephyr-sdk-${ZEPHYR_SDK_VERSION}_linux-x86_64.tar.gz"
mv "zephyr-sdk-${ZEPHYR_SDK_VERSION}" zephyr-sdk
rm "zephyr-sdk-${ZEPHYR_SDK_VERSION}_linux-x86_64.tar.gz"

# 安裝 Python 依賴項
python3 -m pip install -r "${ZEPHYR_BASE}/scripts/requirements.txt"


注意:僅在您有意使用 CMSIS-NN 代碼生成器生成此提交時安裝 CMSIS-NN。

安裝 Install CMSIS-NN

CMSIS_SHA="51263182d16c92649a48144ba56c0945f9fce60e"
CMSIS_URL="http://github.com/ARM-software/CMSIS_5/archive/${CMSIS_SHA}.tar.gz"
export CMSIS_PATH=/content/cmsis
DOWNLOAD_PATH="/content/${CMSIS_SHA}.tar.gz"
mkdir ${CMSIS_PATH}
wget ${CMSIS_URL} -O "${DOWNLOAD_PATH}"
tar -xf "${DOWNLOAD_PATH}" -C ${CMSIS_PATH} --strip-components=1
rm ${DOWNLOAD_PATH}

CMSIS_NN_TAG="v4.0.0"
CMSIS_NN_URL="https://github.com/ARM-software/CMSIS-NN.git"
git clone ${CMSIS_NN_URL} --branch ${CMSIS_NN_TAG} --single-branch ${CMSIS_PATH}/CMSIS-NN

導入 Python 依賴

import tensorflow as tf
import numpy as np

import tvm
from tvm import relay
from tvm.relay.backend import Executor, Runtime
from tvm.contrib.download import download_testdata
from tvm.micro import export_model_library_format
import tvm.micro.testing
from tvm.micro.testing.utils import (
    create_header_file,
    mlf_extract_workspace_size_bytes,
)

導入 Visual Wake Word Model

首先,從 MLPerfTiny 下載并導入 Visual Wake Word (VWW) TFLite 模型。該模型最初來自 MLPerf Tiny 倉庫。我們還捕獲了來自 TFLite 模型的元數據信息,如輸入/輸出名稱、量化參數等,這些信息將在接下來的步驟中使用。

我們使用索引來構建各種模型的提交。索引定義如下:要構建另一個模型,您需要更新模型 URL、簡短名稱和索引號。

關鍵詞識別(KWS)1

視覺喚醒詞(VWW)2

異常檢測(AD)3

圖像分類(IC)4

如果您想要使用 CMSIS-NN 構建提交,請修改 USE_CMSIS 環境變量。

export USE_CMSIS=1
MODEL_URL = "https://github.com/mlcommons/tiny/raw/bceb91c5ad2e2deb295547d81505721d3a87d578/benchmark/training/visual_wake_words/trained_models/vww_96_int8.tflite"
MODEL_PATH = download_testdata(MODEL_URL, "vww_96_int8.tflite", module="model")

MODEL_SHORT_NAME = "VWW"
MODEL_INDEX = 2

USE_CMSIS = os.environ.get("TVM_USE_CMSIS", False)

tflite_model_buf = open(MODEL_PATH, "rb").read()
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)

interpreter = tf.lite.Interpreter(model_path=str(MODEL_PATH))
interpreter.allocate_tensors()
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()

input_name = input_details[0]["name"]
input_shape = tuple(input_details[0]["shape"])
input_dtype = np.dtype(input_details[0]["dtype"]).name
output_name = output_details[0]["name"]
output_shape = tuple(output_details[0]["shape"])
output_dtype = np.dtype(output_details[0]["dtype"]).name

# 從 TFLite 模型中提取量化信息。
# 除了異常檢測模型外,所有其他模型都需要這樣做,
# 因為對于其他模型,我們從主機發送量化數據到解釋器,
# 然而,對于異常檢測模型,我們發送浮點數據,量化信息
# 在微控制器上進行。
if MODEL_SHORT_NAME != "AD":
    quant_output_scale = output_details[0]["quantization_parameters"]["scales"][0]
    quant_output_zero_point = output_details[0]["quantization_parameters"]["zero_points"][0]

relay_mod, params = relay.frontend.from_tflite(
    tflite_model, shape_dict={input_name: input_shape}, dtype_dict={input_name: input_dtype}
)

定義目標、運行時和執行器

現在我們需要定義目標、運行時和執行器來編譯這個模型。在本教程中,我們使用預先編譯(Ahead-of-Time,AoT)進行編譯,并構建一個獨立的項目。這與使用主機驅動模式的 AoT 不同,其中目標會使用主機驅動的 AoT 執行器與主機通信以運行推理。

# 使用 C 運行時 (crt)
RUNTIME = Runtime("crt")

# 使用帶有 `unpacked-api=True` 和 `interface-api=c` 的 AoT 執行器。`interface-api=c` 強制
# 編譯器生成 C 類型的函數 API,而 `unpacked-api=True` 強制編譯器生成最小的未打包格式輸入,
# 這減少了調用模型推理層時的堆棧內存使用。
EXECUTOR = Executor(
    "aot",
    {"unpacked-api": True, "interface-api": "c", "workspace-byte-alignment": 8},
)

# 選擇一個 Zephyr 板
BOARD = os.getenv("TVM_MICRO_BOARD", default="nucleo_l4r5zi")

# 使用 BOARD 獲取完整的目標描述
TARGET = tvm.micro.testing.get_target("zephyr", BOARD)

編譯模型并導出模型庫格式

現在,我們為目標編譯模型。然后,我們為編譯后的模型生成模型庫格式。我們還需要計算編譯后的模型所需的工作空間大小。

config = {"tir.disable_vectorize": True}
if USE_CMSIS:
    from tvm.relay.op.contrib import cmsisnn

    config["relay.ext.cmsisnn.options"] = {"mcpu": TARGET.mcpu}
    relay_mod = cmsisnn.partition_for_cmsisnn(relay_mod, params, mcpu=TARGET.mcpu)

with tvm.transform.PassContext(opt_level=3, config=config):
    module = tvm.relay.build(
        relay_mod, target=TARGET, params=params, runtime=RUNTIME, executor=EXECUTOR
    )

temp_dir = tvm.contrib.utils.tempdir()
model_tar_path = temp_dir / "model.tar"
export_model_library_format(module, model_tar_path)
workspace_size = mlf_extract_workspace_size_bytes(model_tar_path)

生成輸入/輸出頭文件

為了使用 AoT 創建 microTVM 獨立項目,我們需要生成輸入和輸出頭文件。這些頭文件用于將生成的代碼中的輸入和輸出 API 與獨立項目的其余部分連接起來。對于此特定提交,我們只需要生成輸出頭文件,因為輸入 API 調用是以不同的方式處理的。

extra_tar_dir = tvm.contrib.utils.tempdir()
extra_tar_file = extra_tar_dir / "extra.tar"

with tarfile.open(extra_tar_file, "w:gz") as tf:
    create_header_file(
        "output_data",
        np.zeros(
            shape=output_shape,
            dtype=output_dtype,
        ),
        "include/tvm",
        tf,
    )

創建項目、構建并準備項目 tar 文件

現在我們有了編譯后的模型作為模型庫格式,可以使用 Zephyr 模板項目生成完整的項目。首先,我們準備項目選項,然后構建項目。最后,我們清理臨時文件并將提交項目移動到當前工作目錄,可以在開發套件上下載并使用。

input_total_size = 1
for i in range(len(input_shape)):
    input_total_size *= input_shape[i]

template_project_path = pathlib.Path(tvm.micro.get_microtvm_template_projects("zephyr"))
project_options = {
    "extra_files_tar": str(extra_tar_file),
    "project_type": "mlperftiny",
    "board": BOARD,
    "compile_definitions": [
        f"-DWORKSPACE_SIZE={workspace_size + 512}",  # Memory workspace size, 512 is a temporary offset
        # since the memory calculation is not accurate.
        f"-DTARGET_MODEL={MODEL_INDEX}",  # Sets the model index for project compilation.
        f"-DTH_MODEL_VERSION=EE_MODEL_VERSION_{MODEL_SHORT_NAME}01",  # Sets model version. This is required by MLPerfTiny API.
        f"-DMAX_DB_INPUT_SIZE={input_total_size}",  # Max size of the input data array.
    ],
}

if MODEL_SHORT_NAME != "AD":
    project_options["compile_definitions"].append(f"-DOUT_QUANT_SCALE={quant_output_scale}")
    project_options["compile_definitions"].append(f"-DOUT_QUANT_ZERO={quant_output_zero_point}")

if USE_CMSIS:
    project_options["compile_definitions"].append(f"-DCOMPILE_WITH_CMSISNN=1")

# 注意:根據您使用的板子可能需要調整這個值。
project_options["config_main_stack_size"] = 4000

if USE_CMSIS:
    project_options["cmsis_path"] = os.environ.get("CMSIS_PATH", "/content/cmsis")

generated_project_dir = temp_dir / "project"

project = tvm.micro.project.generate_project_from_mlf(
    template_project_path, generated_project_dir, model_tar_path, project_options
)
project.build()

# 清理構建目錄和額外的工件
shutil.rmtree(generated_project_dir / "build")
(generated_project_dir / "model.tar").unlink()

project_tar_path = pathlib.Path(os.getcwd()) / "project.tar"
with tarfile.open(project_tar_path, "w:tar") as tar:
    tar.add(generated_project_dir, arcname=os.path.basename("project"))

print(f"The generated project is located here: {project_tar_path}")

使用此項目與您的板子

既然我們有了生成的項目,您可以在本地使用該項目將板子刷寫并準備好運行 EEMBC runner 軟件。要執行此操作,請按照以下步驟操作:

tar -xf project.tar
cd project
mkdir build
cmake ..
make -j2
west flash

現在,您可以按照這些說明將您的板子連接到 EEMBC runner 并在您的板子上對此模型進行基準測試。

下載 Python 源代碼:micro_mlperftiny.py

下載 Jupyter notebook:micro_mlperftiny.ipynb

?著作權歸作者所有,如需轉載,請注明出處,否則將追究法律責任
收藏
回復
舉報
回復
相關推薦
www欧美com| 亚洲黄色av片| 黄色毛片在线观看| 免费观看日韩电影| 久久精品国产99国产精品澳门| 亚洲综合激情视频| 成人性生交大片免费看在线播放| 91免费观看国产| 国产一区视频在线播放| 国产在线拍揄自揄拍无码视频| 亚洲区小说区图片区qvod| 欧美三片在线视频观看 | 欧美精品久久久久久| 欧美日韩成人综合| 亚洲中文字幕无码av永久| 黄色免费在线播放| 国产iv一区二区三区| 国产成人小视频在线观看| 国产成人自拍网站| 九九久久精品| 精品国产污污免费网站入口 | 男女羞羞视频在线观看| 国产天堂亚洲国产碰碰| 国产精品加勒比| 亚洲一级黄色大片| 久久精品亚洲| 欧美精品久久久久久久| 男人天堂资源网| 小说区图片区色综合区| 日韩女优毛片在线| 亚洲免费av一区| 欧美电影网址| 亚洲国产综合在线| 国产免费一区二区三区四在线播放| 天堂影院在线| 懂色av一区二区在线播放| 国产精品美腿一区在线看| 国产精品久久久久久久妇| 欧美一区网站| 久久精品中文字幕电影| 老熟妇一区二区| 日韩三区视频| 亚洲福利在线视频| 在线中文字日产幕| 人人爱人人干婷婷丁香亚洲| 欧美日韩美女一区二区| 无码内射中文字幕岛国片| 麻豆免费版在线观看| 亚洲成a人v欧美综合天堂 | 久久亚洲AV成人无码国产野外| 国产成人免费视频网站视频社区 | 久久婷婷色综合| 国产精品视频福利| 高h震动喷水双性1v1| 国产精品一区二区无线| 国产一区香蕉久久| 亚洲中文字幕一区二区| 麻豆中文一区二区| 国产三级精品网站| 国产又粗又猛又黄又爽无遮挡 | 宇都宫紫苑在线播放| 国产成人免费视频网站视频社区| 337p亚洲精品色噜噜噜| 涩多多在线观看| 国产95亚洲| 日韩三级电影网址| 丰满少妇一区二区三区专区| 日韩欧美一级| 亚洲成成品网站| 又黄又爽的网站| 青青久久av| 亚洲欧洲偷拍精品| www在线观看免费视频| 国产欧美一区| www国产精品视频| 日本黄色录像视频| 欧美日韩影院| 69影院欧美专区视频| 99久久精品国产亚洲| 巨乳诱惑日韩免费av| 国产精品国产亚洲伊人久久| 一区二区视频免费| 国产激情视频一区二区在线观看| 国产女人水真多18毛片18精品| 天天操天天爱天天干| 久久久久久久久久看片| 亚洲国产欧洲综合997久久| 黄色网在线看| 亚洲成人综合网站| 能看的毛片网站| 亚洲视频资源| 亚洲精品国产精品国自产在线| 波多野吉衣中文字幕| 天天综合国产| 韩国19禁主播vip福利视频| 亚洲欧美偷拍一区| 国内一区二区视频| 蜜桃导航-精品导航| 最新97超碰在线| 亚洲国产综合色| 日本特黄a级片| avtt综合网| 中国人与牲禽动交精品| 欧美精品xxxxx| 视频一区视频二区中文字幕| 91在线免费观看网站| 性xxxxbbbb| 亚洲人成在线观看一区二区| 日韩黄色片视频| 国产剧情一区二区在线观看| 日韩成人av在线播放| 日本一二三区在线观看| 在线亚洲精品| 91香蕉视频在线下载| 黄色免费在线播放| 五月天国产精品| 国产乱码一区二区三区四区| 一区二区小说| 欧美激情第1页| 亚洲图片中文字幕| 久久综合视频网| 欧美日韩中文字幕在线播放| 91大神在线观看线路一区| 欧美精品一区二区三区四区 | 国产九九在线视频| 麻豆精品av| 九九热最新视频//这里只有精品| 成人一二三四区| 99精品视频一区二区三区| 欧美 国产 精品| 国产a亚洲精品| 亚洲美女福利视频网站| 国产大片中文字幕| 国产裸体歌舞团一区二区| 亚洲 日韩 国产第一区| 少妇视频一区| 亚洲国产成人在线视频| 激情四射综合网| 精品一区二区在线看| 日韩电影大全在线观看| 丝袜诱惑一区二区| 亚洲国产成人在线视频| 欧美日韩人妻精品一区二区三区| 久久av资源网| 一区二区免费电影| 91精品美女| 中文字幕少妇一区二区三区| 欧美 亚洲 另类 激情 另类| 久久网站最新地址| 免费大片在线观看| 亚洲肉体裸体xxxx137| 91av福利视频| 神马久久久久| 色偷偷成人一区二区三区91| 黄瓜视频污在线观看| 亚洲深夜激情| 精品视频导航| 欧洲一级精品| 在线性视频日韩欧美| 精产国品一区二区| 欧美国产欧美综合| 亚洲欧美国产中文| 亚洲欧美综合久久久| 亚洲一区二区三区在线视频| 日韩专区av| 亚洲精品一区二区三区在线观看| 日韩欧美性视频| 91麻豆精品视频| 欧美日韩亚洲一二三| 大色综合视频网站在线播放| 国产综合在线观看视频| a视频在线免费看| 精品美女一区二区| 成人在线免费看视频| 欧美国产视频在线| 国产免费中文字幕| 在线欧美不卡| 欧美一级爽aaaaa大片| 国产精品原创视频| 理论片在线不卡免费观看| 好吊视频一二三区| 色哟哟精品一区| 国产高清视频免费在线观看| 丰满放荡岳乱妇91ww| 日韩精品视频一区二区在线观看| 日韩电影在线视频| 成人免费视频网站| 亚洲最大网站| 久久视频在线免费观看| 天天干天天操av| 欧美伊人久久久久久午夜久久久久| 国产极品国产极品| 26uuu亚洲综合色| 欧美一级视频在线| 一区二区毛片| 亚洲一区在线免费| 美女福利一区| 国产在线视频一区| 新版的欧美在线视频| www.亚洲人.com| 少妇精品视频一区二区| 欧美日韩精品一区视频| 国产精品成人aaaa在线| 欧美国产成人在线| 亚洲天堂av网站| 久草在线在线精品观看| 国产极品尤物在线| 天天综合国产| 欧美视频观看一区| 中文字幕日韩在线| 国产精品久久久久高潮| heyzo在线| 久久久精品美女| 猫咪在线永久网站| 精品久久久久久久久久久久包黑料 | 岳乳丰满一区二区三区| 亚洲成a人片在线不卡一二三区| 亚洲欧美综合7777色婷婷| av在线这里只有精品| 久久精品国产露脸对白| 日韩福利电影在线| 免费毛片小视频| 国产精品草草| 国产奶头好大揉着好爽视频| 国产精品一在线观看| 国产女主播一区二区| 久久久久亚洲精品中文字幕| 国产精品美女在线| a欧美人片人妖| 午夜精品久久久久久久99热| h网站久久久| 色偷偷av一区二区三区| 精品视频一二区| 亚洲免费精彩视频| 色欲av伊人久久大香线蕉影院| 91精品国产免费久久综合| 中文字幕在线观看欧美| 欧洲日韩一区二区三区| 国语对白永久免费| 日韩欧美亚洲国产一区| 中文字幕在线观看免费视频| 亚洲国产一区二区三区 | 亚洲va在线va天堂| 久久久久久久久久久久久久久久久| 国产精品久久综合| 欧美亚洲色综久久精品国产| 国产女同互慰高潮91漫画| 亚洲 小说 欧美 激情 另类| 不卡视频在线看| 亚洲激情 欧美| 波多野结衣视频一区| 亚洲色图欧美日韩| 26uuu亚洲综合色欧美| 99re久久精品国产| 久久综合九色综合97婷婷| 波多野结衣视频播放| 97久久超碰精品国产| 特级西西人体4444xxxx| 91丝袜国产在线播放| 亚欧洲乱码视频| 国产视频亚洲色图| 我要看一级黄色录像| 最新日韩av在线| 真实国产乱子伦对白在线| 一区二区三区精品在线| 精品无码av在线| 丰满岳妇乱一区二区三区| 国产黄网在线观看| 欧美色涩在线第一页| 国产毛片在线视频| 精品久久国产字幕高潮| 艳母动漫在线看| 亚洲性无码av在线| 欧美a在线看| 欧美疯狂xxxx大交乱88av| 秋霞伦理一区| 国产精品免费久久久久久| 日韩一级特黄| 国产精品初高中精品久久| 美日韩中文字幕| 一本色道久久综合亚洲二区三区| 欧美a级在线| 无码人妻精品一区二区三区在线 | 日本欧美精品在线| 免费成人黄色网| 99高清视频有精品视频| 免费观看不卡av| 在线观看视频黄色| 亚洲在线一区| www.cao超碰| 不卡的av网站| 欧美性生交大片| 亚洲成人免费影院| 国内av在线播放| 日韩小视频在线观看专区| 韩国三级av在线免费观看| 超碰日本道色综合久久综合| 色一区二区三区| 91热福利电影| 一区二区三区四区在线看| 五月天色婷婷综合| 噜噜噜在线观看免费视频日韩 | 国产高清视频一区二区| 久久国产精品-国产精品| 99久久亚洲精品蜜臀| av在线播放亚洲| 精品一区二区三区视频在线观看| aaaa黄色片| 亚洲少妇中出一区| 在线免费观看av网址| 欧美刺激脚交jootjob| 在线免费黄色| 欧美在线视频免费| 国产精品午夜av| 中文网丁香综合网| 狂野欧美性猛交xxxx巴西| 四虎成人免费视频| 亚洲丝袜制服诱惑| 欧美一级黄视频| 日韩电影免费在线观看中文字幕| 麻豆影视国产在线观看| 欧洲精品毛片网站| 国产精品玖玖玖在线资源| 91社在线播放| 麻豆91精品视频| 精品人妻一区二区三区视频| 亚洲成a人在线观看| 国产精品永久久久久久久久久| 亚洲视频自拍偷拍| 色是在线视频| 久久狠狠久久综合桃花| 欧美成人精品| 97超碰免费在线观看| 国产精品久久久久一区二区三区共| 9i精品福利一区二区三区| 亚洲电影天堂av| 女同一区二区免费aⅴ| 91亚洲精品一区| 欧美aaaaaaaaaaaa| www.99在线| 国产欧美日韩不卡免费| 中文字幕在线欧美| 亚洲精选在线观看| 亚洲精品福利电影| 精品国产综合久久| 99在线观看免费视频精品观看| avtt中文字幕| 亚洲一二三四久久| 欧美熟妇交换久久久久久分类 | 天堂社区 天堂综合网 天堂资源最新版| 9色精品在线| 欧美图片一区二区| 日韩欧美999| 国产在线91| 国产欧美久久久久久| 日韩欧美二区| 三区视频在线观看| 夜夜精品视频一区二区| 亚洲精品成人电影| 久久久视频精品| 任你躁在线精品免费| av观看免费在线| 欧美激情综合在线| 中文字幕在线观看视频一区| 久久精品亚洲一区| 涩爱av色老久久精品偷偷鲁 | 国产精品久久久视频| 欧美日韩视频在线第一区| 大地资源网3页在线观看| 波多野结衣久草一区| 影音先锋久久| 国产黄片一区二区三区| 欧美日韩精品二区第二页| 老司机在线看片网av| 国产精品二区在线| 性欧美xxxx大乳国产app| 超薄肉色丝袜一二三| 91精品国产美女浴室洗澡无遮挡| 污的网站在线观看| 久久99精品久久久久久水蜜桃 | 欧美自拍偷拍第一页| 欧美伊久线香蕉线新在线| 精品一区电影| 色黄视频免费看| 欧美性高潮在线| 天堂地址在线www| 国产精品12| 日本亚洲视频在线| 校园春色 亚洲| 亚洲视频欧洲视频| 日韩精品久久久久久久软件91| 免费看国产一级片| 国产精品久久777777| 日本高清视频www| 国产精品视频1区| 欧美日韩国产高清| 国产伦理片在线观看| 欧美不卡视频一区| 深夜视频一区二区| 日本一本中文字幕|