RPC_communciation_mechanism on TVM
RPC通信机制
一、概述
RPC(remote procedure call)远程过程调用,是一种在不同计算机之间的进程间通信的机制。通过RPC,我们可以像调用本地函数一样调用远程函数,简化了分布式系统的开发和维护工作。
二、RPC基本原理
RPC的基本工作原理如下:
- 调用方将调用请求封装成一个消息,并通过网络发送给远程服务
- 远程服务接收到消息后,解析消息并调用相应的函数
- 远程函数执行完毕后,将结果封装成消息并发送给调用方
- 调用方接收到消息后,解析消息并获取结果

三、TVM RPC 通信 (自定义RPC框架)
1.TVM RPC通信核心组件
- RPC Tracker : 跟踪和管理远程设备,记录每个远程设备的状态和位置
- RPC Server : 在远程设备上运行,接受来自客户端的请求并执行任务
- RPC Client : 在本地运行,用于向远程设备发送任务,并接受执行结果
2.RPC通信流程
(1)启动 RPC Tracker
RPC Tracker是负责管理所有远程设备的中心节点,它会追踪已经注册的 RPC Server,并允许客户端通过Tracker定位和连接到相应的设备。
启动 RPC Tracker的命令如下:
1 | python -m tvm.exec.rpc_tracker --host=0.0.0.0 --port=9190 |
(2)启动 RPC Server
在远程设备上(如树莓派、GPU 服务器等),需要启动 RPC Server,它会注册到指定的 RPC Tracker 并等待客户端的任务请求。启动命令如下:
1 | python -m tvm.exec.rpc_server --tracker=tracker_host:9190 --key=raspberry_pi |
RPC Server会注册自身到Tracker,成为可用的设备,并接受从客户端发来的任务请求。
(3)客户端连接RPC Server
在本地机器上,客户端通过 RPC Tracker 查找和连接到远程设备(RPC Server)。客户端首先连接到 Tracker,然后通过指定的 key 请求连接到特定设备。
(4)执行远程任务
一旦客户端连接到远程设备(通过 RPC Tracker),它可以在该设备上执行远程任务,例如推理或性能调优。可以在远程设备上加载模块并运行。
(5)结果返回——(自动完成)
远程设备(RPC Server)在执行完任务后,会通过网络将结果返回给本地客户端(RPC Client)。这个过程是自动完成的,客户端无需关心底层的网络传输,TVM 的 RPC 框架会处理数据的序列化、传输和反序列化。
3.TVM RPC的工作原理
TVM 的 RPC 是基于序列化、网络通信和函数调用机制构建的,其工作原理可以分为以下几个步骤:
- 序列化请求:当客户端请求调用远程设备上的函数时,RPC 框架会将函数名称、参数、设备标识等信息序列化为消息。
- 网络传输:这些消息通过网络发送给远程设备(RPC Server)。RPC Server 监听指定端口,接收到消息后,解析请求。
- 执行函数:RPC Server 解析出要调用的函数名称和参数,在设备上执行该函数。执行过程中使用远程设备的计算资源(如 CPU、GPU 等)。
- 序列化结果:执行完成后,RPC Server 会将结果序列化,并通过网络返回给客户端。
- 反序列化结果:客户端接收到结果后,将其反序列化为可用的 Python 对象,继续后续逻辑。
4.TVM RPC常见的使用场景
- 分布式调优:利用多个远程设备的资源进行分布式自动调优,如在树莓派、GPU集群上调优模型。
- 异构计算:在不同的硬件设备(如CPU、GPU、FPGA等)上执行同一模型进行性能对比和优化。
- 远程推理:将模型部署在远程服务器或嵌入式设备上,客户端通过RPC调用远程推理服务。