部署模型并与 TVM 集成

本篇文章译自英文文档 Deploy Models and Integrate TVM tvm 0.14.dev0 documentation 更多 TVM 中文文档可访问 →Apache TVM 是一个端到端的深度学习编译框架,适用于 CPU、GPU 和各种机器学习加速芯片。 | Apache TVM 中文站

本节介绍如何将 TVM 部署到各种平台,以及如何将其与项目集成。

构建 TVM runtime 库

不同于传统的深度学习框架,TVM 堆栈分为两个主要组件:

  • TVM compiler:负责模型的编译和优化。
  • TVM runtime:在目标设备上运行。

集成编译后的模块并不需要在目标设备上构建整个 TVM,只需在你的电脑上构建 TVM 编译器堆栈,然后用来交叉编译要部署到目标设备上的模块。

这里只需利用可集成到各种平台的轻量级 runtime API 即可。

例如,可在基于 Linux 的嵌入式系统(如树莓派)上,运行以下命令来构建 runtime API:

bash 复制代码
git clone --recursive https://github.com/apache/tvm tvm
cd tvm
mkdir build
cp cmake/config.cmake build
cd build
cmake ..
make runtime

注意:make runtime 仅构建 runtime 库。

也可以交叉编译 runtime 库,但不要和嵌入式设备的交叉编译模型混淆。

若要包含其他 runtime(例如 OpenCL),可以修改 config.cmake 来启用这些选项。获取 TVM runtime 库后,就可以链接编译好的库了。

TVM 可针对不同架构(例如 x64_64 主机上的 aarch64)交叉编译模型(无论是否被 TVM 优化)。一旦模型被交叉编译,runtime 必须与目标架构兼容,才能运行交叉编译的模型。

为其他架构交叉编译 TVM runtime​

在 上面 的示例中,runtime 库是在树莓派上编译的,与树莓派等目标设备相比,在拥有高性能芯片和充足资源的主机(如笔记本电脑、工作站)上生成 runtime 库的速度要快得多。为了交叉编译 runtime,必须安装目标设备的工具链。安装正确的工具链后,与原生编译相比,主要区别在于向 cmake 传递了一些额外的命令行参数来指定要使用的工具链。例如,在现代笔记本电脑(使用 8 个线程)上为 aarch64 构建 TVM runtime 库需要大约 20 秒,而在树莓派 4 上构建 runtime 需要约 10 分钟。

aarch64 的交叉编译​

sql 复制代码
sudo apt-get update
sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
ini 复制代码
cmake .. \
    -DCMAKE_SYSTEM_NAME=Linux \
    -DCMAKE_SYSTEM_VERSION=1 \
    -DCMAKE_C_COMPILER=/usr/bin/aarch64-linux-gnu-gcc \
    -DCMAKE_CXX_COMPILER=/usr/bin/aarch64-linux-gnu-g++ \
    -DCMAKE_FIND_ROOT_PATH=/usr/aarch64-linux-gnu \
    -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER \
    -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY \
    -DMACHINE_NAME=aarch64-linux-gnu

make -j$(nproc) runtime

对于 ARM 裸机,用以下工具链(而不是 gcc-aarch64-linux-*)来安装非常方便:

arduino 复制代码
sudo apt-get install gcc-multilib-arm-linux-gnueabihf g++-multilib-arm-linux-gnueabihf

RISC-V 的交叉编译​

ini 复制代码
sudo apt-get update
sudo apt-get install gcc-riscv64-linux-gnu g++-riscv64-linux-gnu
···

···
cmake .. \
    -DCMAKE_SYSTEM_NAME=Linux \
    -DCMAKE_SYSTEM_VERSION=1 \
    -DCMAKE_C_COMPILER=/usr/bin/riscv64-linux-gnu-gcc \
    -DCMAKE_CXX_COMPILER=/usr/bin/riscv64-linux-gnu-g++ \
    -DCMAKE_FIND_ROOT_PATH=/usr/riscv64-linux-gnu \
    -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER \
    -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY \
    -DMACHINE_NAME=riscv64-linux-gnu

make -j$(nproc) runtime

file 命令可用于查询生成的 runtime 的架构。

less 复制代码
file libtvm_runtime.so
libtvm_runtime.so: ELF 64-bit LSB shared object, UCB RISC-V, version 1 (GNU/Linux), dynamically linked, BuildID[sha1]=e9ak845b3d7f2c126dab53632aea8e012d89477e, not stripped

针对目标设备优化和调优模型​

在嵌入式设备上对 TVM 内核进行测试、调优和基准测试,最简单且推荐的方法是通过 TVM 的 RPC API。下面是相关教程的链接:

在目标设备上部署优化模型​

完成调优和基准测试后,要在目标设备上以不依赖 RPC 的方式来部署模型。具体操作参考以下教程:

其他部署方法​

前面已经有许多针对特定设备的操作指南,其中包含 Python 代码的示例(可用 Jupyter Notebook 查看),这些操作指南描述了如何准备模型,并将其部署到支持的后端。

部署深度学习模型

相关推荐
神奇夜光杯6 分钟前
Python酷库之旅-第三方库Pandas(202)
开发语言·人工智能·python·excel·pandas·标准库及第三方库·学习与成长
正义的彬彬侠9 分钟前
《XGBoost算法的原理推导》12-14决策树复杂度的正则化项 公式解析
人工智能·决策树·机器学习·集成学习·boosting·xgboost
Debroon18 分钟前
RuleAlign 规则对齐框架:将医生的诊断规则形式化并注入模型,无需额外人工标注的自动对齐方法
人工智能
羊小猪~~25 分钟前
神经网络基础--什么是正向传播??什么是方向传播??
人工智能·pytorch·python·深度学习·神经网络·算法·机器学习
AI小杨26 分钟前
【车道线检测】一、传统车道线检测:基于霍夫变换的车道线检测史诗级详细教程
人工智能·opencv·计算机视觉·霍夫变换·车道线检测
晨曦_子画31 分钟前
编程语言之战:AI 之后的 Kotlin 与 Java
android·java·开发语言·人工智能·kotlin
道可云32 分钟前
道可云人工智能&元宇宙每日资讯|2024国际虚拟现实创新大会将在青岛举办
大数据·人工智能·3d·机器人·ar·vr
人工智能培训咨询叶梓42 分钟前
探索开放资源上指令微调语言模型的现状
人工智能·语言模型·自然语言处理·性能优化·调优·大模型微调·指令微调
zzZ_CMing42 分钟前
大语言模型训练的全过程:预训练、微调、RLHF
人工智能·自然语言处理·aigc
newxtc43 分钟前
【旷视科技-注册/登录安全分析报告】
人工智能·科技·安全·ddddocr