新网站建设风格无锡网络公司服务
2026/4/17 14:32:20 网站建设 项目流程
新网站建设风格,无锡网络公司服务,小程序开发平台哪里做得好,杭州公司网站建设TVM 现已更新到 0.21.0 版本#xff0c;TVM 中文文档已经和新版本对齐。 Apache TVM 是一个深度的深度学习编译框架#xff0c;适用于 CPU、GPU 和各种机器学习加速芯片。更多 TVM 中文文档可访问 →Apache TVM 概述​ 远程过程调用#xff08;RPC#xff09;是 Apache …TVM 现已更新到 0.21.0 版本TVM 中文文档已经和新版本对齐。Apache TVM 是一个深度的深度学习编译框架适用于 CPU、GPU 和各种机器学习加速芯片。更多 TVM 中文文档可访问 →Apache TVM概述​远程过程调用RPC是 Apache TVM 中非常重要和有用的功能它允许我们在真实硬件上运行已编译好的神经网络NN模型无需手动操作远程设备输出结果会通过网络自动返回。通过省去一些人工操作比如将输入数据转储到文件、将导出的神经网络模型拷贝到远程设备、设置设备用户环境、将输出结果拷贝回主机开发环境RPC 极大地提升了开发效率。此外由于只有已编译神经网络模型的执行部分运行在远程设备上所有其他部分都运行在主机开发环境中因此可以使用任何 Python 包来完成预处理和后处理工作。RPC 在以下两种情况下特别有用硬件资源有限时RPC 的队列和资源管理机制能够让硬件设备为众多开发者和测试任务提供服务确保编译后的神经网络模型正常运行。端到端评估的早期阶段除了已编译的神经网络模型其他所有处理都在主机开发环境中运行因此可以轻松实现复杂的预处理和后处理逻辑。推荐的架构​Apache TVM 的 RPC 系统包含三个工具RPC Tracker、RPC Proxy 和 RPC Server。RPC Server 是必要组件一个基本的 RPC 系统即使没有 RPC Proxy 和 RPC Tracker 也可以正常运行。RPC Proxy 在无法直接访问 RPC Server 时使用。强烈推荐在系统中添加 RPC Tracker它提供了许多有用的功能例如队列能力、多 RPC Server 管理、通过 key 而非 IP 地址管理 RPC Server。如图所示由于机器 A 与机器 C、D 之间没有物理连接通道因此我们在机器 B 上设置了一个 RPC Proxy。RPC Tracker 会为每个 RPC key 管理一个请求队列。任何用户都可以随时通过一个 RPC key 请求一个 RPC Server如果有空闲的匹配 key 的 RPC Server则分配给用户否则请求将排入队列稍后再检查是否可用。设置 RPC 追踪器和 RPC 代理​一般来说RPC 追踪器和 RPC 代理只需在主机例如开发服务器或 PC上运行它们不依赖于设备端环境。只需根据 TVM 文档完成 TVM 安装后在相应主机上执行以下命令即可RPC 追踪器$ python3 -m tvm.exec.rpc_tracker --host RPC_TRACKER_IP --port 9190 --port-end 9191RPC 代理$ python3 -m tvm.exec.rpc_proxy --host RPC_PROXY_IP --port 9090 --port-end 9091 --tracker RPC_TRACKER_IP:RPC_TRACKER_PORT请根据实际环境替换命令中的 RPC_TRACKER_IP、RPC_TRACKER_PORT、RPC_PROXY_IP 及端口号。port-end参数可避免服务绑定到意外的端口号这可能导致其他服务无法正确连接特别是在自动化测试系统中这一点尤为重要。设置 RPC 服务器​TVM 社区提供了多个 RPC 服务器实现例如apps/android_rpc、apps/cpp_rpc、apps/ios_rpc。以下内容只聚焦于 Python 版本的 RPC Serverpython/tvm/exec/rpc_server.py。其他版本请参考对应目录下的文档。RPC Server 需运行在设备端通常依赖于 xPU 驱动、增强版支持 xPU 的 TVM 运行时及其他库因此请先安装相关依赖组件例如 KMD 驱动并确保所需动态库路径已加入LD_LIBRARY_PATH环境变量。如果可以在设备上直接设置编译环境无需交叉编译请参考 /docs/getting-started/installing-tvm/install-from-source 完成编译并直接跳转至 步骤 3启动 RPC Server。1. 交叉编译 TVM 运行时​我们使用 CMake 来管理编译过程对于交叉编译CMake 需要一个工具链文件来获取所需的信息因此您需要根据设备平台准备该文件。下面是一个示例适用于 CPU 为 64 位 ARM 架构且操作系统为 Linux 的设备机器。set(CMAKE_SYSTEM_NAME Linux) set(root_dir /XXX/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu) set(CMAKE_C_COMPILER ${root_dir}/bin/aarch64-linux-gnu-gcc) set(CMAKE_CXX_COMPILER ${root_dir}/bin/aarch64-linux-gnu-g) set(CMAKE_SYSROOT ${root_dir}/aarch64-linux-gnu/libc) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)在 TVM 源码根目录下执行以下命令可完成交叉编译根据需要在config.cmake中启用额外选项$ mkdir cross_build $ cd cross_build $ cp ../cmake/config.cmake ./ # 可能需要启用如 USE_OPENCL、USE_xPU 的选项。 $ sed -i s|USE_LLVM.*)|USE_LLVM OFF)| config.cmake $ sed -i s|USE_LIBBACKTRACE.*)|USE_LIBBACKTRACE OFF)| config.cmake $ cmake -DCMAKE_TOOLCHAIN_FILE/YYY/aarch64-linux-gnu.cmake -DCMAKE_BUILD_TYPERelease .. $ cmake --build . -j -- runtime $ cd ..2.打包并部署到设备端​使用如下命令打包 Python 版本 RPC Server$ git clean -dxf python $ cp cross_build/libtvm_runtime.so python/tvm/ $ tar -czf tvm_runtime.tar.gz python然后将压缩包tvm_runtime.tar.gz复制到你的具体设备上并在该设备上通过如下所示的命令正确设置环境变量PYTHONPATH。$ tar -xzf tvm_runtime.tar.gz $ export PYTHONPATHpwd/python:${PYTHONPATH}3. 启动 RPC Server​根据环境修改以下命令中的 RPC_TRACKER_IP、RPC_TRACKER_PORT、RPC_PROXY_IP、RPC_PROXY_PORT 和 RPC_KEY并在设备端执行启动# 如果使用了 RPC Proxy $ python3 -m tvm.exec.rpc_server --host RPC_PROXY_IP --port RPC_PROXY_PORT --through-proxy --key RPC_KEY # 如果未使用 RPC Proxy $ python3 -m tvm.exec.rpc_server --tracker RPC_TRACKER_IP:RPC_TRACKER_PORT --key RPC_KEY验证 RPC 系统​$ python3 -m tvm.exec.query_rpc_tracker --host RPC_TRACKER_IP --port RPC_TRACKER_PORT通过上述命令我们可以查询所有可用的 RPC 服务器以及队列状态。如果你有 3 个通过 RPC 代理连接到 RPC 跟踪器的 RPC 服务器那么输出结果应如下所示。Tracker address RPC_TRACKER_IP:RPC_TRACKER_PORT Server List ---------------------------- server-address key ---------------------------- RPC_PROXY_IP:RPC_PROXY_PORT server:proxy[RPC_KEY0,RPC_KEY1,RPC_KEY2] ---------------------------- Queue Status --------------------------------------- key total free pending --------------------------------------- RPC_KEY0 0 0 3 ---------------------------------------故障排查​1. 由于设备上缺少numpy导致无法启动 RPC Server​在一些依赖于 RPC 服务器的 Python 文件中导入了numpy包而消除这种导入关系是比较困难的。对于某些设备来说交叉编译numpy也非常困难。TVM Runtime 实际并不依赖numpy因此一个简单的解决方法是创建一个「空」的numpy。只需将以下内容保存为numpy.py文件放入如/usr/local/lib/python3.9/site-packages等路径中即可class bool_: pass class int8: pass class int16: pass class int32: pass class int64: pass class uint8: pass class uint16: pass class uint32: pass class uint64: pass class float16: pass class float32: pass class float64: pass class float_: pass class dtype: def __init__(self, *args, **kwargs): pass class ndarray: pass def sqrt(*args, **kwargs): pass def log(*args, **kwargs): pass def tanh(*args, **kwargs): pass def power(*args, **kwargs): pass def exp(*args, **kwargs): pass2. 由于设备端缺少cloudpickle导致 RPC 服务器无法启动。​由于cloudpickle是一个纯 Python 包因此只需将其从其他机器复制到设备机器上的目录例如/usr/local/lib/python3.9/site-packages即可解决该问题。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询