RPC_communciation_mechanism on TVM
Lucas-Lxb

RPC通信机制

一、概述

RPC(remote procedure call)远程过程调用,是一种在不同计算机之间的进程间通信的机制。通过RPC,我们可以像调用本地函数一样调用远程函数,简化了分布式系统的开发和维护工作。

二、RPC基本原理

RPC的基本工作原理如下:

  1. 调用方将调用请求封装成一个消息,并通过网络发送给远程服务
  2. 远程服务接收到消息后,解析消息并调用相应的函数
  3. 远程函数执行完毕后,将结果封装成消息并发送给调用方
  4. 调用方接收到消息后,解析消息并获取结果

image

三、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 是基于序列化、网络通信函数调用机制构建的,其工作原理可以分为以下几个步骤:

  1. 序列化请求:当客户端请求调用远程设备上的函数时,RPC 框架会将函数名称、参数、设备标识等信息序列化为消息。
  2. 网络传输:这些消息通过网络发送给远程设备(RPC Server)。RPC Server 监听指定端口,接收到消息后,解析请求。
  3. 执行函数:RPC Server 解析出要调用的函数名称和参数,在设备上执行该函数。执行过程中使用远程设备的计算资源(如 CPU、GPU 等)。
  4. 序列化结果:执行完成后,RPC Server 会将结果序列化,并通过网络返回给客户端。
  5. 反序列化结果:客户端接收到结果后,将其反序列化为可用的 Python 对象,继续后续逻辑。

4.TVM RPC常见的使用场景

  1. 分布式调优:利用多个远程设备的资源进行分布式自动调优,如在树莓派、GPU集群上调优模型。
  2. 异构计算:在不同的硬件设备(如CPU、GPU、FPGA等)上执行同一模型进行性能对比和优化。
  3. 远程推理:将模型部署在远程服务器或嵌入式设备上,客户端通过RPC调用远程推理服务。
由 Hexo 驱动 & 主题 Keep
本站由 提供部署服务