tvm.rpc
轻量级TVM RPC模块。
RPC 能够连接到远程服务器,上传并启动函数。 这对于交叉编译和远程测试非常有用, 编译器堆栈运行在本地服务器上,而我们使用 RPC 服务器 在没有可用编译器的远程运行时环境中运行。
测试程序在本地服务器上编译程序,上传并运行远程RPC服务器,获取结果返回以验证正确性。
TVM RPC服务器默认用户是可信的,必须在可信网络环境和加密通道中使用。它允许向服务器写入任意文件,并为任何能访问此API的人提供完整的远程代码执行能力。
类:
|
在单独的进程中启动RPC服务器。 |
|
RPC客户端会话模块 |
基于本地环境的RPCSession接口。 |
|
|
基于popen实现的RPCSession接口。 |
|
追踪器客户端会话。 |
功能:
|
连接到RPC服务器 |
|
连接到RPC追踪器 |
|
附加带有minrpc相关选项的编译器函数。 |
- class tvm.rpc.Server(host='0.0.0.0', port=9091, port_end=9199, is_proxy=False, tracker_addr=None, key='', load_library=None, custom_addr=None, silent=False, no_fork=False, server_init_callback=None, reuse_addr=True, timeout=None)
在单独的进程中启动RPC服务器。
这是一个基于多进程的简单Python实现。 也可以使用不依赖Python的TVM运行时来实现类似的基于C的服务器。
- Parameters:
host (str) – 服务器的主机URL。
port (int) – 要绑定的端口号
port_end (int, optional) – 搜索的结束端口
is_proxy (bool, optional) – 指定地址是否为代理。如果为真,主机和端口实际上对应的是代理服务器的地址。
tracker_addr (Tuple (str, int) , optional) – RPC跟踪器的地址,格式为元组(主机名, 端口号)。 如果该参数不为None,服务器会向跟踪器注册自己。
key (str, optional) – 用于在追踪器中标识设备类型的键。
load_library (str, optional) – 执行期间要加载的附加库列表。
custom_addr (str, optional) – 要报告给RPC跟踪器的自定义IP地址
silent (bool, optional) – 是否以静默模式运行此服务器。
no_fork (bool, optional) – 是否禁止在multiprocessing中使用fork。
server_init_callback (Callable, optional) – 服务器启动时的额外初始化函数。
reuse_addr (bool, optional) – 允许内核重用处于TIME_WAIT状态的本地套接字。
timeout (float, optional) - 为套接字上的所有操作设置超时时间
注意
TVM RPC服务器默认用户是可信的,必须在可信网络环境和加密通道中使用。它允许向服务器写入任意文件,并为任何能访问此API的人提供完整的远程代码执行能力。
RPC服务器只能识别tvm命名空间中的函数。 如果要在服务器环境中添加额外的自定义函数,可以使用server_init_callback。
def server_init_callback(): import tvm # must import mypackage here import mypackage tvm.register_func("function", mypackage.func) server = rpc.Server(host, server_init_callback=server_init_callback)
方法:
终止服务器进程
- terminate()
终止服务器进程
- tvm.rpc.connect(url, port, key='', session_timeout=0, session_constructor_args=None, enable_logging=False)
连接到RPC服务器
- Parameters:
url (str) – 主机的url地址
port (int) – 要连接的端口号
key (str, optional) – 用于匹配服务器的附加密钥
session_timeout (float, optional) – 会话持续时间(秒),当持续时间超过该值时允许服务器终止连接。当持续时间为零时,表示请求必须始终保持活动状态。
session_constructor_args (List) - 传递给远程会话构造函数的额外参数列表。 列表的第一个元素始终是指定会话构造函数名称的字符串,后面的参数是该函数的位置参数。
enable_logging (boolean) - 用于启用/禁用日志记录的标志。默认情况下日志记录是禁用的。
- Returns:
sess – 已连接的会话。
- Return type:
示例
常规用法 .. code-block:: python
client = rpc.connect(server_url, server_port, server_key)
Session_constructor 可用于在远程自定义会话 以下代码通过代理连接到远程内部服务器 通过在代理机器上构建另一个 RPCClientSession 并使用该会话 作为代理端点的服务会话。
client_via_proxy = rpc.connect( proxy_server_url, proxy_server_port, proxy_server_key, enable_logging session_constructor_args=[ "rpc.Connect", internal_url, internal_port, internal_key, internal_logging])
- tvm.rpc.connect_tracker(url, port)
连接到RPC追踪器
- Parameters:
- Returns:
sess – 已连接的追踪器会话。
- Return type:
- class tvm.rpc.RPCSession(sess)
RPC客户端会话模块
不要直接创建对象,请调用connect方法
方法:
获取系统范围内的库模块。
get_function(name)从会话中获取函数。
device(dev_type[, dev_id])构建一个远程设备。
upload(数据[, 目标])上传文件到远程运行时临时文件夹
download(path)从远程临时文件夹下载文件。
remove(path)从远程临时文件夹中移除文件。
listdir(path)从远程临时文件夹列出文件。
load_module(path)加载远程模块,需要先上传文件。
download_linked_module(path)链接远程模块并下载它。
cpu([dev_id])构建CPU设备。
cuda([dev_id])构建CUDA GPU设备。
cl([dev_id])构建OpenCL设备。
vulkan([dev_id])构建Vulkan设备。
metal([dev_id])构建Metal设备。
rocm([dev_id])构建ROCm设备。
ext_dev([dev_id])构建扩展设备。
hexagon([dev_id])构建Hexagon设备。
webgpu([dev_id])构建WebGPU设备。
- system_lib()
获取系统范围内的库模块。
- Returns:
module – 系统范围的库模块。
- Return type:
运行时模块
另请参阅
tvm.runtime.system_lib
- get_function(name)
从会话中获取函数。
- device(dev_type, dev_id=0)
构建一个远程设备。
- upload(data, target=None)
上传文件到远程运行时临时文件夹
- download(path)
从远程临时文件夹下载文件。
- listdir(path)
从远程临时文件夹列出文件。
- load_module(path)
加载远程模块,需要先上传文件。
- Parameters:
path (str) – 远程临时文件夹的相对路径。
- Returns:
m – 包含远程函数的远程模块。
- Return type:
模块
- download_linked_module(path)
链接远程模块并下载它。
注意
当本地客户端没有链接器时,此函数会很有帮助。
示例
mod = build_module_with_cross_compilation() # export the module as tar because a local linker is not available mod.export_library("lib.tar") remote.upload("lib.tar") # invoke the linker on the remote to link the module as a library # note that the library can only run on the same env as the remote with open("lib.so", "wb") as file: file.write(remote.download_linked_module("lib.tar"))
- cpu(dev_id=0)
构建CPU设备。
- cuda(dev_id=0)
构建CUDA GPU设备。
- cl(dev_id=0)
构建OpenCL设备。
- vulkan(dev_id=0)
构建Vulkan设备。
- metal(dev_id=0)
构建Metal设备。
- rocm(dev_id=0)
构建ROCm设备。
- ext_dev(dev_id=0)
构建扩展设备。
- hexagon(dev_id=0)
构建Hexagon设备。
- webgpu(dev_id=0)
构建WebGPU设备。
- class tvm.rpc.LocalSession
基于本地环境的RPCSession接口。
该类可用于实现需要同时在本地和远程运行的函数。
- class tvm.rpc.PopenSession(binary)
基于popen实现的RPCSession接口。
- class tvm.rpc.TrackerSession(addr)
追踪器客户端会话。
- Parameters:
addr (tuple) – 地址元组
方法:
close()关闭追踪器连接。
summary()获取追踪器的摘要字典。
获取跟踪器的文本摘要。
request(key[, priority, session_timeout, ...])向追踪器请求一个新的连接。
request_and_run(key, func[, priority, ...])从追踪器请求资源并运行该函数。
- close()
关闭追踪器连接。
- summary()
获取跟踪器的摘要字典。
- text_summary()
获取跟踪器的文本摘要。
- request(key, priority=1, session_timeout=0, max_retry=5, session_constructor_args=None)
向追踪器请求一个新的连接。
- request_and_run(key, func, priority=1, session_timeout=0, max_retry=2)
从追踪器请求资源并运行该函数。
该函数用于在执行过程中防止罕见的服务器节点意外退出。 在这种情况下,系统将请求新的资源并重新运行该函数。