同一机器上两次执行torch.compile(Hidet后端),是否存在优化操作缓存?
问题描述
用户使用以下代码基于torch.compile结合Hidet后端编译PyTorch模型:
self.model = torch.load(saved_model_path, map_location=self.device).to(self.device) self.model.eval() self.model.half() # Configure hidet to use tensor core and enable tuning hidet.torch.dynamo_config.use_tensor_core(True) hidet.torch.dynamo_config.search_space(2) self.model = torch.compile(self.model, backend="hidet")
首次在远程机器运行时,出现大量“优化因算子不支持被跳过”的日志(如针对torch.nn.AvgPool3d),但仍完成多数优化并正常执行推理;再次在同一机器运行时,仅显示不支持操作的警告,询问是否存在缓存机制让同一模型无需重复执行优化流程。
回答
- 是的,这是缓存机制在起作用,具体涉及两层缓存:
- PyTorch Dynamo缓存:
torch.compile底层的Dynamo模块会缓存模型的结构拆解、子图划分结果,避免重复分析模型拓扑。 - Hidet后端缓存:Hidet会将编译后的优化算子、计算图持久化到本地缓存目录(默认路径为
~/.cache/torch/hidet/),首次运行完成的有效优化结果会被保存。
- PyTorch Dynamo缓存:
- 首次运行时,Dynamo遍历模型算子,Hidet尝试对每个子图做优化,遇到不支持的算子(如
AvgPool3d)会记录并跳过,同时将可优化部分编译后存入缓存;第二次运行时,直接读取缓存中的编译结果,不再执行全量优化流程,仅加载之前记录的不支持算子警告,因此日志量大幅减少。 - 若需强制重新执行全量优化,可通过以下方式:
- 删除Hidet缓存目录:
rm -rf ~/.cache/torch/hidet/ - 重置PyTorch Dynamo缓存:调用
torch._dynamo.reset() - 运行前设置环境变量:
export HIDET_DISABLE_CACHE=1
- 删除Hidet缓存目录:
内容的提问来源于stack exchange,提问作者Carlo
相关产品推荐
相关产品推荐

