DeepSeek-V4论文中隐藏的重试教训

Reddit r/LocalLLaMA 新闻

摘要

本文审视了DeepSeek-V4论文中关于重试被中断的LLM请求会引入长度偏差的警告,并通过生成10万首诗进行验证,发现重试会让响应变短。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/07/31 16:55

# 关于重试的教训,藏在 DeepSeek-V4 论文里 来源:https://quesma.com/blog/hidden-lesson-deepseek-paper/ DeepSeek-V4 论文中包含了给所有运行 LLM 基准测试的人的一个意外教训:有时,重试失败请求是不正确的。 所以我决定亲自验证一下。在生成了 100,000 首 AI 诗歌之后,以下是我的发现。 ## DeepSeek 的警告 以下是 DeepSeek-V4 论文中让我感到好奇的一段话: > 重要的是,从头重新生成未完成的请求在数学上是不正确的,因为**这会引入长度偏差**。由于较短的响应更有可能在中断中幸存下来,因此一旦发生中断,从头重新生成会使模型更容易产生较短的序列。 摘自 DeepSeek-V4 论文 (https://arxiv.org/html/2606.19348v1#S5.SS2.SSS3.p3.1)添加重试是解决可靠性问题的显而易见的方法。但正如 DeepSeek 注意到的,较长的请求有更高的概率被中断。当你重试一个失败的较长请求时,有可能会得到一个较短的响应作为替代品。 ## 重试让 AI 诗歌变短 ### 实验 由于统计偏差往往难以理解,让我们看看这如何影响实际运行。 我让 DeepSeek-V4-Flash 为我生成 100,000 首诗歌、俳句或其他文学作品: > 以随机选择的一种形式写一篇完整的文学作品:一行诗、俳句、小说章节或打油诗。 这花费了我 6.06 美元(V4-Flash 很便宜!),并生成了各种各样的响应: 响应长度直方图100,000 个 DeepSeek-V4 Flash 生成结果的响应长度,以 20 词为区间。最后一个区间包含 1,180 词及以上的响应。响应数量轴为对数刻度。平均值为 74 词。标注指出了短形式峰值和较长的小说章节峰值。0–19 词:68,182 个响应20–39 词:18,770 个响应40–59 词:1,541 个响应60–79 词:19 个响应80–99 词:6 个响应100–119 词:4 个响应120–139 词:5 个响应140–159 词:20 个响应160–179 词:25 个响应180–199 词:39 个响应200–219 词:71 个响应220–239 词:104 个响应240–259 词:186 个响应260–279 词:237 个响应280–299 词:326 个响应300–319 词:392 个响应320–339 词:467 个响应340–359 词:507 个响应360–379 词:600 个响应380–399 词:622 个响应400–419 词:633 个响应420–439 词:590 个响应440–459 词:605 个响应460–479 词:525 个响应480–499 词:540 个响应500–519 词:468 个响应520–539 词:454 个响应540–559 词:441 个响应560–579 词:360 个响应580–599 词:357 个响应600–619 词:346 个响应620–639 词:266 个响应640–659 词:272 个响应660–679 词:217 个响应680–699 词:197 个响应700–719 词:212 个响应720–739 词:181 个响应740–759 词:175 个响应760–779 词:132 个响应780–799 词:130 个响应800–819 词:122 个响应820–839 词:109 个响应840–859 词:74 个响应860–879 词:74 个响应880–899 词:48 个响应900–919 词:51 个响应920–939 词:44 个响应940–959 词:37 个响应960–979 词:32 个响应980–999 词:25 个响应1000–1019 词:27 个响应1020–1039 词:20 个响应1040–1059 词:14 个响应1060–1079 词:15 个响应1080–1099 词:12 个响应1100–1119 词:6 个响应1120–1139 词:13 个响应1140–1159 词:7 个响应1160–1179 词:5 个响应1180+ 词:41 个响应平均值:74 词一行诗,俳句长小说章节01001001k10k100k03006009001,200+词数量(对数) 平均生成了 74 词的文本,但结果差异很大: - **73.2% 是俳句**。非常短:平均 15 词。 - **11.5% 是小说章节**。长 34 倍:平均 503 词。 ### 模拟失败 现在让我们模拟一下,如果 LLM 推理真的很不可靠,并且**10% 的请求会失败**,在生成过程中被随机中断,会发生什么。 我使用了一个称为泊松过程 (https://en.wikipedia.org/wiki/Poisson_point_process) 的统计模型来模拟这种行为;中断之间的平均时间为 31 秒,使我的实验中 10% 的请求失败。 正如 DeepSeek 论文所指出的,较长的请求受到的影响更频繁。你可以使用泊松过程的这个公式来计算: P(请求期间失败)=1−e−请求时间/中断之间的平均时间P(\text{请求期间失败}) = 1 - e^{-\text{请求时间}/\text{中断之间的平均时间}} 例如,俳句平均需要 2.38 秒生成,因此它们的失败率为1−e−2.38/31≈7.4%1 - e^{-2.38/31} \approx 7.4\%。但小说章节更长(11.52 秒),因此它们的失败率更高:1−e−11.52/31≈31.0%1 - e^{-11.52/31} \approx 31.0\%。 你可以看到,对于较长的请求,失败率会上升: 响应长度直方图100,000 个 DeepSeek-V4 Flash 生成结果的响应长度,以 20 词为区间。最后一个区间包含 1,180 词及以上的响应。响应数量轴为对数刻度。红线显示每个响应长度区间内的平均泊松失败概率,使用线性百分比刻度。其最小值和最大值已标注。0–19 词:68,182 个响应;7.0% 失败率20–39 词:18,770 个响应;8.7% 失败率40–59 词:1,541 个响应;10.3% 失败率60–79 词:19 个响应;10.7% 失败率80–99 词:6 个响应;12.5% 失败率100–119 词:4 个响应;12.7% 失败率120–139 词:5 个响应;14.3% 失败率140–159 词:20 个响应;15.0% 失败率160–179 词:25 个响应;15.6% 失败率180–199 词:39 个响应;18.2% 失败率200–219 词:71 个响应;17.7% 失败率220–239 词:104 个响应;18.9% 失败率240–259 词:186 个响应;19.5% 失败率260–279 词:237 个响应;20.8% 失败率280–299 词:326 个响应;21.7% 失败率300–319 词:392 个响应;22.9% 失败率320–339 词:467 个响应;23.5% 失败率340–359 词:507 个响应;24.5% 失败率360–379 词:600 个响应;25.4% 失败率380–399 词:622 个响应;25.9% 失败率400–419 词:633 个响应;26.8% 失败率420–439 词:590 个响应;27.7% 失败率440–459 词:605 个响应;28.5% 失败率460–479 词:525 个响应;29.4% 失败率480–499 词:540 个响应;30.1% 失败率500–519 词:468 个响应;31.0% 失败率520–539 词:454 个响应;31.5% 失败率540–559 词:441 个响应;32.3% 失败率560–579 词:360 个响应;33.3% 失败率580–599 词:357 个响应;33.7% 失败率600–619 词:346 个响应;34.6% 失败率620–639 词:266 个响应;35.2% 失败率640–659 词:272 个响应;35.6% 失败率660–679 词:217 个响应;36.7% 失败率680–699 词:197 个响应;37.2% 失败率700–719 词:212 个响应;38.0% 失败率720–739 词:181 个响应;38.8% 失败率740–759 词:175 个响应;39.7% 失败率760–779 词:132 个响应;40.6% 失败率780–799 词:130 个响应;41.1% 失败率800–819 词:122 个响应;41.9% 失败率820–839 词:109 个响应;41.5% 失败率840–859 词:74 个响应;42.8% 失败率860–879 词:74 个响应;43.6% 失败率880–899 词:48 个响应;44.1% 失败率900–919 词:51 个响应;45.1% 失败率920–939 词:44 个响应;44.7% 失败率940–959 词:37 个响应;46.1% 失败率960–979 词:32 个响应;47.5% 失败率980–999 词:25 个响应;47.5% 失败率1000–1019 词:27 个响应;48.1% 失败率1020–1039 词:20 个响应;48.2% 失败率1040–1059 词:14 个响应;49.2% 失败率1060–1079 词:15 个响应;49.2% 失败率1080–1099 词:12 个响应;47.8% 失败率1100–1119 词:6 个响应;50.8% 失败率1120–1139 词:13 个响应;49.6% 失败率1140–1159 词:7 个响应;50.2% 失败率1160–1179 词:5 个响应;53.4% 失败率1180+ 词:41 个响应;55.4% 失败率失败率7.0%55.4%0%15%30%45%60%失败率03006009001,200+词 ### 添加重试 那么让我们看看如果添加重试会发生什么。我人为地模拟失败,并对失败的请求进行重试,直到它们成功为止。 运行模拟后,生成的数据集看起来明显不同!正如 DeepSeek 作者警告我们的那样: 没有失败失败 + 重试变化平均词数73.5159.40−19.2%≥ 600 词的响应2,9041,961−32.5%小说章节11,4998,919−22.4%平均响应现在明显更短,长格式响应也更少。为了更好地理解为什么变化这么大,让我们看看失败的请求以及重试时发生了什么: 失败的请求及其替代品落在哪里,按均匀间隔的词桶排列10,022 个预期失败的请求按均匀间隔的 25 词桶分箱,并变成其最终替代品的长度。数量轴为对数刻度。红色虚线轮廓保留失败的请求分布,同时动画循环。0–24 词:5,056 个失败 → 7,430 个替代品落在这里25–49 词:1,475 个失败 → 1,683 个替代品落在这里50–74 词:17 个失败 → 16 个替代品落在这里75–99 词:1 个失败 → 1 个替代品落在这里100–124 词:1 个失败 → 0 个替代品落在这里125–149 词:2 个失败 → 1 个替代品落在这里150–174 词:5 个失败 → 3 个替代品落在这里175–199 词:8 个失败 → 4 个替代品落在这里200–224 词:17 个失败 → 9 个替代品落在这里225–249 词:34 个失败 → 16 个替代品落在这里250–274 词:51 个失败 → 22 个替代品落在这里275–299 词:86 个失败 → 35 个替代品落在这里300–324 词:115 个失败 → 43 个替代品落在这里325–349 词:142 个失败 → 51 个替代品落在这里350–374 词:179 个失败 → 60 个替代品落在这里375–399 词:201 个失败 → 64 个替代品落在这里400–424 词:208 个失败 → 63 个替代品落在这里425–449 词:203 个失败 → 59 个替代品落在这里450–474 词:213 个失败 → 58 个替代品落在这里475–499 词:198 个失败 → 52 个替代品落在这里500–524 词:184 个失败 → 46 个替代品落在这里525–549 词:182 个失败 → 43 个替代品落在这里550–574 词:152 个失败 → 35 个替代品落在这里575–599 词:153 个失败 → 33 个替代品落在这里600–624 词:143 个失败 → 30 个替代品落在这里625–649 词:120 个失败 → 24 个替代品落在这里650–674 词:107 个失败 → 21 个替代品落在这里675–699 词:92 个失败 → 17 个替代品落在这里700–724 词:98 个失败 → 18 个替代品落在这里725–749 词:87 个失败 → 15 个替代品落在这里750–774 词:76 个失败 → 13 个替代品落在这里775–799 词:67 个失败 → 11 个替代品落在这里800–824 词:65 个失败 → 10 个替代品落在这里825–849 词:47 个失败 → 7 个替代品落在这里850–874 词:43 个失败 → 6 个替代品落在这里875–899 词:27 个失败 → 4 个替代品落在这里900–924 词:27 个失败 → 4 个替代品落在这里925–949 词:25 个失败 → 3 个替代品落在这里950–974 词:19 个失败 → 2 个替代品落在这里975–999 词:16 个失败 → 2 个替代品落在这里1000–1024 词:15 个失败 → 2 个替代品落在这里1025–1049 词:10 个失败 → 1 个替代品落在这里1050–1074 词:10 个失败 → 1 个替代品落在这里1075–1099 词:7 个失败 → 1 个替代品落在这里1100–1124 词:3 个失败 → 0 个替代品落在这里1125–1149 词:7 个失败 → 1 个替代品落在这里1150–1174 词:5 个失败 → 1 个替代品落在这里1175–1199 词:4 个失败 → 0 个替代品落在这里1200+ 词:19 个失败 → 2 个替代品落在这里失败的请求重试后1101001k10k03006009001,200+词数量(对数)重试后,(原本的)长响应往往会变成较短的响应。图表的右侧受到的影响最大。 用统计工具集来看,添加重试改变了数据的最终分布。我们在这里看到的是选择偏差 (https://en.wikipedia.org/wiki/Selection_bias) 的一种形式:重试的样本不具有代表性——长响应在其中占比过高。幸存者偏差 (https://en.wikipedia.org/wiki/Survivorship_bias) 也是一个很好的视角:最终数据集只包含在某种过滤过程中幸存下来的响应——在这种情况下,是惩罚长请求的中断。 ## 结论 较短的诗歌可能听起来无害,但同样的问题在真正的基准测试中可能是危险的。较长的请求可能陷入无休止的推理循环或走向错误的方向,而重试它可能会给模型第二次机会——从而提高分数。 有了这些知识,我们有 3 种方法可以处理这个问题: - DeepSeek 作者架构了他们的系统来恢复中断的请求,而不是从头重新生成它们。 - 真正随机发生的失败(与请求长度无关)可以安全地重试。 - 这个问题可能对基准测试或研究很重要,但对于大多数面向消费者的应用程序来说,这种差异并不重要。 起初只是 DeepSeek-V4 论文中一个令人好奇的警告,对我来说变成了一个令人惊讶的直观统计学教训。 敬请关注未来的帖子和发布。

相似文章

DeepSeek V4 完整论文发布:FP4 QAT 技术细节与训练稳定性技巧 [D]

Reddit r/MachineLearning

DeepSeek 发布了完整的 V4 论文,详细介绍了 FP4 量化感知训练、MoE 训练稳定性技巧(预判路由与 SwiGLU 截断),以及用于 RLHF 的生成式奖励模型,实现了显著的效率提升——V4-Flash 在 100 万上下文长度下仅需 V3.2 的 10% FLOPs 和 7% 的 KV 缓存。

DeepSeek LLM:以长期主义扩展开源语言模型

Papers with Code Trending

DeepSeek LLM是一个开源语言模型项目,它开发了一个大规模数据集,并采用SFT和DPO,在各种基准测试和开放式评估中实现了超越LLaMA-2 70B和GPT-3.5的性能。

FlashMemory DeepSeek-V4 检索器(GitHub仓库)

TLDR AI

介绍了FlashMemory DeepSeek-V4检索器,这是一个轻量级模型,通过预测接下来将关注哪些块来稀疏化DeepSeek-V4的CSA KV缓存,仅保留约10-15%在设备上,同时匹配全注意力性能。