TVM为英特尔核显编译MXNet ResNet_18时触发warp shuffle不支持错误
这个报错是TVM的OpenCL后端自动推导英特尔集显子组大小失败,生成的warp shuffle操作宽度和硬件实际warp size不匹配导致的校验失败,可通过以下方法解决:
解决方案
方案1:显式指定显卡子组大小
修改target定义代码,显式声明子组大小匹配你所用英特尔集显的实际warp size,绝大多数英特尔集成显卡的子组大小为16,部分新架构为32,优先尝试16:
target = tvm.target.intel_graphics(options="-subgroup_size=16") relay.build_module.build(mod, target, params=params)
如果仍然报错,将subgroup_size参数改为32即可。
方案2:禁用warp shuffle优化
如果方案1不生效,可以在编译前临时禁用英特尔OpenCL后端的warp shuffle内在规则,在build代码前添加以下内容:
from tvm import te from tvm.target import Target target = tvm.target.intel_graphics() with Target(target, host=target): te.register_intrin_rule("opencl", "tvm_warp_shuffle", None, override=True) relay.build_module.build(mod, target, params=params)
方案3:升级TVM版本
该问题属于旧版本TVM对英特尔集显子组大小自动推导的已知bug,如果你使用的是0.8及更早版本的TVM,升级到0.12及以上的稳定版即可自动修复该问题,无需额外修改代码。
内容的提问来源于stack exchange,提问作者Remi_TRish
相关产品推荐
相关产品推荐

