都江堰网站建设公司,网站的标签修改,织梦网站install,科协建设网站 方案本篇文章译自英文文档 Deploy Models and Integrate TVM tvm 0.14.dev0 documentation 更多 TVM 中文文档可访问 →Apache TVM 是一个端到端的深度学习编译框架#xff0c;适用于 CPU、GPU 和各种机器学习加速芯片。 | Apache TVM 中文站
本节介绍如何将 TVM 部署到各种平台适用于 CPU、GPU 和各种机器学习加速芯片。 | Apache TVM 中文站
本节介绍如何将 TVM 部署到各种平台以及如何将其与项目集成。 构建 TVM runtime 库
不同于传统的深度学习框架TVM 堆栈分为两个主要组件
TVM compiler负责模型的编译和优化。TVM runtime在目标设备上运行。
集成编译后的模块并不需要在目标设备上构建整个 TVM只需在你的电脑上构建 TVM 编译器堆栈然后用来交叉编译要部署到目标设备上的模块。
这里只需利用可集成到各种平台的轻量级 runtime API 即可。
例如可在基于 Linux 的嵌入式系统如树莓派上运行以下命令来构建 runtime API
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 的交叉编译
sudo apt-get update
sudo apt-get install gcc-aarch64-linux-gnu g-aarch64-linux-gnucmake .. \-DCMAKE_SYSTEM_NAMELinux \-DCMAKE_SYSTEM_VERSION1 \-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_PROGRAMNEVER \-DCMAKE_FIND_ROOT_PATH_MODE_LIBRARYONLY \-DMACHINE_NAMEaarch64-linux-gnumake -j$(nproc) runtime对于 ARM 裸机用以下工具链而不是 gcc-aarch64-linux-*来安装非常方便
sudo apt-get install gcc-multilib-arm-linux-gnueabihf g-multilib-arm-linux-gnueabihfRISC-V 的交叉编译
sudo apt-get update
sudo apt-get install gcc-riscv64-linux-gnu g-riscv64-linux-gnu
······
cmake .. \-DCMAKE_SYSTEM_NAMELinux \-DCMAKE_SYSTEM_VERSION1 \-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_PROGRAMNEVER \-DCMAKE_FIND_ROOT_PATH_MODE_LIBRARYONLY \-DMACHINE_NAMEriscv64-linux-gnumake -j$(nproc) runtimefile 命令可用于查询生成的 runtime 的架构。
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在树莓派上部署预训练模型
在目标设备上部署优化模型
完成调优和基准测试后要在目标设备上以不依赖 RPC 的方式来部署模型。具体操作参考以下教程
使用 C API 部署 TVM 模块 部署到 Android 将 TVM 集成到项目中 HLS 后端示例 Relay Arm® 计算库集成 Relay TensorRT 集成 Vitis AI 集成 Relay BNNS 集成
其他部署方法
前面已经有许多针对特定设备的操作指南其中包含 Python 代码的示例可用 Jupyter Notebook 查看这些操作指南描述了如何准备模型并将其部署到支持的后端。
部署深度学习模型