🐺🐦⬛ LLM 比较/测试:25 个 SOTA LLM(包括 QwQ)经过 59 次 MMLU-Pro CS 基准测试运行

引言
我一直在为我的最新研究项目不懈努力,通过运行 25 个最先进的大型语言模型在备受推崇的 MMLU-Pro 基准的计算机科学类别中进行比较。这包括:
- 59 次独立的基准测试运行
- 超过 70 小时的总运行时间
- 测试了 25 个不同的 LLM,包括:
- 来自 Anthropic、Google、阿里巴巴、OpenAI、Mistral、Meta 等的最新模型
- 多种模型大小(参数和量化)
- 使用和不使用推测解码(一种可以在不影响输出质量的情况下加快推理速度的技术)
目标是彻底系统地评估这些模型,以:
- 确定哪一个在计算机科学任务中表现最佳,作为一般智能的替代指标
- 比较开源模型与闭源模型
- 分析模型大小和量化选择的影响
- 衡量推测解码对推理速度的益处
- 提供详细的结果分析(以及惊喜!)
我于 11 月启动了该项目,并一直在不断扩展测试模型,同时更新我的发现。
QwQ 的发布尤其引起了我的注意,因为这个独特的模型在初步测试中表现出了卓越的性能,值得进行更深入的分析和更广泛的评估。
虽然我可以无限期地继续完善和扩展这项研究,但我选择将我的主要发现整合到一篇重点突出的博客文章中,反映我研究的当前状态。这项分析代表了迄今为止对大型语言模型最全面的评估之一,为研究人员和从业者评估这些模型以满足其特定需求或在实际应用中实施它们提供了宝贵的见解。
关于基准
MMLU-Pro 基准是对大型语言模型在计算机科学、数学、物理、化学等各个类别中进行的全面评估。它旨在评估模型理解和应用各种学科知识的能力,提供衡量一般智能的可靠指标。虽然它是一个选择题测试,但与前身 MMLU 的 4 个答案选项不同,现在每个问题有 10 个选项,这大大降低了偶然答对的概率。此外,重点越来越放在复杂的推理任务上,而不是纯粹的事实知识。
对于我的基准测试,目前我仅限于计算机科学类别,其中包含 410 个问题。这个务实的决定基于几个因素:首先,我特别重视我的日常工作环境中模型的响应,因为我经常在这个上下文中每天使用这些模型。其次,对于在消费级硬件上运行的本地模型,存在计算时间的实际限制——单个运行对于大型模型来说已经需要几个小时,而我通常会进行至少两次运行以确保一致性。
与仅报告单一分数的典型基准不同,我为每个模型进行多次测试运行,以捕获性能变异性。这种全面的方法提供了对每个模型真实能力的更准确和细致的理解。通过对每个模型执行至少两次基准测试运行,我建立了对性能水平和一致性的可靠评估。结果显示了标准偏差的误差条,说明了性能在不同测试运行中的变化情况。
仅这项研究的基准测试就花费了超过 70 小时的运行时间。如果增加其他类别或运行次数,测试时间将随着可用资源的限制变得过长,以至于在研究完成时,被测试的模型将过时。因此,建立实际的框架条件和边界对于在合理的时间内获得有意义的结果至关重要。
最佳模型
虽然“最佳”取决于具体用例,但这些基准提供了一份关于大型语言模型当前技术水平的全面概述。让我们看看本页顶部的图表,它突出了主要模型之间的性能比较。
该图表按模型的平均分数进行排名,误差条表示标准偏差。“在线”模型仅可通过 Anthropic、Google 或 OpenAI 等 API 提供商访问,而“本地”模型可直接从 Hugging Face 下载并在您自己的硬件上运行。“两者”类别表示这些 LLM 既可用于本地部署,也可通过 Azure、IONOS(一家德国提供商,尤其适用于需要国家云基础设施的 GDPR 合规应用程序)或 Mistral 等云 API 服务获得。
Claude 3.5 Sonnet (20241022) 作为目前的顶尖表现者脱颖而出,这与我的实际经验完美契合。自 Claude 3.5 Sonnet 的两个版本(原始的 20240620 和更新的 20241022)发布以来,我一直持续使用它们,并始终发现它是在各种应用程序中最可靠和最通用的解决方案。基于其卓越的性能,我将其推荐为我大多数客户的首选模型,前提是在线模型是可选项。
Gemini 1.5 Pro 002 表现出色,总体排名第二。虽然据报道 Google 最新的实验模型取得了更好的结果,但基准测试期间的速率限制阻碍了对其能力的正确评估。
QwQ 32B 预览版是最佳本地模型,性能超越了许多在线模型。这既令人惊叹又出人意料,因为它只是一个(相对)较小的 32B 模型,但在这些基准测试中却超越了所有其他本地模型,包括更大的 70B、123B 甚至 405B 模型。它甚至超越了 OpenAI 的在线模型(我只能测试 ChatGPT/GPT-4o)以及出色的 Mistral 模型(由于其出色的多语言能力,Mistral 模型一直是我个人的最爱之一)。
该图表显示了 QwQ 32B 预览版在不同设置和参数下的各种配置。8.0bpw(每权重 8.0 比特)版本表现最佳(它是 EXL2 格式中最大的可用版本),前提是——这是一个重要发现——模型有足够的空间(max_tokens=16K)来“思考”!这是 QwQ 的独特能力:它能够利用思维链和自我反思来得出正确答案,而无需特别提示这样做。
因此,如果 QwQ 的输出被过早截断(这在较小的输出限制下很容易发生——MMLU-Pro 的默认值为 max_tokens=2K!),它在 MMLU-Pro(以及可能其他基准)中的表现会更差。这会更严重地影响较小的量化模型,因为它们不像 8.0bpw 版本那样智能,需要更长时间的思考(即写入更多令牌)才能得出正确答案。
Athene V2 Chat 是另一个出色的模型,但它在 8 位、max_tokens=16K 的情况下不如 QwQ 32B Preview 稳定。它的最高分数略高于 QwQ 32B Preview,但 QwQ 更一致且方差更小,因此在图表中根据平均分数排名更高。它也是一个 72B 模型,比 QwQ 32B Preview 大得多。
来自阿里巴巴 QwQ 团队的 Qwen 2.5 72B Instruct 表现异常出色。即使量化到 4.65bpw 以适应我的 48 GB 显存,它在这些基准测试中也超越了大多数其他模型。Qwen 团队在开放权重模型方面明显领先于 Meta 和 Mistral。
GPT-4o (2024-08-06) 的表现低于预期,令人惊讶的是,这个旧版本在基准测试中比最新的 ChatGPT 版本或其更新迭代(2024-11-20)表现更好。
Mistral Large 2407 是一个 123B 模型,紧随 GPT-4o 之后。与 GPT-4o 一样,这个旧版本在基准测试中表现优于最新版本(2411)。这引发了人们的疑问,即新模型是否正在牺牲智能以换取更好的写作能力或速度。
Llama 3.1 405B Instruct (FP8) 是下一个最佳本地模型。作为最大的本地模型,其性能低于预期,特别是考虑到它运行所需的资源。
新版本 Mistral Large 2411 略低于其旧版本。尽管我很欣赏他们的模型在写作和多语言方面的出色能力,但 Qwen 已经取得了领先,尤其考虑到 Mistral 的大小和仅限研究的许可证。
ChatGPT-4o (最新版) 是当前 ChatGPT 网站模型的 API 版本。其基准测试于 2024 年 11 月 18 日进行,使用的是当时可用的版本。
在线模型可以随时更新,因此带版本号的模型是更可靠的选择。即使是带版本号的模型,提供商仍可能在不通知的情况下修改参数,例如量化、设置和安全防护措施。为了实现最大的一致性和完全控制,在本地运行模型仍然是唯一的选择!
GPT-4o (2024-11-20) 是 GPT-4o 的最新版本。同样,令人好奇的是,新版本与前一版本相比,基准性能较低。看起来他们为了速度牺牲了质量。
Llama 3.1 70B Instruct 是下一个最佳本地模型。作为一个 70B 模型,它相对较大,但仍然可以在本地运行,尤其是在量化之后。然而,此基准测试使用的是在线、未量化版本,代表其最大性能。
Gemini 1.5 Flash 002,谷歌的紧凑型模型,其性能与其较小的尺寸相符——不如其专业版。然而,它令人印象深刻地超越了 Meta 的 Llama 3.2 90B,表明较小的模型也能取得显著的成果。
Llama 3.2 90B Vision Instruct 代表了 Meta 对 Llama 的多模态演进——本质上是集成了视觉能力的增强版 Llama 3.1 70B。尽管其性能略有波动,但其有效性与 70B 版本相当。
Qwen Coder 32B Instruct 是 Qwen 系列中另一个出色的模型,专门针对编码任务进行了优化。虽然它与 QwQ 32B Preview 具有相同的 32B 参数大小,但在此基准测试中得分较低。这种性能差异是自然的,因为计算机科学知识和编码能力是不同的技能集——专业模型在超出其重点领域的更广泛领域中通常会表现出性能下降。
Mistral Small 2409,一个 22B 参数的模型,在这些测试中排名低于 QwQ 和 Mistral Large 变体。我为此基准测试设置的最低阈值为 50% 的正确答案,使其成为最后一个符合分析条件的模型。
详细结果
现在我们已经回顾了排名,让我们来探讨详细结果并发现更多见解。以下是完整的表格:
模型 | HF 主模型名称 | HF 草稿模型名称(推测解码) | 大小 | 格式 | API | GPU | GPU 内存 | 运行 | 时长 | 总计 | % | TIGER-Lab | 正确随机猜测 | 提示词 token | 每秒令牌数 | 完成令牌数 | 每秒令牌数 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
claude-3-5-sonnet-20241022 | - | - | - | - | Anthropic | - | - | 1/2 | 31 分 50 秒 | 340/410 | 82.93% | ~= 82.44% | 694458 | 362.78 | 97438 | 50.90 | |
claude-3-5-sonnet-20241022 | - | - | - | - | Anthropic | - | - | 2/2 | 31 分 39 秒 | 338/410 | 82.44% | == 82.44% | 694458 | 364.82 | 97314 | 51.12 | |
gemini-1.5-pro-002 | - | - | - | - | Gemini | - | - | 1/2 | 31 分 7 秒 | 335/410 | 81.71% | > 71.22% | 648675 | 346.82 | 78311 | 41.87 | |
gemini-1.5-pro-002 | - | - | - | - | Gemini | - | - | 2/2 | 30 分 40 秒 | 327/410 | 79.76% | > 71.22% | 648675 | 351.73 | 76063 | 41.24 | |
QwQ-32B-Preview (8.0bpw EXL2, max_tokens=16384) | bartowski/QwQ-32B-Preview-exl2_8_0 | Qwen/Qwen2.5-Coder-0.5B-Instruct | 32B | EXL2 | TabbyAPI | RTX 6000 | 38436MiB | 1/2 | 2 小时 3 分 30 秒 | 325/410 | 79.27% | 0/2, 0.00% | 656716 | 88.58 | 327825 | 44.22 | |
QwQ-32B-Preview (8.0bpw EXL2, max_tokens=16384) | bartowski/QwQ-32B-Preview-exl2_8_0 | Qwen/Qwen2.5-Coder-0.5B-Instruct | 32B | EXL2 | TabbyAPI | RTX 6000 | 38436MiB | 2/2 | 2 小时 3 分 35 秒 | 324/410 | 79.02% | 656716 | 88.52 | 343440 | 46.29 | ||
Athene-V2-Chat (72B, 4.65bpw EXL2, Q4 缓存) | wolfram/Athene-V2-Chat-4.65bpw-h6-exl2 | - | 72B | EXL2 | TabbyAPI | RTX 6000 | 44496MiB | 1/2 | 2 小时 13 分 5 秒 | 326/410 | 79.51% | > 73.41% | 656716 | 82.21 | 142256 | 17.81 | |
Athene-V2-Chat (72B, 4.65bpw EXL2, Q4 缓存) | wolfram/Athene-V2-Chat-4.65bpw-h6-exl2 | - | 72B | EXL2 | TabbyAPI | RTX 6000 | 44496MiB | 2/2 | 2 小时 14 分 53 秒 | 317/410 | 77.32% | > 73.41% | 656716 | 81.11 | 143659 | 17.74 | |
Qwen2.5-72B-Instruct (4.65bpw EXL2, Q4 缓存) | LoneStriker/Qwen2.5-72B-Instruct-4.65bpw-h6-exl2 | - | 72B | EXL2 | TabbyAPI | 2x RTX 3090 | 41150MiB | 1/2 | 3 小时 7 分 58 秒 | 320/410 | 78.05% | > 74.88% | 656716 | 58.21 | 139499 | 12.36 | |
Qwen2.5-72B-Instruct (4.65bpw EXL2, Q4 缓存) | LoneStriker/Qwen2.5-72B-Instruct-4.65bpw-h6-exl2 | - | 72B | EXL2 | TabbyAPI | 2x RTX 3090 | 41150MiB | 2/2 | 3 小时 5 分 19 秒 | 319/410 | 77.80% | > 74.88% | 656716 | 59.04 | 138135 | 12.42 | |
QwQ-32B-Preview (4.25bpw EXL2, max_tokens=16384) | bartowski/QwQ-32B-Preview-exl2_4_25 | Qwen/Qwen2.5-Coder-0.5B-Instruct | 32B | EXL2 | TabbyAPI | RTX 6000 | 27636MiB | 1/2 | 1h 56m 8s | 319/410 | 77.80% | 0/1, 0.00% | 656716 | 94.20 | 374973 | 53.79 | |
QwQ-32B-Preview (4.25bpw EXL2, max_tokens=16384) | bartowski/QwQ-32B-Preview-exl2_4_25 | Qwen/Qwen2.5-Coder-0.5B-Instruct | 32B | EXL2 | TabbyAPI | RTX 6000 | 27636MiB | 2/2 | 1h 55m 44s | 318/410 | 77.56% | 656716 | 94.45 | 377638 | 54.31 | ||
gpt-4o-2024-08-06 | - | - | - | - | OpenAI | - | - | 1/2 | 34 分 54 秒 | 320/410 | 78.05% | ~= 78.29% | 1/2, 50.00% | 631448 | 300.79 | 99103 | 47.21 |
gpt-4o-2024-08-06 | - | - | - | - | OpenAI | - | - | 2/2 | 42 分 41 秒 | 316/410 | 77.07% | ~< 78.29% | 1/3, 33.33% | 631448 | 246.02 | 98466 | 38.36 |
QwQ-32B-Preview (8.0bpw EXL2) | bartowski/QwQ-32B-Preview-exl2_8_0 | Qwen/Qwen2.5-Coder-0.5B-Instruct | 32B | EXL2 | TabbyAPI | RTX 6000 | 38528MiB | 1/4 | 1h 29m 49s | 324/410 | 79.02% | 0/1, 0.00% | 656716 | 121.70 | 229008 | 42.44 | |
QwQ-32B-Preview (8.0bpw EXL2) | bartowski/QwQ-32B-Preview-exl2_8_0 | Qwen/Qwen2.5-Coder-0.5B-Instruct | 32B | EXL2 | TabbyAPI | RTX 6000 | 38528MiB | 2/4 | 1h 32m 30s | 314/410 | 76.59% | 0/2, 0.00% | 656716 | 118.24 | 239161 | 43.06 | |
QwQ-32B-Preview (8.0bpw EXL2) | bartowski/QwQ-32B-Preview-exl2_8_0 | - | 32B | EXL2 | TabbyAPI | RTX 6000 | 37000MiB | 3/4 | 2h 25m 24s | 308/410 | 75.12% | 0/2, 0.00% | 656716 | 75.23 | 232208 | 26.60 | |
QwQ-32B-Preview (8.0bpw EXL2) | bartowski/QwQ-32B-Preview-exl2_8_0 | - | 32B | EXL2 | TabbyAPI | RTX 6000 | 37000MiB | 4/4 | 2h 27m 27s | 305/410 | 74.39% | 0/3, 0.00% | 656716 | 74.19 | 235650 | 26.62 | |
QwQ-32B-Preview-abliterated (4.5bpw EXL2, max_tokens=16384) | ibrahimkettaneh_QwQ-32B-Preview-abliterated-4.5bpw-h8-exl2 | Qwen/Qwen2.5-Coder-0.5B-Instruct | 32B | EXL2 | TabbyAPI | RTX 6000 | 28556MiB | 1/2 | 2h 10m 53s | 310/410 | 75.61% | 656716 | 83.59 | 412512 | 52.51 | ||
QwQ-32B-Preview-abliterated (4.5bpw EXL2, max_tokens=16384) | ibrahimkettaneh_QwQ-32B-Preview-abliterated-4.5bpw-h8-exl2 | Qwen/Qwen2.5-Coder-0.5B-Instruct | 32B | EXL2 | TabbyAPI | RTX 6000 | 28556MiB | 2/2 | 2h 25m 29s | 310/410 | 75.61% | 656716 | 75.20 | 478590 | 54.80 | ||
mistral-large-2407 (123B) | mistralai/Mistral-Large-Instruct-2407 | - | 123B | HF | Mistral | - | - | 1/2 | 40 分 23 秒 | 310/410 | 75.61% | > 70.24% | 696798 | 287.13 | 79444 | 32.74 | |
mistral-large-2407 (123B) | mistralai/Mistral-Large-Instruct-2407 | - | 123B | HF | Mistral | - | - | 2/2 | 46 分 55 秒 | 308/410 | 75.12% | > 70.24% | 0/1, 0.00% | 696798 | 247.21 | 75971 | 26.95 |
Llama-3.1-405B-Instruct-FP8 | meta-llama/Llama-3.1-405B-Instruct-FP8 | - | 405B | HF | IONOS | - | - | 1/2 | 2 小时 5 分 28 秒 | 311/410 | 75.85% | 648580 | 86.11 | 79191 | 10.51 | ||
Llama-3.1-405B-Instruct-FP8 | meta-llama/Llama-3.1-405B-Instruct-FP8 | - | 405B | HF | IONOS | - | - | 2/2 | 2 小时 10 分 19 秒 | 307/410 | 74.88% | 648580 | 82.90 | 79648 | 10.18 | ||
mistral-large-2411 (123B) | mistralai/Mistral-Large-Instruct-2411 | - | 123B | HF | Mistral | - | - | 1/2 | 41 分 46 秒 | 302/410 | 73.66% | 1/3, 33.33% | 696798 | 277.70 | 82028 | 32.69 | |
mistral-large-2411 (123B) | mistralai/Mistral-Large-Instruct-2411 | - | 123B | HF | Mistral | - | - | 2/2 | 32 分 47 秒 | 300/410 | 73.17% | 0/1, 0.00% | 696798 | 353.53 | 77998 | 39.57 | |
QwQ-32B-Preview (4.25bpw EXL2) | bartowski/QwQ-32B-Preview-exl2_4_25 | - | 32B | EXL2 | TabbyAPI | RTX 6000 | 26198MiB | 1/4 | 1h 39m 49s | 308/410 | 75.12% | 0/1, 0.00% | 656716 | 109.59 | 243552 | 40.64 | |
QwQ-32B-Preview (4.25bpw EXL2) | bartowski/QwQ-32B-Preview-exl2_4_25 | Qwen/Qwen2.5-Coder-0.5B-Instruct | 32B | EXL2 | TabbyAPI | RTX 6000 | 27750MiB | 2/4 | 1h 22m 12s | 304/410 | 74.15% | 656716 | 133.04 | 247314 | 50.10 | ||
QwQ-32B-Preview (4.25bpw EXL2) | bartowski/QwQ-32B-Preview-exl2_4_25 | Qwen/Qwen2.5-Coder-0.5B-Instruct | 32B | EXL2 | TabbyAPI | RTX 6000 | 27750MiB | 3/4 | 1h 21m 39s | 296/410 | 72.20% | 656716 | 133.94 | 246020 | 50.18 | ||
QwQ-32B-Preview (4.25bpw EXL2) | bartowski/QwQ-32B-Preview-exl2_4_25 | - | 32B | EXL2 | TabbyAPI | RTX 6000 | 26198MiB | 4/4 | 1h 42m 33s | 294/410 | 71.71% | 656716 | 106.63 | 250222 | 40.63 | ||
chatgpt-4o-latest @ 2024-11-18 | - | - | - | - | OpenAI | - | - | 1/2 | 28 分 17 秒 | 302/410 | 73.66% | < 78.29% | 2/4, 50.00% | 631448 | 371.33 | 146558 | 86.18 |
chatgpt-4o-latest @ 2024-11-18 | - | - | - | - | OpenAI | - | - | 2/2 | 28 分 31 秒 | 298/410 | 72.68% | < 78.29% | 2/2, 100.00% | 631448 | 368.19 | 146782 | 85.59 |
gpt-4o-2024-11-20 | - | - | - | - | OpenAI | - | - | 1/2 | 25 分 35 秒 | 296/410 | 72.20% | 1/7, 14.29% | 631448 | 410.38 | 158694 | 103.14 | |
gpt-4o-2024-11-20 | - | - | - | - | OpenAI | - | - | 2/2 | 26 分 10 秒 | 294/410 | 71.71% | 1/7, 14.29% | 631448 | 400.95 | 160378 | 101.84 | |
Llama-3.1-70B-Instruct | meta-llama/Llama-3.1-70B-Instruct | - | 70B | HF | IONOS | - | - | 1/2 | 41 分 12 秒 | 291/410 | 70.98% | > 66.34% | 3/12, 25.00% | 648580 | 261.88 | 102559 | 41.41 |
Llama-3.1-70B-Instruct | meta-llama/Llama-3.1-70B-Instruct | - | 70B | HF | IONOS | - | - | 2/2 | 39 分 48 秒 | 287/410 | 70.00% | > 66.34% | 3/14, 21.43% | 648580 | 271.12 | 106644 | 44.58 |
gemini-1.5-flash-002 | - | - | - | - | Gemini | - | - | 1/2 | 13 分 19 秒 | 288/410 | 70.24% | > 63.41% | 1/6, 16.67% | 648675 | 808.52 | 80535 | 100.38 |
gemini-1.5-flash-002 | - | - | - | - | Gemini | - | - | 2/2 | 22 分 30 秒 | 285/410 | 69.51% | > 63.41% | 2/7, 28.57% | 648675 | 479.42 | 80221 | 59.29 |
Llama-3.2-90B-Vision-Instruct | meta-llama/Llama-3.2-90B-Vision-Instruct | - | 90B | HF | Azure | - | - | 1/2 | 33 分 6 秒 | 289/410 | 70.49% | 4/7, 57.14% | 640380 | 321.96 | 88997 | 44.74 | |
Llama-3.2-90B-Vision-Instruct | meta-llama/Llama-3.2-90B-Vision-Instruct | - | 90B | HF | Azure | - | - | 2/2 | 31 分 31 秒 | 281/410 | 68.54% | 2/5, 40.00% | 640380 | 338.10 | 85381 | 45.08 | |
Qwen2.5-Coder-32B-Instruct (8.0bpw EXL2) | bartowski/Qwen2.5-Coder-32B-Instruct-exl2_8_0 | Qwen/Qwen2.5-Coder-3B-Instruct | 32B | EXL2 | TabbyAPI | RTX 6000 | 45880MiB | 1/7 | 41 分 59 秒 | 289/410 | 70.49% | 656716 | 260.29 | 92126 | 36.51 | ||
Qwen2.5-Coder-32B-Instruct (8.0bpw EXL2) | bartowski/Qwen2.5-Coder-32B-Instruct-exl2_8_0 | Qwen/Qwen2.5-Coder-0.5B-Instruct | 32B | EXL2 | TabbyAPI | RTX 6000 | 40036MiB | 2/7 | 34 分 24 秒 | 286/410 | 69.76% | 656716 | 317.48 | 89487 | 43.26 | ||
Qwen2.5-Coder-32B-Instruct (8.0bpw EXL2) | bartowski/Qwen2.5-Coder-32B-Instruct-exl2_8_0 | Qwen/Qwen2.5-Coder-3B-Instruct | 32B | EXL2 | TabbyAPI | RTX 6000 | 45880MiB | 3/7 | 41 分 27 秒 | 283/410 | 69.02% | 0/1, 0.00% | 656716 | 263.62 | 90349 | 36.27 | |
Qwen2.5-Coder-32B-Instruct (8.0bpw EXL2) | bartowski/Qwen2.5-Coder-32B-Instruct-exl2_8_0 | bartowski/Qwen2.5-Coder-7B-Instruct-exl2_8_0 | 32B | EXL2 | TabbyAPI | RTX 6000 | 43688MiB | 4/7 | 42 分 32 秒 | 283/410 | 69.02% | 0/1, 0.00% | 656716 | 256.77 | 90899 | 35.54 | |
Qwen2.5-Coder-32B-Instruct (8.0bpw EXL2) | bartowski/Qwen2.5-Coder-32B-Instruct-exl2_8_0 | bartowski/Qwen2.5-Coder-7B-Instruct-exl2_8_0 | 32B | EXL2 | TabbyAPI | RTX 6000 | 43688MiB | 5/7 | 44 分 34 秒 | 282/410 | 68.78% | 0/1, 0.00% | 656716 | 245.24 | 96470 | 36.03 | |
Qwen2.5-Coder-32B-Instruct (8.0bpw EXL2) | bartowski/Qwen2.5-Coder-32B-Instruct-exl2_8_0 | - | 32B | EXL2 | TabbyAPI | RTX 6000 | 38620MiB | 6/7 | 1 小时 2 分 8 秒 | 282/410 | 68.78% | 656716 | 175.98 | 92767 | 24.86 | ||
Qwen2.5-Coder-32B-Instruct (8.0bpw EXL2) | bartowski/Qwen2.5-Coder-32B-Instruct-exl2_8_0 | Qwen/Qwen2.5-Coder-0.5B-Instruct | 32B | EXL2 | TabbyAPI | RTX 6000 | 40036MiB | 7/7 | 34 分 56 秒 | 280/410 | 68.29% | 656716 | 312.66 | 91926 | 43.76 | ||
QwQ-32B-Preview (3.0bpw EXL2, max_tokens=8192) | bartowski/QwQ-32B-Preview-exl2_3_0 | Qwen/Qwen2.5-Coder-0.5B-Instruct | 32B | EXL2 | TabbyAPI | RTX 6000 | 22990MiB | 1/2 | 1h 15m 18s | 289/410 | 70.49% | 656716 | 145.23 | 269937 | 59.69 | ||
QwQ-32B-Preview (3.0bpw EXL2, max_tokens=8192) | bartowski/QwQ-32B-Preview-exl2_3_0 | Qwen/Qwen2.5-Coder-0.5B-Instruct | 32B | EXL2 | TabbyAPI | RTX 6000 | 22990MiB | 2/2 | 1h 19m 50s | 274/410 | 66.83% | 0/2, 0.00% | 656716 | 137.01 | 291818 | 60.88 | |
Mistral-Large-Instruct-2411 (123B, 3.0bpw EXL2) | MikeRoz/mistralai_Mistral-Large-Instruct-2411-3.0bpw-h6-exl2 | - | 123B | EXL2 | TabbyAPI | RTX 6000 | 47068MiB | 1/2 | 1 小时 26 分 26 秒 | 284/410 | 69.27% | 1/3, 33.33% | 696798 | 134.23 | 79925 | 15.40 | |
Mistral-Large-Instruct-2411 (123B, 3.0bpw EXL2) | MikeRoz/mistralai_Mistral-Large-Instruct-2411-3.0bpw-h6-exl2 | - | 123B | EXL2 | TabbyAPI | RTX 6000 | 47068MiB | 2/2 | 1 小时 26 分 10 秒 | 275/410 | 67.07% | 0/2, 0.00% | 696798 | 134.67 | 79778 | 15.42 | |
Mistral-Large-Instruct-2407 (123B, 2.75bpw EXL2) | turboderp/Mistral-Large-Instruct-2407-123B-exl2_2.75bpw | - | 123B | EXL2 | TabbyAPI | RTX 6000 | 45096MiB | 1/2 | 1 小时 8 分 8 秒 | 271/410 | 66.10% | < 70.24% | 696798 | 170.29 | 66670 | 16.29 | |
Mistral-Large-Instruct-2407 (123B, 2.75bpw EXL2) | turboderp/Mistral-Large-Instruct-2407-123B-exl2_2.75bpw | - | 123B | EXL2 | TabbyAPI | RTX 6000 | 45096MiB | 2/2 | 1 小时 10 分 38 秒 | 268/410 | 65.37% | < 70.24% | 1/3, 33.33% | 696798 | 164.23 | 69182 | 16.31 |
QwQ-32B-Preview (3.0bpw EXL2) | bartowski/QwQ-32B-Preview-exl2_3_0 | - | 32B | EXL2 | TabbyAPI | RTX 6000 | 21574MiB | 1/2 | 1h 5m 30s | 268/410 | 65.37% | 1/3, 33.33% | 656716 | 166.95 | 205218 | 52.17 | |
QwQ-32B-Preview (3.0bpw EXL2) | bartowski/QwQ-32B-Preview-exl2_3_0 | - | 32B | EXL2 | TabbyAPI | RTX 6000 | 21574MiB | 2/2 | 1h 8m 44s | 266/410 | 64.88% | 656716 | 159.10 | 215616 | 52.24 | ||
Mistral-Large-Instruct-2411 (123B, 2.75bpw EXL2) | wolfram/Mistral-Large-Instruct-2411-2.75bpw-h6-exl2 | - | 123B | EXL2 | TabbyAPI | RTX 6000 | 45096MiB | 1/2 | 1 小时 11 分 50 秒 | 267/410 | 65.12% | 1/4, 25.00% | 696798 | 161.53 | 70538 | 16.35 | |
Mistral-Large-Instruct-2411 (123B, 2.75bpw EXL2) | wolfram/Mistral-Large-Instruct-2411-2.75bpw-h6-exl2 | - | 123B | EXL2 | TabbyAPI | RTX 6000 | 45096MiB | 2/2 | 1 小时 13 分 50 秒 | 243/410 | 59.27% | 0/4, 0.00% | 696798 | 157.18 | 72718 | 16.40 | |
mistral-small-2409 (22B) | mistralai/Mistral-Small-Instruct-2409 | - | 22B | HF | Mistral | - | - | 1/2 | 25 分 3 秒 | 243/410 | 59.27% | > 53.66% | 1/4, 25.00% | 696798 | 462.38 | 73212 | 48.58 |
mistral-small-2409 (22B) | mistralai/Mistral-Small-Instruct-2409 | - | 22B | HF | Mistral | - | - | 2/2 | 20 分 45 秒 | 239/410 | 58.29% | > 53.66% | 1/4, 25.00% | 696798 | 558.10 | 76017 | 60.89 |
- 模型:模型名称(含相关参数和设置详情)
- HF 主模型名称:Hugging Face 上列出的被测模型的完整名称
- HF 草稿模型名称(推测解码):用于推测解码的草稿模型(如果适用)
- 大小:参数数量
- 格式:模型格式类型(HF、EXL2 等)
- API:服务提供商(TabbyAPI 表示本地部署)
- GPU:用于本次基准测试运行的显卡
- GPU 内存:分配给模型和配置的显存
- 运行:基准测试运行序列号
- 持续时间:基准测试总运行时间
- 总计:正确答案数量(决定排名!)
- %:正确答案百分比
- TIGER-Lab: TIGER-Lab(MMLU-Pro 的开发者)的 CS 基准测试结果与我的结果的比较
- 正确随机猜测:当 MMLU-Pro 无法明确识别模型的答案选项时,它会默认进行随机猜测,并报告这些随机猜测的数量及其准确性(高比例的随机猜测表明在遵循响应格式方面存在问题)
- 提示令牌数:输入文本的令牌计数
- 每秒令牌数:每秒处理的令牌数
- 完成令牌数:生成响应的令牌计数
- 每秒令牌数:每秒生成的令牌数
推测解码:为大型语言模型加速
推测解码是一种开创性的 LLM 加速技术,它遵循“先生成,后验证”的方法。此方法使用一个较小、较快的草稿模型进行初步令牌预测,然后由主模型验证这些预测。
该过程通过并行处理进行,其中草稿模型同时生成多个令牌预测。然后,主模型批量验证这些预测,与顺序令牌生成相比,显著缩短了处理时间。
这种创新方法可将文本生成速度提高高达 3 倍,同时保持输出质量。其有效性源于批量处理,即主模型一次评估多个预测,而不是按顺序处理单个令牌。
系统的性能很大程度上取决于预测的准确性。如果推测令牌的接受率过低,系统实际上可能会比传统处理更慢。为了获得最佳性能,草稿模型在架构上应与主模型相似,以便进行准确预测,同时足够小,可以快速运行并与主模型一起适合 VRAM。
将推测解码想象成人工智能的涡轮增压器——它显著提升了 LLM 的性能而不损害质量,为所有 LLM 应用创造了双赢局面。关键在于找到草稿模型大小和预测准确性之间的正确平衡——它需要足够轻量化以提供速度优势,同时与主模型保持足够的相似性以实现可靠的预测。
推测解码与 Qwen/QwQ
我成功地将 Qwen2.5-Coder-32B-Instruct (8.0bpw EXL2) 的速度从每秒 24.86 个令牌提高到 43.76 个令牌,方法是使用 Qwen2.5-Coder-0.5B-Instruct 作为其草稿模型。
将相同的 0.5B 草稿模型应用于 QwQ-32B-Preview (8.0bpw EXL2)——一个不同的模型——将其速度从每秒 26.60 个令牌提高到 46.29 个令牌。
不,推测解码并不能提高输出质量,只能提高速度
最初,我惊讶地看到 QwQ-32B-Preview (8.0bpw EXL2) 在没有推测解码的情况下仅达到 75% 的准确率,而在有推测解码的情况下达到 79.02%。这是魔法吗?不完全是——只是统计差异!推测解码只提高了处理速度,而非输出质量。当第二次基准测试运行在相同设置下仅产生 76.59% 的准确率时,这一点变得清晰起来。
真正的突破是调整基准测试软件的 max_tokens 参数。将其设置为 16384 持续提高了准确性——第一次达到 79.27%,第二次达到 79.02%。这些稳定的结果完全合乎情理:更高的令牌限制使得响应不会过早截断,从而能够更可靠地识别答案。
尽管基准测试可能会产生令人惊讶的结果,但在得出结论之前,请务必验证任何看似不可能的发现。解释可能是异常或技术错误。
速度怪兽
gpt-4o-2024-11-20 和 gemini-1.5-flash-002 在此基准测试中脱颖而出,成为明确的性能领导者,两者都达到了每秒 100 多个令牌的惊人速度。值得注意的是,gemini-1.5-flash-002 在两次测试运行中表现不一致——一次达到峰值速度,另一次下降到每秒 59.29 个令牌。
最新的 GPT-4o 版本 (2024-11-20) 揭示了一个引人入胜的权衡:虽然它带来了每秒超过 100 个令牌的显著速度提升——比其前身吞吐量翻了一番多——但性能的提升是有代价的。该模型似乎是量化或蒸馏变体,导致其基准分数低于之前的版本。
超越基准
基准测试结果向我们展示了 LLM 当前的能力,但它们只是拼图的一部分。不同的实际应用会得到不同的结果,因为基准测试无法捕捉这些模型实际性能的方方面面。
基准测试对于比较模型很有用,但它们只是一个起点。如果你发现一个看起来不错的模型,请亲自试用,看看它是否能满足你的需求。
我对 QwQ 及其后续发展感到非常兴奋。看起来这可能是有史以来第一批能够真正与大型云模型抗衡的本地模型。
我在实际工作项目中同时使用了 QwQ、Claude 3.5 Sonnet 和 GPT-4,在某些情况下 QwQ 的表现优于两者。我非常期待看到 QwQ 70B 版本——凭借更强大的基础和进一步的改进,QwQ 的独特方法可以让我们在自己的机器上获得 Sonnet 级别的性能。听起来好得不像真的?也许吧,但我们正在接近——而且可能,希望,比我们想象的更快!
结束语
对 MMLU-Pro 基准测试的深入探讨揭示了关于 LLM 当前状态的引人入胜的见解。从 Claude 3.5 Sonnet 和 Gemini Pro 的卓越性能,到 GPT-4o-2024-11-20 等速度怪兽,每个模型都发挥着各自的优势。
我们已经看到了推测解码等架构选择如何显著提高性能而不牺牲质量,以及仔细的参数调整(例如调整 max_tokens)如何显著影响结果。速度和准确性之间的权衡,尤其体现在最新的 GPT-4o 版本中,凸显了 LLM 开发中复杂的平衡行为。
但最令人兴奋的是,我们正在见证像 QwQ 这样强大的本地模型的崛起,它们可以与更大的模型竞争甚至超越它们。人工智能能力的这种民主化是未来可访问、高性能语言模型的一个有前景的趋势。
随着我们不断突破 LLM 可能性的边界,这些基准测试成为我们迈向更强大、更高效、更易于访问的 AI 系统征程中的宝贵路标。该领域的创新速度之快确保了今天看似令人印象深刻的事物,明天可能就会成为基线——而我,迫不及待地想看到接下来会发生什么。
Wolfram Ravenwolf 是一位德国 AI 工程师,也是一位国际活跃的顾问和著名研究员,尤其热爱本地语言模型。您可以在 X 和 Bluesky 上关注他,在 HF 和 Reddit 上阅读他之前的 LLM 测试和比较,在 Hugging Face 上查看他的模型,在 Ko-fi 上打赏他,或预订他的咨询服务。