在城市里打车,老司机看一眼路程、堵不堵,就能报出“五分钟到”。没有人会为了估个时间,真开车跑一趟。AI 编译器里也有这样一位老司机——TVM 的代价模型(cost model)。它不用真的把代码编译出来跑一遍,而是根据算子的形状、硬件的型号、编译的策略这些“路况信息”,几毫秒内预估出这段代码在芯片上大概要跑多久。AutoTVM 和 Ansor 这两个自动调优工具,正是靠这位老司机快速打分,才能在几万种编译方案里迅速挑出最快的那一个。这篇文章带你认识 TVM 代价模型这位“估价师”:它怎么估算、怎么训练、怎么给调优引路,以及公司怎么考核它估得准不准。读完你会明白,自动调优不是蛮力搜索,而是一套“经验加速”的智慧。

岗位关联

对 AI 从业者来说,理解代价模型等于掌握了编译器自动调优的“决策中枢”,无论是部署推理服务还是定位性能瓶颈,都能快速找到优化方向。

目录
  1. 可视化演示
  2. 1. 代价模型概述
  3. 2. 为何需要它
  4. 3. 特征工程
  5. 4. 模型训练
  6. 5. 自动调优集成(AutoTVM)
  7. 6. 进化搜索(Ansor)
  8. 7. 精度评估方法
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示系统处理流水线、实时性能指标曲线及多方案对比分析,包含数据流转、吞吐延迟监控与方案评估。

本节配有交互动效(进入视口后自动加载,约 3KB)。

系统可视化 处理流程:输入→处理→模型→输出 性能监控:实时指标 P=L×T

1. 代价模型概述

出租车公司的调度中心里,有位老师傅叫老王。他从不开车,但调度员报来一个目的地,他扫一眼里程、时段、街景,就能报出“大概七分钟”。这份“看一眼就知道”的本事,就是公司最值钱的资产。TVM 的代价模型,干的正是老王的活:它是个回归模型,输入一段算子的“身份信息”和编译配置,输出一个浮点数——预测这段代码在目标硬件上的执行时间。

当然,老王不是神仙,他的判断基于几十年的出车经验。代价模型也一样,它背后的 f 通常是一棵梯度提升树(如 XGBoost)或一个小型神经网络,模型内部存着一堆参数 θ。这些参数不是人写的,而是从大量“真实跑过”的数据里学出来的。学到手之后,它就能在几毫秒内给任何新配置打一个靠谱的时间分。

用数学语言说,代价模型做的事情就是学习一个映射:

老王的经验是十年跑车跑出来的,代价模型的 θ 也是从海量实测数据里“喂”出来的。没有实测数据打底,估价师就是无源之水。

t^=f(x;θ)\hat{t} = f(\mathbf{x}; \theta)
这个公式的意思是:模型看到特征 x,结合参数 θ,吐出一个预测时间 $\hat{t}$。$\hat{t}$ 带个“帽子”,提醒我们它只是估计,不是实测。
  1. 预测时间$\hat{t}$ 表示代价模型对执行时间的预测值,带“帽子”的 t 强调这是估算而非实测。
  2. 特征向量$\mathbf{x}$ 是特征向量,包含算子形状、硬件参数、编译配置等描述信息。
  3. 模型参数$\theta$ 是模型内部参数,训练过程就是不断修正它,相当于老王的“经验储备”。
  4. 映射函数$f(\cdot)$ 是特征到时间的复杂映射,可能是树模型或神经网络。

2. 为何需要它

我们再看看没有老王的调度中心会怎样。新来的调度员小李负责挑选最优行车路线:候选路线有几百上千条,每评估一条,他就真派一辆车跑一趟,跑完记下时间再试下一条。一趟 60 分钟,十条就是十个小时。等他把所有方案试完,乘客早走了。AutoTVM 早期面对的就是这种窘境:每个编译配置都要在真硬件上编译、运行、计时,一次测量动辄几秒甚至几分钟。

更要命的是,编译配置的搜索空间是指数级膨胀的。一个算子的调度方案由分块大小、向量化宽度、循环展开、并行线程数等几十个可选项组成,每个选项有若干取值,乘在一起就是天文数字:

这个公式解释了为什么必须请老王出山。实测跑一趟几秒钟,十万个配置就是好几天;而代价模型估价一次只要几毫秒。有了它,调度员才能在一顿饭的工夫里筛完所有方案。老王的另一重价值在于泛化:哪怕是一条从没跑过的新路(新算子),他也能根据相似路况估个八九不离十。

∣C∣=∏i=1mki|\mathcal{C}| = \prod_{i=1}^{m} k_i
这个公式描述“组合爆炸”:m 个配置项,每项有 $k_i$ 种选择,总配置数就是所有可能数的乘积。8×8×4×16,几个选项一乘,轻松破百万。
  1. 配置总数$|\mathcal{C}|$ 表示所有可能的编译配置方案数量。
  2. 连乘符号$\prod$ 要求把每个配置项的可能取值数依次相乘。
  3. 选项数目$k_i$ 是第 i 个配置项的取值个数,比如分块大小有 8 档。
  4. 指数爆炸$m$ 个配置项相乘后数量巨大,逐项实测完全不现实。

3. 特征工程

老王估时从来不是凭空猜。他看三样东西:一是里程表上的距离,二是后视镜里的路况,三是手机上的天气和限行信息。这三类信息凑齐,他心里就有数了。代价模型也一样,它需要把“看得见的信号”编码成一个特征向量,这就是特征工程。

TVM 中,代价模型的特征大致分三组。第一组是硬件特征:芯片的缓存大小、SIMD 向量宽度、核心数量、内存带宽。这决定了机器“底子”有多好——相当于老王知道客户的车型是超跑还是小面包。第二组是算子特征:张量形状、数据类型、计算量(FLOPs)、访存模式。这描述了活本身有多重——相当于搬家要搬一个行李箱还是三车家具。第三组是配置特征:分块策略、向量化方式、循环展开因子、并行度。这是编译器给代码做的“编排”,相当于老王选的路线是走高速还是穿小巷。

三类特征首尾相接,拼成一个长向量喂给模型:

特征选得好不好,直接决定估价师的上限。老王如果只看里程不看路况,估出的时间必然离谱;代价模型如果只喂算子特征、漏掉硬件特征,换个芯片就彻底失灵。所以特征工程是代价模型的“视力”,看得全,才估得准。

x=[xhw;  xop;  xcfg]\mathbf{x} = [\mathbf{x}_{\text{hw}}; \; \mathbf{x}_{\text{op}}; \; \mathbf{x}_{\text{cfg}}]
方括号表示把三组特征拼接起来。硬件特征打头、算子特征居中、配置特征收尾,合成一个完整的“路况档案”交给估价师。
  1. 硬件特征$\mathbf{x}_{\text{hw}}$ 描述芯片的算力底子,如缓存大小、向量宽度、核心数。
  2. 算子特征$\mathbf{x}_{\text{op}}$ 描述计算任务本身,如张量形状、数据类型、计算量。
  3. 配置特征$\mathbf{x}_{\text{cfg}}$ 描述编译器的调度选择,如分块、向量化、展开、并行。
  4. 向量拼接$[\cdot ; \cdot ; \cdot]$ 表示把三组特征按顺序拼接成一个长向量,作为模型输入。

4. 模型训练

老王的经验不是天生的。他年轻时也估错过,每次估错就记下实际跑了多久,下次修正判断。日积月累,几千次“预测—实测—纠正”的循环之后,他成了老师傅。代价模型的训练就是这个过程的自动化版本。

训练的第一步是数据采集:在目标硬件上编译并执行大量不同配置的算子,记录下每组特征对应的真实耗时。这些“(特征,实测时间)”样本对,就是学徒的“出车笔记”。第二步是定义损失函数:模型预测的时间和真实时间差多少,要有一个统一的扣分标准。TVM 最常用的扣分标准是均方误差(MSE),它把大误差的惩罚放得特别重:

有了扣分标准,模型就能通过梯度下降或直接拟合(树模型)不断更新参数 θ,让损失越来越小。AutoTVM 还会动态决定采多少样本:训练初期多采集、后期逐步减少,避免浪费实测资源。每跑一趟真实硬件,就是给学徒上一课;损失函数,就是这节课的评分表。

L(θ)=1N∑i=1N(f(xi;θ)−ti)2L(\theta) = \frac{1}{N} \sum_{i=1}^{N} \left( f(\mathbf{x}_i; \theta) - t_i \right)^2
这个公式是训练的总扣分:把所有样本的“预测减实测再平方”加起来取平均。分越低,说明估价师整体越准。
  1. 样本数量$N$ 是训练样本总数,即收集了多少组“配置→实测时间”的数据对。
  2. 误差计算$f(\mathbf{x}_i;\theta) - t_i$ 表示第 i 个样本上预测时间与实测时间的差值。
  3. 平方放大$(\cdot)^2$ 把正负误差统一为正数,并让大误差的扣分呈平方级放大。
  4. 平均损失$\frac{1}{N}\sum$ 对所有样本的平方误差取平均,得到模型当前的“总扣分”。

5. 自动调优集成(AutoTVM)

调度中心里,老王坐镇,小李出方案。小李每提一条新路线,老王快速估个时间;估出来太慢,直接毙掉;估出来有戏,才派车实跑验证。AutoTVM 的自动调优循环,就是这个模式的工程实现。

AutoTVM 使用模拟退火算法在配置空间中搜索。模拟退火本来需要每个候选配置的真实耗时来决定是否接受,但真实测量太慢,于是 TVM 用代价模型的预测值顶上去。每一轮迭代,算法在当前配置附近随机扰动出一个新配置,代价模型给新旧配置各打一个分,然后按概率决定是否跳过去:

搜索结束后,AutoTVM 会把代价模型选出的最优配置再拿去真实测量确认,把新样本补充进训练集,让模型越用越准。这一整套“预测打分—稀疏实测—增量学习”的循环,就是自动调优的核心机制。老王的估值让调度效率提升了几个数量级。

P=exp⁡(ccur−cnewT)P = \exp\left(\frac{c_{\text{cur}} - c_{\text{new}}}{T}\right)
这个公式是模拟退火的“接受概率”:新方案成本比当前低时概率大于 1(爽快接受);稍差时也有一定概率接受,避免困在局部最优。
  1. 当前成本$c_{\text{cur}}$ 是当前配置的预测耗时,来自代价模型打分。
  2. 新方案成本$c_{\text{new}}$ 是扰动后的候选配置的预测耗时。
  3. 退火温度$T$ 是控制随机性的“温度”,训练初期高、后期低,类似冶炼降温。
  4. 指数变换$\exp(\cdot)$ 把成本差转成 0~1 之间的接受概率,差得越多越难被接受。

6. 进化搜索(Ansor)

如果说 AutoTVM 是在一条固定路线的参数里微调,那么 Ansor 考虑的问题更大:整条路线怎么设计?它不再只调整分块大小,而是直接从程序结构层面搜索调度方案。这时候,代价模型的角色从“路线估价师”变成了“自然选择裁判”。

Ansor 维护一个候选程序的种群,每个个体是一份完整的算子调度代码。每一代进化中,算法通过变异和交叉产生新个体,代价模型给每个个体打分,得分高的留下,得分低的淘汰,如此迭代几十上百轮。打分依据是适应度——谁跑得快谁就活下来:

有了裁判,进化才能快速迭代。如果每次打分都要真实跑一遍硬件,一代进化就得等上几分钟;代价模型把打分压到毫秒级,Ansor 才能放心地跑几百代。最终胜出的个体,再经过真实测量确认,就是交付给用户的优化代码。老王的裁判哨声,让整座赛场的淘汰赛快了百倍。

fitness=1t^+ϵ\text{fitness} = \frac{1}{\hat{t} + \epsilon}
这个公式把预测时间倒过来变成适应度:预测耗时越短,适应度越高,越容易被选中繁殖下一代。ε 是个极小的正数,防止除零。
  1. 预测时间$\hat{t}$ 是代价模型给候选个体的“耗时分”,本质是执行时间预测。
  2. 平滑项$\epsilon$ 取极小的正数,避免预测时间为零时出现除零错误。
  3. 倒数变换$\frac{1}{\cdot}$ 将“越小越好”的成本转为“越大越好”的适应度。
  4. 选择压力适应度高的个体有更大概率进入下一代,驱动种群向低耗时方向进化。

7. 精度评估方法

公司每隔一个季度就会考核老王:随机挑 20 条路线,让他先估价,再派车实测,看他的误差有多大。考核指标选得科学,才能知道老王该不该加薪。代价模型训练完成后,同样需要一套精度评估体系来回答“这个估价师到底靠不靠谱”。

最直观的指标是相对误差(RE)。它不关心绝对偏差多少毫秒,而是看偏差占真实时间的百分比——估一条 10 毫秒的算子差了 5 毫秒,就是 50% 的误差,相当离谱:

除了误差大小,自动调优更关心排序是否正确——老王估的“最快三条路线”里,是否真的包含最快的方案?这就要用到 Spearman 秩相关系数,它比较预测排名和真实排名的一致性。此外,交叉验证把数据分成多份轮流训练和验证,能防止估价师把训练数据背得滚瓜烂熟、换了新路线就露馅。考核指标选错,可能把慢路线估成快路线,带偏整个调优方向;指标选对,估价师才能持续为调度中心创造价值。

RE=1N∑i=1N∣t^i−ti∣ti\mathrm{RE} = \frac{1}{N}\sum_{i=1}^{N}\frac{|\hat{t}_i - t_i|}{t_i}
这个公式计算平均相对误差:每个样本先算“预测减实测的绝对值”再除以实测时间,最后取平均。数值越小,说明估价师估得越贴近真实。
  1. 绝对偏差$|\hat{t}_i - t_i|$ 是第 i 个样本上预测与实测的差的绝对值,衡量偏离程度。
  2. 相对归一$\div t_i$ 把绝对误差除以实测时间,得到“偏差了百分之多少”。
  3. 逐样本累加$\sum_{i=1}^{N}$ 把所有样本的相对误差加总。
  4. 取平均$\frac{1}{N}$ 得到测试集上的平均相对误差,作为整体精度指标。

AI 应用场景

场景一:云端推理服务自动部署

阶段:推理部署与性能优化

解决的问题:在云 GPU 集群上部署大规模推理服务时,算子模板的编译参数(分块大小、向量宽度等)有海量组合。传统做法靠工程师手工调参或逐一实测,一次调优要数小时到数天。TVM 代价模型让 AutoTVM 能在几分钟内自动搜索出接近最优的配置。

具体案例:某 AI 公司上线 GPT 系列推理服务,对矩阵乘算子使用 AutoTVM 自动调优。代价模型先采集约 500 组实测样本完成训练,随后在搜索空间中打分筛选,最终选出的配置相比默认配置吞吐量提升了 2.3 倍,全程仅需约 20 分钟。

场景二:边缘设备快速适配

阶段:模型跨平台移植

解决的问题:手机、车载芯片、摄像头模组的硬件千差万别,每次移植都要重新调优。代价模型训练一次后,对相似硬件平台可以迁移复用(fine-tune),大幅减少真机实测时间。

具体案例:某 IoT 团队要将人脸检测模型从高通芯片移植到一款国产边缘芯片上。借助 Ansor 的进化搜索和代价模型打分,原本需要一周的真机调优压缩到一天完成,最终模型在边缘设备上的端到端时延降低了 38%。

场景三:芯片设计阶段的性能预估

阶段:软硬协同设计

解决的问题:芯片流片前没有真实硬件可用,无法实测算子耗时。代价模型可以用历史芯片数据训练,预测新架构上各类算子的性能,帮助芯片团队在流片前评估架构设计。

具体案例:某芯片公司在设计新一代 NPU 时,用 TVM 代价模型对候选架构配置进行性能预测,提前发现某缓存方案会导致矩阵乘算子效率下降 40%,由此在流片前修正了设计,节省了巨额改版成本。

Python 演示

python34 行
import numpy as npfrom sklearn.ensemble import RandomForestRegressorfrom sklearn.model_selection import train_test_splitfrom sklearn.metrics import mean_absolute_error  def synthesize_data(n=240, seed=7):    """Generate fake measurement data for a configurable GEMM kernel."""    rng = np.random.default_rng(seed)    tile = rng.integers(16, 257, size=n)     # loop tiling size    vector = rng.integers(1, 17, size=n)     # vector width    unroll = rng.integers(0, 2, size=n)      # whether to unroll    X = np.column_stack([tile, vector, unroll])    # real execution time: larger tile and vector reduce time    t = 5000.0 / (tile * vector) + 20.0 * unroll + rng.normal(0, 2.0, size=n)    return X, t  def main():    X, t = synthesize_data()    X_tr, X_te, t_tr, t_te = train_test_split(X, t, test_size=0.2, random_state=0)     model = RandomForestRegressor(n_estimators=120, random_state=0)    model.fit(X_tr, t_tr)     pred = model.predict(X_te)    mae = mean_absolute_error(t_te, pred)    print("test MAE: %.3f ms" % mae)    for i in range(5):        print("sample %d: pred=%.2f ms, real=%.2f ms" % (i, pred[i], t_te[i]))  if __name__ == "__main__":    main()
目的:用随机森林回归模拟 TVM 代价模型,根据三个编译配置特征预测算子执行时间,并评估预测精度。
  1. X = np.column_stack([tile, vector, unroll])把三个配置特征拼成特征矩阵,相当于构造代价模型的特征向量。
  2. t = 5000.0 / (tile * vector) + 20.0 * unroll + ...模拟真实测量时间:分块越大、向量化越宽,耗时越短。
  3. model = RandomForestRegressor(n_estimators=120, random_state=0)用随机森林回归器充当估价师,120 棵树集体投票。
  4. model.fit(X_tr, t_tr)训练过程:让模型从“配置→实测时间”样本对中学习规律。
  5. pred = model.predict(X_te)对未见过的测试配置做预测,这正是调优搜索中打分环节的原型。
  6. mean_absolute_error(t_te, pred)计算平均绝对误差,对应文章中精度评估的朴素版指标。

常见误区

误区我看到的代价模型都是用神经网络实现的,所以只有把网络做得又大又深,预测才准确。TVM 应该也是用大模型的吧?

正解TVM 的 AutoTVM 早期版本默认使用 XGBoost 树模型,Ansor 也用了梯度提升树,效果已经很好。代价模型的预测对象是“一个算子的耗时”,输入特征维度有限,树模型对这个规模的回归任务往往比神经网络更高效、更稳定。真正决定精度的不是模型复杂度,而是特征质量和训练数据覆盖度。

为何常见:深度学习在大众认知中自带“高级”光环,容易让人误以为所有预测任务都要靠神经网络,忽略了传统机器学习在中小规模表格数据上的优势。

误区既然代价模型是调优的核心,那它预测的耗时必须和真实时间几乎一样,误差超过 5% 就没法用了。

正解自动调优真正需要的是“排序能力”——哪个配置快、哪个慢,顺序别搞错就行。预测值偏大或偏小 20% 不可怕,怕的是把慢的估成快的。因此 TVM 在评估模型时还会用 Spearman 秩相关来考察排序一致性。一个“普遍乐观”但排序正确的估价师,比一个“数值精确但偶尔乱序”的估价师更有用。

为何常见:人们习惯用“准不准”衡量一切预测模型,没意识到在搜索场景中相对排序比绝对数值更重要。

误区代价模型可以替代所有实测,训练完就直接用它的预测结果部署,不需要再跑真实硬件了。

正解代价模型本身依赖实测数据训练,它的预测永远有误差。AutoTVM 和 Ansor 在搜索结束后,都会把最终选出的候选配置拿到真实硬件上跑一遍确认耗时,并把新样本加回训练集。真实测量是训练的数据源头,也是最终交付的验收关卡,二者是“师傅教徒弟、徒弟再出师实跑”的关系。

为何常见:把代价模型理解成了“测量仪”而不是“预测器”,忽略了它作为监督学习模型对标签数据的依赖。

误区特征工程嘛,把能想到的特征全塞进去,分块、向量化、缓存、带宽、线程数、寄存器数……越全越好,模型自己会挑。

正解冗余特征会引入噪声和共线性,让树模型分裂变得不稳定,还可能增大过拟合风险。TVM 的特征设计讲究“每类特征有物理意义”:硬件底子、算子形状、调度做法,三类特征各司其职。特征质量比数量重要,好比老王估时看路况、里程和天气就够了,再看车牌号、轮胎品牌纯属添乱。

为何常见:直觉上“信息越多越好”,忽略了特征与标签之间的因果联系,以及高维特征带来的统计噪声。

误区我在 A100 上训练好的代价模型,换到 V100 或者手机芯片上应该也能直接用,反正都是 GPU/AI 芯片。

正解不同硬件的缓存层级、向量宽度、指令集、内存带宽差异巨大,特征分布完全不同。在 A100 上学的经验搬到 V100 上,预测误差会显著放大。TVM 的实践是对每个目标硬件重新采集样本训练,或者在已有模型基础上做少量微调迁移。老王的经验在城区管用,换到山城重庆,也得重新适应一阵子。

为何常见:人们容易把“AI 芯片”想象成同一种东西,忽略了硬件微架构差异对算子耗时的影响。

面试题

Q1. TVM 代价模型的核心任务是什么?

单选题 · easy

  • A.预测算子执行时间的估计值← 正确答案
  • B.生成编译所需的中间表示
  • C.自动推导算子的梯度表达式
  • D.管理 GPU 显存的分配策略

答案:A。代价模型是一个回归模型,输入特征向量、输出预测耗时,本质上就是个“估价师”。B 是编译器前端的工作,C 是自动微分的工作,D 是显存管理的范畴,都与耗时预测无关。

Q2. 为什么 AutoTVM 需要代价模型,而不是全部实际测量?

单选题 · easy

  • A.因为实际测量耗时太长成本太高← 正确答案
  • B.因为实际测量结果不稳定
  • C.因为编译器不想运行任何代码
  • D.因为实际测量会损坏硬件设备

答案:A。编译配置搜索空间是指数级的,每个配置实测要几秒到几分钟,全部试完不现实。代价模型把评估成本从毫秒级测量压到微秒级预测。B、C、D 都不是引入代价模型的核心原因。

Q3. 训练代价模型时,标签(label)数据来自哪里?

单选题 · mid

  • A.对候选代码的静态行数统计
  • B.在目标硬件上实测得到的耗时← 正确答案
  • C.开发者人工标注的经验评分
  • D.深度学习模型的中间层输出

答案:B。代价模型是监督学习,标签必须是真实执行时间,只能在目标硬件上编译运行后测量获得。静态行数统计和中间层输出都不是真实耗时,人工评分则太粗糙且无法规模化。

Q4. 代价模型的特征工程通常包括哪些特征?

多选题 · mid

  • A.包括硬件缓存与向量宽度特征← 正确答案
  • B.包括算子形状与数据类型特征← 正确答案
  • C.包括分块与向量化配置特征← 正确答案
  • D.包括训练样本的哈希散列值

答案:ABC。三类特征分别是硬件底子、任务形状、编译做法,共同构成“路况档案”。哈希散列值只是样本编号,与执行时间没有因果关系,属于典型的噪声特征。

Q5. Ansor 的进化搜索中,代价模型的主要角色是什么?

单选题 · mid

  • A.生成新的算子变异策略
  • B.对候选程序进行打分筛选← 正确答案
  • C.直接编译输出最终代码
  • D.替代完整的编译器后端

答案:B。Ansor 中代价模型是“自然选择裁判”,给每个候选个体打耗时分,适应度高的留下繁殖。变异策略由进化算法负责,最终编译由编译器后端完成,代价模型不参与代码生成。

Q6. 相对误差 RE 中的“相对”指的是相对什么?

单选题 · mid

  • A.相对于所有预测中的最大值
  • B.相对于该样本的真实测量时间← 正确答案
  • C.相对于模型参数的总数量
  • D.相对于调优搜索的迭代次数

答案:B。RE 的公式是 $|\hat{t}-t|/t$,把绝对误差除以该样本的实测时间,得到偏差百分比。这样才能公平对比“1 毫秒算子的 0.1 毫秒误差”和“1 秒算子的 0.1 毫秒误差”,前者严重得多。

Q7. 关于代价模型精度评估的说法,正确的有哪些?

多选题 · hard

  • A.代价模型排序能力比精确预测值更重要← 正确答案
  • B.Spearman 秩相关可度量排序一致性← 正确答案
  • C.交叉验证能评估模型的泛化能力← 正确答案
  • D.训练数据越多预测一定会越准确

答案:ABC。自动调优靠排序选最优,排序对就行;Spearman 正是度量预测排名和真实排名一致性的指标;交叉验证防止过拟合、评估泛化。D 太绝对,数据再多,特征质量差或包含噪声,精度也不会必然提升。

Q8. 模拟退火搜索中,代价模型的预测耗时被用来做什么?

单选题 · hard

  • A.直接决定当前配置是否最终保留
  • B.计算新配置的相对接受概率← 正确答案
  • C.修改目标硬件的核心时钟频率
  • D.生成下一轮搜索的初始特征

答案:B。模拟退火的接受概率 $P=\exp((c_{cur}-c_{new})/T)$ 需要新旧两个配置的成本差,这个成本就是代价模型的预测耗时。它不直接做最终决策,也不碰硬件频率,只在每轮决定“跳不跳”。

Q9. 代价模型在 TVM 自动调优中的核心价值是什么?

单选题 · mid

  • A.用快速预测替代昂贵的实际测量← 正确答案
  • B.完全消除代价模型的全部误差
  • C.自动生成相应的推理服务代码
  • D.减少模型训练阶段的整体开销

答案:A。代价模型把“每轮实测几秒”变成“每轮预测几毫秒”,让搜索可以在巨大空间里跑几千上万轮。它本身有误差、消除不了;代码生成也不是它的职责;训练开销本身也不是它的核心价值。

Q10. 关于 TVM 代价模型训练数据采集,以下说法正确的有哪些?

多选题 · extreme

  • A.训练数据须在目标硬件上实测获得← 正确答案
  • B.算子类型覆盖越全泛化能力越强← 正确答案
  • C.训练数据可直接从静态分析获得
  • D.跨硬件平台的测量数据可以直接混用

答案:AB。代价模型的标签必须是目标硬件实测耗时,静态分析无法获得真实时间;训练数据覆盖的算子类型越多样,模型对新算子的泛化越好。C 错在标签来源,D 错在硬件特征不同,跨平台数据不能直接混用,否则特征分布错乱导致预测失效。