MetaKernelBench:度量代码之外的 GPU 核函数知识迁移 MetaKernelBench: Measuring GPU Kernel Knowledge Transfer Beyond Code
用跨 DSL 同题配对实验首次量化 Agent 自蒸馏技能的真实复用价值
前置知识
GPU Kernel DSL(CuTe DSL 与 TIRx)
GPU 核函数是运行在 NVIDIA GPU 上的高性能计算实现。CuTe DSL 是 NVIDIA CUTLASS 提供的 Python 嵌入式 DSL,用布局代数(layout algebra)在-thread 间划分数据与计算;TIRx 是 Apache TVM 的开源编译栈,用存储布局(storage layout)引导编译器调度 tile 原语。两者都让作者显式控制流水线结构、内存放置、同步和硬件角色,但表达范式完全不同。
本文的核心实验设计就是把同一个问题在这两个 DSL 之间配对,知识是否能跨过这条 DSL 边界正是全文要度量对象。不理解两种 DSL 的定位就无法理解为什么知识需要被重新表达而非直接照搬。
Agent 技能蒸馏(Skill Distillation)
GPU 核优化 Agent(如 KernelBlaster、daVinci-kernel)在反复生成-剖析-修订核函数的过程中,会把学到的经验沉淀到持久知识库或蒸馏成自然语言技能文件(如 SKILL.md)。技能记录问题级、硬件级和策略级原理,例如避免中间张量落显存、把数据搬运与计算重叠、划分 eager PyTorch 与 DSL 核的分工,这些内容可以独立于具体 DSL 语法表述。
本文质疑的正是这些技能的复用价值:现有基准只给单次尝试打分,从不检验蒸馏出的技能是否真能帮到后续尝试。读懂技能机制才能理解实验中 skill-conditioned attempt 与 solo attempt 的区别。
配对提升(Paired Lift)
一种单变量对照度量:同一任务变体在完全相同的预算、验证器和反馈机制下运行两次,唯一差别是一次附加了源技能、一次没有。每次比较得到配对比率 $\rho_i$,联合通过时取原始端到端运行时之比 $\rho_i = \mathrm{clip}(t_{base}/t_{treat}, 1/4, 4)$,失败变通过记 4(rescue)、通过变失败记 1/4(break)、双失败记 1。集合上聚合为 $\Delta_{GM} = \exp(\frac{1}{|G|}\sum \ln \rho_i) - 1$ 以及帮助率 $T$、损害率 $H$。
论文所有结论都建立在这个指标上,裁决变化与最大运行时变化等权的 clip 设计、失败也计入分母的处理方式,直接决定了 −19% 到 +29% 这些数字的含义。
融合子图(Fused Subgraph)
从生产模型或推理服务栈中截取的、由多个算子融合而成的计算片段,例如带分页 KV 缓存的在线 softmax 注意力评分、残差加 RMSNorm、MoE 的 token 分发加专家 GEMM。相比单个算子,融合子图迫使实现者在融合方式、中间张量是否落显存、eager 与 kernel 的分工上做真实权衡,优化空间更大、更接近部署场景。
MetaKernelBench 的 74 个问题全部是这类可追溯到生产系统的融合子图,分属注意力、KV 缓存、MLP 与归一化、MoE、量化、线性注意力六个家族,理解这一点才能读懂按家族分解的实验结果。
eager PyTorch 与 DSL 混合实现
由于两种 DSL 都嵌入在 Python 中,合法实现通常混合使用 eager PyTorch 张量操作、普通 Python 和 DSL 编写的核函数,规则只要求每次调用至少执行一个真正贡献于输出张量的 DSL 核(有旁路测试防止假贡献)。端到端计时覆盖完整调用,包括 Python 分发、eager 操作与 DSL 核,因此把哪些计算留给 eager、哪些交给 DSL 本身就是关键优化决策。
eager 层面的建议(如避免中间张量物化)可以跨 DSL 直接复用,而 kernel 策略必须在另一个 DSL 中重新实现,这正是本文区分可迁移知识与不可迁移知识的分界线。
研究动机
GPU 核函数优化 Agent 近两年发展迅速,它们在迭代生成、剖析、修订实现的过程中,会把学到的东西存入持久知识库(如 KernelBlaster 的记忆增强持续优化)或把成功轨迹蒸馏成技能(如 daVinci-kernel、KLineage、KernelSkill)。然而现有评测体系存在一个明显的盲区:KernelBench 及其后继(TritonBench、MultiKernelBench、AgentKernelArena、SOL-ExecBench 等)都只给每一次尝试产出的实现打正确性和速度分,Agent 声称沉淀下来的经验到底有没有复用价值、会不会帮倒忙,完全未被度量。更糟的是,现有系统中技能的回灌往往经过预筛选——daVinci-kernel 只有在重注入满足基于执行的加速阈值时才接纳技能,KLineage 只提取经过验证的代码锚定技能——这意味着失败尝试中的发现被系统性丢弃,而失败教训可能恰恰是有价值的。社区因此无法回答一个对构建持续学习 Agent 至关重要的问题:一个模型自我蒸馏的、未经过滤的经验,传递给同一问题在另一表达形式下的全新尝试时,究竟是助力还是拖累。
本文的目标是本文要构建一个专门度量同题跨 DSL 核函数知识迁移的基准:给定同一计算问题在 CuTe DSL 和 TIRx 两个 DSL 下的配对变体,让同一个模型先独立完成源 DSL 尝试并把发现蒸馏成自然语言技能,然后只把这份技能(而非源代码或轨迹)交给同一模型在目标 DSL 上的全新尝试,最后在与独立尝试完全匹配的预算和验证规则下做配对比较,量化技能迁移在正确性和端到端运行时上的净效果——包括帮助、无影响和损害三种可能。作者明确把这一维度定位为对现有实现质量指标的补充:一个 Agent 不仅应该写出快而对的 kernel,还应该产出值得复用的经验。
与已有工作不同的是,本文的独特切入角度有三个。第一,同题双 DSL 配对设计:计算语义、工作负载、硬件和验证规则完全固定,唯一变化的是表达语言,这精确隔离了知识本身的迁移性——eager PyTorch 层面的建议可以直接照搬,kernel 策略必须重新表达,既排除了同 DSL 重复时 DSL 专用配方原样搬运的干扰,也排除了换问题时先前发现不再相关的混淆。第二,不筛选技能:无论源尝试是否通过验证,技能一律原样转移,让失败尝试的经验也参与评测,从而测出的是真实 Agent 工作流中技能的未经净化的价值。第三,把结果归因到相对水平而非绝对成功:分析发现迁移结果跟随源尝试相对目标独立尝试的梯位,而不是源尝试本身是否通过,这一发现超越了以往只看源成功与否的视角。
核心方法
直觉上,这个基准问的是:当计算问题、硬件、工作负载和评分规则都保持一致,只是换了一种 DSL 来表达 kernel 时,一个 Agent 在源 DSL 中总结的经验教训,写进一份自然语言文档后,能否让它在目标 DSL 上做得更好。技术路线分四步:首先构建 74 个 DSL 中立的融合子图问题,每个问题附带任务描述、PyTorch 参考实现和固定工作负载的输入生成器,并生成 CuTe DSL 与 TIRx 两个仅在 DSL 上不同的任务变体;然后让被测模型在 CPU 沙箱中独立完成每个变体的 solo attempt,过程中被指令持续维护一份 SKILL.md,记录有证据支持的优化发现、eager 与 DSL 的分工、失败原因和适用条件;接着把源 DSL 的技能逐字附加到目标 DSL 变体的任务指令中,启动一个只多这一份输入的 skill-conditioned attempt;最后用配对提升指标在同变体、同预算下比较两次尝试的正确性与端到端速度。整个过程在 NVIDIA B200 上评分,共覆盖六个模型、两个方向、148 个任务变体。
核心创新是单变量对照的技能转移协议。与 KernelBench 类基准只给单次实现打分不同,也与 CASS-Bench 测代码级翻译、KLineage 提取已验证技能、daVinci-kernel 设重注入阈值不同,MetaKernelBench 转移的是未经筛选的自蒸馏技能——包括失败尝试产出的技能——且技能是目标尝试唯一的额外输入,源实现和轨迹全部扣留,因此两次尝试之间的任何性能差异只能归因于那份自然语言经验。协议公式为 $(k_{solo}, \sigma) \leftarrow \mathcal{A}(\tau_{p,d}, \emptyset)$ 与 $(k_{skill}, \cdot) \leftarrow \mathcal{A}(\tau_{p,d_t}, \sigma_{p,d_s})$,其中 $\sigma$ 是技能,点号表示目标自己的技能不被转移。技能指令明确要求结论不依赖源 DSL 的语法和 API、禁止包含代码和命令,模拟真实 Agent 系统中知识的抽象化沉淀。
方法步骤详情
第一步,问题构建:从 SOL-ExecBench(42 题)、FlashInfer-Trace/Bench(20 题)、vLLM 测试与核函数(8 题)、flash-linear-attention(4 题)人工筛选融合子图,保留行为在评分契约下可观察、有实质核优化空间、两个 DSL 都能原生实现的问题,按主要实现约束分入六个家族(Attention 18、KV Cache 8、MLP & Norm 17、MoE 8、Quantization 10、Linear Attention 13),每题固定一个工作负载配置。第二步,solo attempt:Agent 在两核 8GB、无 GPU 无网络的 CPU 沙箱中工作,只有任务规格、评分契约、提交脚本、固定版本 DSL 依赖和离线文档,预算为 40 分钟墙钟和至多 10 次反馈提交;每次提交在 B200 上新鲜评测(5 次正确性抽样须全过、10 次预热、50 次计时),反馈含导入与正确性结果、错误信息,成功时给出端到端时间比。第三步,技能转移:源技能在中性标题(归因于同一问题在另一 DSL 上的先前尝试)下逐字附加到基线指令,格式不强制,源技能缺失或空白时治疗臂跳过并继承基线结果计为中性。第四步,评分:正确性以 float64 锚点设容差 $\|u-z\|_\infty \le 3\max(\|v-z\|_\infty, \epsilon\|z\|_\infty)$,速度取 eager 参考中位时间除以实现中位时间(封顶 100 倍),再按配对比率聚合出 $\Delta_{GM}$、帮助率 $T$ 和损害率 $H$。
技术新颖性
技术新颖性体现在三处。其一,配对提升的度量设计(公式 2-3):联合通过时用原始运行时比率并把所有比率截断到 $[1/4, 4]$,失败救援记 4、通过崩坏记 1/4、双失败记 1,这些转移值放在截断边界上,使一次裁决变化的权重等于最大保留运行时变化;几何平均 $\Delta_{GM}$ 让 74 题等权,避免被少数极端加速主导。其二,分析框架的原创性:用 11 类内容标签(LLM 标注者按人工构建的准则给每份技能打二元标签,如未支持闭包、议程交接、已验证改写)关联迁移结果,用 6 类失败 taxonomy 归因损害,用采纳评级和传播标志追踪技能在目标尝试中的命运,这套「内容-采纳-失败」三层分析在经验复用评测中是首创的。其三,反直觉的方向不对称性分析:帮助过的比较在反方向更常受损,作者用 20000 次随机置换检验证明这不是运气,而是技能价值的方向依赖性。
实验结果
核心实验覆盖 6 模型 × 2 方向 × 74 题共 888 次配对比较。第一,总体迁移效果(Table 1):配对提升范围 −19.1% 到 +29.3%;Gemini 3.7 Flash(+2.3%/+18.1%)、DeepSeek-V4-Pro(+14.3%/+11.7%)、GLM-5.3(+6.7%/+17.9%)、GPT-5.6 Sol(+8.7%/+29.3%)四个模型双向获益,GLM-5.3-Flash 双向皆负(−19.1%/−0.7%),Qwen3.8-Flash 一正一负(+4.7%/−2.6%);但每个模型每个方向都有 16.2% 到 44.6% 的问题受损,帮助(277 次)与损害(223 次)并存,其中仅 76/75 次是裁决翻转,多数差异来自双通过时的运行时变化。第二,家族异质性:12 个单元中 11 个的总提升混合了相反符号的家族,如 GLM-5.3 的 TIRx 技能在 KV Cache 上 +67.9% 而 CuTe 技能 −40.9%,在线性注意力上符号反转;GPT-5.6 Sol 的 CuTe→TIRx 提升 +8.7% 几乎全靠量化家族的 +99.1%(其余 64 题 −1.1%),剔除各单元最佳家族后 CuTe 方向四个正提升中三个转负。第三,独立实现质量(Table 2):DeepSeek-V4-Pro 全部通过但几何平均加速最低(1.8×/2.4×),Qwen3.8-Flash 通过率最低(64.9%/62.2%)却有最高 TIRx 加速 8.7×,且所有模型 TIRx 加速都高于 CuTe DSL。第四,相对梯位决定命运(Figure 4):源尝试高于目标 solo 时 71.2% 获助、8.1% 受损,同级时 25.7%/21.8%(三个大模型仍保 +7.2% 到 +16.4% 提升),低于时 10.6% 获助、53.8% 受损,六个模型全部遵循此序。第五,技能内容(Figure 5):未支持闭包在五个模型的受损比较中比获助比较高 7 到 17 个百分点,议程交接在三个大模型中高 11 到 27 点,已验证改写在三个模型中与帮助正相关但对 GPT-5.6 Sol 反而多见于受损。第六,失败归因(Figure 7):大模型主要被技能带偏(技能侧原因占 65%–86%,如搜索截断对 DeepSeek/GPT-5.6 Sol 达 8.8%/10.1%、未验证采纳对 GLM-5.3 达 11.5%),而 solo 通过率最低的两个 Flash 模型主要败在自己的执行(GLM-5.3-Flash 63%、Qwen3.8-Flash 94% 归于错误执行、工具链摩擦与预算管理);受损比较中超过 80% 全程或部分跟随技能,未验证声明在 17%–68% 的受损案例中复现在目标自己的技能里。第七,方向不对称:获助比较的反方向 41.5% 受损、23.1% 获助,两方向 log 配对比率的 Spearman 相关为 −0.26;技能条件尝试对源速度的追踪相关性 0.51 高于 solo 的 0.35,说明目标确实在跟着源走。
查看结构化数据
| 任务 | 指标 | 本文 | 基线 | 提升 |
|---|---|---|---|---|
| CuTe DSL 技能 → 全新 TIRx 尝试(74 题配对迁移) | 配对提升 ΔGM | GPT-5.6 Sol +29.3% 为最高;GLM-5.3-Flash −19.1% 为最低 | 同变体 solo TIRx 尝试(无技能) | 范围 −19.1% 至 +29.3%,四个模型为正 |
| TIRx 技能 → 全新 CuTe DSL 尝试(74 题配对迁移) | 配对提升 ΔGM | GPT-5.6 Sol +29.3%、GLM-5.3 +17.9%、Gemini 3.7 Flash +18.1% | 同变体 solo CuTe DSL 尝试(无技能) | 四个模型为正,Qwen3.8-Flash −2.6% 为负 |
| 源尝试高于目标 solo 梯位的比较 | 帮助率 / 损害率 | 71.2% 获助 / 8.1% 受损 | 源尝试低于目标 solo 时:10.6% 获助 / 53.8% 受损 | 相对梯位是迁移结果的最强预测因子 |
| 量化家族(10 题),GPT-5.6 Sol,CuTe→TIRx | 配对提升 ΔGM | +99.1%(帮助率 70%、损害率 0%) | 该模型其余 64 题仅 −1.1% | 总提升 +8.7% 几乎全部由量化家族贡献 |
| KV Cache 家族(8 题),GLM-5.3 | 配对提升 ΔGM | TIRx 技能 +67.9% 对 CuTe 技能 −40.9% | 同题同模型仅换技能来源方向 | 同一模型同一问题的技能价值随方向翻转符号 |
| 独立实现质量(148 个 solo 尝试) | 通过率 P / 几何平均加速 GM | DeepSeek-V4-Pro 100%/1.8×(CuTe);Qwen3.8-Flash 62.2%/8.7×(TIRx) | 各模型间排序互不相同 | 通过率与加速排名解耦,TIRx 加速一致高于 CuTe DSL |
局限与改进
作者承认的局限包括:结论仅基于六个模型、两个 DSL、一块 B200、一个 Terminus-2 Agent 脚手架、一份技能指令和 40 分钟单一预算,外推性受限;源尝试与技能条件尝试来自同一模型是设计使然,因此无法分离模型蒸馏经验的能力与使用经验的能力;内容分析关联的是内容类别的存在与否,而非具体语句或措辞;同题设计把先前经验的相关性固定住,不覆盖对新问题、新工作负载的泛化,也不测试技能跨轮次的积累。我自己的观察补充几点:配对比率中 rescue=4、break=1/4 的转移值是人为设定,虽然放在截断边界有合理性,但不同的裁决权重会改变聚合数字;每次条件只有一个 solo 对照运行,Agent 尝试本身的随机方差未被多次重复消除,单题层面的配对结论噪声可能较大(作者只用置换检验在聚合层面回应);11 类内容标签和 6 类失败归类均由 LLM 标注,论文未报告与人类标注的一致性校验;技能指令本身是固定的,损害可能部分源于指令设计(如要求把技能写给另一 DSL 使用),换个蒸馏协议结论可能不同。
独立分析的弱点
第一,单次运行的统计功效不足:每个配对只有一个 solo 和一个 skill-conditioned 运行,Agent 行为的高方差意味着单题的 $\rho_i$ 噪声很大,虽然 74 题聚合后的 $\Delta_{GM}$ 稳健,但按家族切分后每格只有 8 到 18 题,像 MoE 家族 +68.2% 这类亮眼数字建立在极小样本上,改进方向是每格重复 3 到 5 次取中位配对比率。第二,二元裁决权重的人为性:失败变通过记 4 分、通过变失败记 1/4 分的设定直接决定了帮助与损害率的量级,论文未做这一超参数的敏感性分析,改进方向是报告多组权重下的结论稳定性,或改用连续的效用函数。第三,技能指令单一:所有模型共用同一份蒸馏指令,损害案例中大量未支持闭包和议程交接可能是指令没有强制证据标注的结果,尽管 Figure 6 显示技能里有 tested/unverified 标签机制,但格式并不被强制执行,改进方向是对比结构化技能(强制字段:证据等级、适用条件、开放问题)与自由格式技能。第四,只有两个 DSL 且都是 NVIDIA 生态内的 Python 嵌入式 DSL,跨 DSL 的概念性结论缺乏与 Triton、TileLang 或跨厂商 AMDHIP 生态的对照,改进方向是纳入 Triton 或 CASS-Bench 式的跨栈配对。第五,损害案例分析依赖 LLM 标注且未报告人工抽检一致率,另外 40 分钟预算下 43 个 Qwen3.8-Flash 缺失技能的治疗臂被计为中性,这种处理虽然保守但掩盖了「写不出技能」本身的信号。
未来方向
作者提出的方向包括:比较转移不同材料(源实现、轨迹、技能)对复用的影响,以分离知识的载体效应;比较内容匹配下的自由格式与结构化技能,检验组织方式对采纳的作用;跨模型转移技能,从而把蒸馏能力与使用能力解耦,并检验源的相对梯位是否也预测从大模型向 Flash 级模型的转移;删除或改写单条指导语句做语句级消融,测试其对目标尝试搜索、验证和结果的影响;把技能转移到同家族的相关问题上,测试当问题变化、Agent 必须自行判断相关性时哪些发现仍然适用;跨轮次、跨 DSL 链式转移,追踪有用知识是否被保留精炼、未验证声明是否被验证纠正或继续传播。基于本文成果可延伸的方向:把配对提升作为强化学习的奖励信号训练专门的蒸馏策略,让模型学会只写下可跨 DSL 使用的知识;构建技能验证层,在技能回灌前自动检测未支持闭包并要求补充实验;把相对梯位发现转化为调度策略——运行时先粗估目标 solo 水平,再决定是否采纳某条经验;以及把本协议推广到多轮记忆型 Agent 系统,度量知识库在长周期中的知识衰变与污染。
复现评估
复现可行性中等偏上。项目主页为 https://yige24.github.io/MetaKernelBench,论文明确说明每个问题文件记录其上游来源、参考实现、工作负载配置和许可证,上游数据全部公开(SOL-ExecBench、FlashInfer-Bench、vLLM、flash-linear-attention 均为开源项目)。软件栈完全指定:PyTorch 2.13.0 + CUDA 13.2 + cuDNN 9 镜像,CuTe DSL 用 CUTLASS DSL 4.7.0,TIRx 用 Apache TVM 0.25.0.post1,Agent 脚手架用开源的 Terminal-Bench Terminus-2 和 Harbor 0.20.0,评测协议细节(5 次正确性抽样、10 次预热、50 次计时、600 秒子进程限制、容差公式)在附录中给足。主要门槛有三:一是需要 NVIDIA B200(sm_100a)GPU 做评分,这是最稀缺的资源,虽然 Agent 尝试本身只在两核 8GB 的 CPU 沙箱进行;二是六个被测模型中有多个是闭源商业模型,API 费用不菲,粗算 148 变体 × 2 臂 × 40 分钟 × 6 模型的尝试与评分总量,完整复现需要可观的预算;三是人工筛选融合子图、构建 8 个 vLLM 衍生问题和 4 个线性注意力问题的部分含人力成本。若只复现核心协议在少量问题上跑一两个开源模型,则难度大幅降低。
论文图表
左侧展示问题来源的漏斗:从 SOL-ExecBench(42)、FlashInfer-Bench(20)、vLLM(8)、flash-linear-attention(4)人工筛选融合子图,得到 74 个固定工作负载问题。右侧按六个家族展示题目数量与代表性计算模式:Attention 18 题(分页/不规则缓存的在线 softmax 评分)、KV Cache 8 题(缓存维护、页表收集分发)、MLP & Norm 17 题(残差+RMSNorm、门控 GEMM+SiLU,中间量留在片上)、MoE 8 题(token 分发、专家 GEMM、加权合并)、Quantization 10 题(块缩放低精度计算,含 FP8/NVFP4)、Linear Attention 13 题(固定大小状态 S 的门控状态更新、查询×状态),并标注各家族涉及的数值格式。
它说明了 74 个问题的构成、分布和每个家族的优化约束来源,是理解按家族分解的实验结果(如量化家族 +99.1%、KV Cache 符号反转)的必要背景。
热图矩阵:行为六个模型(含各模型的获助/受损比较数),列为 11 类技能内容标签(议程交接、未支持闭包、未测量处方、源 DSL 机制、验证配方、有界失败诊断、瓶颈与计时证据、已验证改写、语义与精度危险、工作负载普查、雄心封顶),格子值是获助比较中的普及率减去受损比较中的普及率(百分点,两方向平均)。表头百分比给出每类标签在全部 841 份技能中的总体普及率。
它把迁移结果与技能内容关联起来:未支持闭包在 5/6 模型的受损案例中显著更多(−7 到 −17 点),而与改进相关的内容因模型而异,说明损害有共性诱因、帮助没有普适配方。
附录中的任务指令全文摘录卡片。顶部参数行:DSL 为 CuTe DSL 或 TIRx、GPU 为 B200 (sm_100a)、40 分钟预算、10 次反馈提交、沙箱 2 核 8GB 无 GPU 无网络、kernel.py 不超过 300000 字节。卡片按节引用指令原文:任务(每次调用必须执行真正贡献输出的 DSL 核)、交付物(kernel.py 与只记录核知识的 SKILL.md,每条结论须有测量证据且不依赖当前 DSL 语法)、实现边界(禁止其他核语言/编译器/CUDA Graphs)、评分契约(容差、中位计时、端到端测量)、环境、提交与预算、建议工作流(先交能跑的版本、每实验只改一个因素、最后五分钟止损)、技能附加格式(skill-conditioned 尝试专属的中性标题)。
完整实验协议的可复现性核心:它精确定义了 Agent 看到什么、被允许做什么、如何被评分,以及技能如何被注入,是复现或批判该基准时必须核对的原始材料。
两个对照案例。上:帮助案例,DeepSeek-V4-Pro 的 TIRx 源(p65,仅 0.997× 通过)把只在 CPU 上测过、带精度警告的 bmm 改写作为开放假设移交;CuTe DSL 目标尝试先以 0.997× 与 eager 持平,再回忆技能中的假设、在 CPU 上验证 float32 提升版、经 GPU 评分确认,最终 0.526 ms 达 16.4×(比 solo 快 27 倍)。下:受损案例,GLM-5.3 的 CuTe DSL 源(p09,正确性失败)把测试过的 SDPA 接口/掩码/布局规则当作既定路线移交;TIRx 目标尝试第一分钟就采纳该路线、视规则为定论、从未尝试 solo 找到的变长 flash attention,0.821 ms 比 solo 0.057 ms 慢 14 倍,规则还写进了它自己的技能。
精妙展示了目标的两种态度及其后果:把指导当假设、先验证再使用导致巨大收益;把指导当配方、不加推导地照办导致严重损害,为「技能应携带证据等级」提供了直接依据。