【TVM 教程】在 Adreno™ 上部署预训练模型

💡 原文中文,约8900字,阅读约需22分钟。
📝

内容提要

本文是一个逐步教程,演示如何在 Adreno 上部署预训练的 PyTorch ResNet-18 模型。首先,安装 PyTorch 与 TorchVision。然后,在 Adreno GPU 上部署模型。接下来,准备运行 TVM RPC 服务器,并设置相关环境变量。获取 PyTorch 模型,并处理图片。将 PyTorch 模型转换为 Relay 模块。准备 TVM 目标,并进行自动调优。最后,通过 RPC 部署模型,并进行推理。

🔎

延伸解读

精度选择与性能权衡

教程建议在 Adreno 设备上使用 float16 进行计算,float32 进行累积,因为 float16 效率更高且不影响预期输出。通过 apply_graph_transforms 启用混合精度,并指定混合精度算子(如 nn.conv2d、nn.dense)。读者需注意,降低精度可能影响模型准确性,但教程认为对 ResNet-18 影响不大。实际部署时应根据任务需求权衡精度与速度。

自动调优的启用与成本

自动调优默认关闭,因其计算密集且耗时。教程展示了使用 XGBoost 调优器进行四阶段流程:提取任务、定义配置、遍历调优、选择最佳配置。调优在远程 Adreno 设备上通过 RPC 运行,需设置 is_tuning 为 True。若启用,需注意调优时间可能较长,且需确保 RPC 连接稳定。调优日志可用于后续构建。

OpenCLML 加速的适用条件

OpenCLML 卸载可加速支持的算子,但默认关闭。教程中 enable_clml 设为 False,且仅在非本地演示时生效。启用后,通过 clml.partition_for_clml 对模块进行分区。读者需注意,OpenCLML 可能不覆盖所有算子,且需要设备支持。实际部署时,应测试启用前后的性能差异,以决定是否使用。

RPC 部署的关键配置

通过 RPC 将模型部署到远程 Adreno 设备,需正确设置 tracker 和 forward 端口。教程中启动了 rpc_tracker 和 tvm_rpc 服务器,并设置环境变量 TVM_TRACKER_HOST 和 TVM_TRACKER_PORT。部署时,使用 ndk.create_shared 编译共享库,上传至设备并加载。注意,运行大模型时应增加 session_timeout,避免超时中断。

❓

Q&A

如何在 Adreno 上安装 PyTorch 和 TorchVision?

可以通过 pip 快速安装,使用命令:pip install torch 和 pip install torchvision。

如何将 PyTorch 模型转换为 Relay 模块?

使用 relay.frontend.from_pytorch API,将模型和输入形状传入即可。

在 Adreno GPU 上部署模型需要哪些步骤?

需要推送必要的文件到设备上,运行 TVM RPC 服务器,并设置相关环境变量。

如何启用 OpenCLML 加速运算符库?

在配置部分将 enable_clml 设置为 True,以启用 OpenCLML 卸载。

如何检查 TVM RPC 服务器是否正在运行?

可以使用命令 python -m tvm.exec.query_rpc_tracker --port 9190 来检查。

如何进行模型的自动调优?

提取可调优任务,定义调优配置,并使用 XGBoost 作为调优算法进行调优。

🏷️

标签

➡️

继续阅读