【TVM 教程】在 Adreno™ 上部署预训练模型
内容提要
本文是一个逐步教程,演示如何在 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 作为调优算法进行调优。