当前位置: 首页 > news >正文

【TVM教程】设备/目标交互

TVM 现已更新到 0.21.0 版本,TVM 中文文档已经和新版本对齐。

Apache TVM 是一个深度的深度学习编译框架,适用于 CPU、GPU 和各种机器学习加速芯片。

在线运行 TVM 学习教程

链接是:https://hyper.ai/notebooks/48919?utm_source=Distribute&utm_medium=Distribute-TVM&utm_campaign=Distribute-TVM-260126

本文档面向希望了解 TVM 框架如何与特定设备 API 进行交互的开发者,或希望为新的 API 或新硬件添加支持的开发者。

对于任何新的运行时环境,需要实现三个主要部分:

  • DeviceAPI <tvm-target-specific-device-api>{.interpreted-text role=“ref”} 类提供对特定设备的句柄,以及用于与其交互的 API。它定义了一套通用接口,用于查询设备参数(例如:可用内存、线程数量等),以及执行简单操作(例如:从主机复制内存,或在设备缓冲区之间复制数据)。
  • Target <tvm-target-specific-target>{.interpreted-text role=“ref”} 类包含将要运行函数的设备描述。它同时暴露给目标代码生成器和优化 Pass。
  • 目标代码生成器 <tvm-target-specific-codegen>{.interpreted-text role=“ref”} 从 IRModule 构建一个由一个或多个PackedFunc <tvm-runtime-system-packed-func>{.interpreted-text role=“ref”} 组成的Module <tvm-runtime-system-module>{.interpreted-text role=“ref”}。

DeviceAPI

DeviceAPI(设备 API)表示对特定硬件设备 API 的访问句柄。(例如,CUDADeviceAPI处理所有通过 CUDA 框架的交互。)大多数DeviceAPI方法都接受一个device_id参数,用于指定访问哪个设备。

在 Python 中,通常使用tvm.runtime.device{.interpreted-text role=“py:func”} 函数访问特定设备,该函数返回指定 API 所访问设备的句柄。(例如,tvm.runtime.device('cuda', 0)表示访问通过 CUDA API 访问的物理设备0。)

为了使 TVM 能够使用新的 DeviceAPI,需要执行以下注册步骤:

  1. 创建一个实例化 DeviceAPI 并返回其指针的函数:
FooDeviceAPI* FooDeviceAPI::Global() { static FooDeviceAPI inst; return &inst; }
  1. 在 TVM 注册表中注册:
TVM_FFI_STATIC_INIT_BLOCK() { namespace refl = tvm::ffi::reflection; refl::GlobalDef().def("device_api.foo", FooDeviceAPI::Global); }
  1. 在 base.h 的TVMDeviceExtType枚举中为新的 DeviceAPI 添加条目。值需大于DLDeviceType::kDLExtDev,且小于DeviceAPIManager::kMaxDeviceAPI
  2. 在 device_api.h 的DeviceName中添加对应枚举 → 字符串映射,该字符串需与GlobalDef().def中一致。
  3. tvm.runtime.Device_DEVICE_TYPE_TO_NAME_DEVICE_NAME_TO_TYPE字典中添加对应映射。

Target 定义

Target对象是有关物理设备、其硬件/驱动限制和能力的属性查询表。Target可在优化阶段和代码生成阶段使用。虽然所有运行时共享相同的Target类,但不同运行时可能需要额外的 target 特定属性。

在 target_kind.cc 中使用TVM_REGISTER_TARGET_KIND注册新的 target,需传入 target 名称,以及对应运行设备的TVMDeviceExtTypeDLDeviceType。通常情况下,target 名称和设备名称一致(如"cuda"运行于kDLCUDA),但也有例外(例如"llvm""c"目标都运行于kDLCPU)。

所有 target 选项通过add_attr_option添加,可带默认值。可以使用set_target_parser添加解析器,用于处理依赖其他参数或硬件属性的动态参数。

该参数解析器定义了如何从字符串格式构造 target。这由Target::Target(const String&)构造函数执行,该构造函数接受 JSON 格式字符串,通常通过 Python:

tvm.target.Target('{"kind": "cuda", "max_num_threads": 1024}')

在代码生成器中,可通过以下方式访问 target 属性:

Target 代码生成器

代码生成器将优化后的IRModule转换为可执行表示。每个代码生成器必须注册到 TVM 框架中,其名称为:

"target.build.foo"

其中foo与先前TVM_REGISTER_TARGET_KIND中的名称一致。

示例:

tvm::runtime::Module GeneratorFooCode(IRModule mod, Target target); TVM_FFI_STATIC_INIT_BLOCK() { namespace refl = tvm::ffi::reflection; refl::GlobalDef().def("target.build.foo", GeneratorFooCode); }

代码生成器有两个参数。第一个是要编译的IRModule,第二个是描述代码应该运行在哪个设备上的目标Target。由于编译环境不一定与执行环境相同,因此代码生成器不应直接向设备查询属性,而应始终使用Target中的属性。

输入IRModule中的每个函数都应在输出的runtime::Module中可通过名称访问。

http://www.jsqmd.com/news/333271/

相关文章:

  • 2026最新停车设备/立体停车场/立体车库/停车场设备/停车库设备推荐:深耕云南,智能泊车解决方案首选 - 品牌推荐2026
  • 2026年矿山煤矿电力电缆生产厂家推荐:中低压、低压、中压、变频、聚乙烯、聚氯乙烯绝缘电缆全涵盖 - 品牌2025
  • 2026年2月汉堡王最新省钱攻略,美团下单超值美味分享 - Top品牌推荐
  • PCIe接口丨高速模拟采集丨高性能-高精度丨青翼军工级全国产化丨多通道信号处理板
  • 【Triton 教程】triton_language.abs
  • 2026年麦当劳最新省钱攻略,美团9.9元美味全解析 - Top品牌推荐
  • 空指针之痛:除了 if!=null,你还有更优雅的办法吗?
  • 名义雇主(EOR)助力德国企业加速全球合规用工,破解海外扩张难题 - 中青资讯
  • 全域赋能,品效双赢:三十六行网络科技池州分公司,定义本地生活数字运营新高度 - 野榜数据排行
  • 再互动拆解脉动的“开盖有奖”活动为何刷屏? - 品牌智鉴榜
  • <span class=“js_title_inner“>全栈“进化”公开课邀您参加|文心Moment大会走进大模型高效微调与极致推理全栈工程实践</span>
  • 2026年轨道交通电力电缆生产厂家推荐:中低压、低压、中压、变频、聚乙烯绝缘、聚氯乙烯绝缘电缆厂家汇总 - 品牌2025
  • 2026年消防电缆生产厂家推荐:耐火、防火、阻燃、阻燃B1级电缆生产厂家汇总 - 品牌2025
  • 学生数据统计不再头疼,学工一体化平台助力辅导员高效减负
  • 本土营销策划哪家强?2026年安徽营销策划公司推荐与排名,破解地域适配与成本痛点 - 品牌推荐
  • 2026最新机械式/智能停车设备推荐!国内优质停车设备权威榜单发布,资质服务双优破解停车难题云南/昆明停车设备推荐 - 品牌推荐2026
  • 2026年湖南营销策划公司排名:基于技术整合与ROI评测,解决策略脱节与执行痛点 - 品牌推荐
  • 深入解析现代AI编译器技术栈:从MLIR多级中间表示到TVM张量优化实现跨硬件平台的高性能深度学习模型部署实战
  • gcd和lcm
  • 易语言开发从入门到精通:补充篇·文件批量操作深度实战·常用格式处理·自动化脚本开发·性能优化
  • 2026年江西营销策划公司权威测评报告:基于百家客户匿名反馈的口碑深度解析 - 品牌推荐
  • 【JPCS出版 | EI检索】第六届能源工程、新能源材料与器件国际学术会议(NEMD 2026)
  • 【Linux命令大全】008.磁盘维护之mkswap命令(实操篇)
  • 2026年安徽营销策划公司甄选指南:AI驱动与全域增长落地全景解析 - 品牌推荐
  • [MCP-UI] Dynamic Sizing
  • 2026年安徽营销策划公司推荐与评价:全域智能时代下的区域增长伙伴选择指南 - 品牌推荐
  • 【Linux命令大全】008.磁盘维护之mpartition命令(实操篇)
  • 城市智能体:宜昌点军区算力供应链平台的区域产业升级路径
  • 胸贴怎么选?不同场景下的胸贴选择标准与产品类型解析(通勤 / 暴汗 / 海边 / 婚礼) - 博客万
  • 2026年跨骑/太子/复古/街跑摩托车品牌实力推荐:广州豪进摩托车股份有限公司,多元骑行场景覆盖的机车制造商 - 品牌推荐官