【TVM 教程】交叉编译与 RPC
💡
原文中文,约4500字,阅读约需11分钟。
📝
内容提要
Apache TVM 更新至 0.21.0 版本,中文文档已同步。本文介绍如何通过交叉编译与 RPC 在远程设备(如 Raspberry Pi 和 Firefly-RK3399)上执行深度学习模型。步骤包括在远程设备上构建 TVM 运行时、启动 RPC 服务器、在本地编译内核并上传至远程设备,最后展示如何在远程设备上运行 CPU 和 OpenCL 内核,以确保性能评估时避免网络延迟。
🎯
关键要点
- Apache TVM 更新至 0.21.0 版本,中文文档已同步。
- 通过交叉编译与 RPC,可以在本地机器上编译程序,并在远程设备上运行,适用于资源有限的设备。
- 在远程设备上构建 TVM 运行时,假设目标设备运行 Linux 系统。
- 启动 RPC 服务器的命令为:python -m tvm.exec.rpc_server --host 0.0.0.0 --port=9090。
- 在本地机器上声明并交叉编译内核,使用适合目标设备的编译选项。
- 通过 RPC 远程运行 CPU 内核,需获取 RPC 会话并上传生成的库。
- 评估内核性能时,使用 time_evaluator 测量执行时间以避免网络延迟。
- 对于 OpenCL 设备,整体流程与 CPU 内核相似,但需在设备上启用 OpenCL 并构建 TVM 运行时。
❓
延伸问答
如何在远程设备上构建 TVM 运行时?
在远程设备上执行命令:git clone --recursive https://github.com/apache/tvm tvm,cd tvm,然后运行 make runtime -j2。
如何启动 RPC 服务器?
在远程设备上运行命令:python -m tvm.exec.rpc_server --host 0.0.0.0 --port=9090。
如何在本地机器上交叉编译内核?
在本地机器上声明计算内核后,使用 tvm.compile(mod, target=target) 进行交叉编译,目标应根据设备设置。
如何通过 RPC 远程运行 CPU 内核?
获取 RPC 会话后,上传生成的库并调用设备上的编译器进行重新链接,最后运行函数。
如何评估内核性能以避免网络延迟?
使用 time_evaluator 测量执行时间,该函数会运行多次并返回每次执行的耗时。
在 OpenCL 设备上运行内核的流程与 CPU 内核有何不同?
整体流程相似,但需要在设备上启用 OpenCL 并构建 TVM 运行时。
➡️