现状

目前在 crossing 中支持两大类型的评测,一类是基于 lm-evaluation-harness prefill-like task,比如 MMLU 等测试;第二类是基于 bigcode-evaluation-harness decode-like task,比如 humaneval 等测试。

目前的测试需求主要是两种,一种是对齐 crossing 在 fp16 下和 huggingface transformers 的精度,确保框架推理的正确性;第二种需求是评估各种量化方法对模型的影响。对于第一种需求,采用目前的测试方案已经可以满足要求,但是对于第二种需求,目前存在的问题是 MMLU 在大多情况都不能准确反映量化模型的掉点情况,而 humaneval 的评估维度是代码,对于非 code 模型评估不准确,而且对于模型的其他能力评估是缺失的。

除了评测指标之外,对于量化模型还需要评测更多的信息,比如 lm_head 的量化对模型精度的损失,各种 size 的模型对低 bit 量化的容忍度等等。最后还希望整个评估流程能够像 llm-inference-benchmark 一样实现自动化,减轻人工 cost。

评估指标选择

目前市面上的 eval framework 非常多,而且不断有新的 eval task 出现,我们的需求不是去覆盖市面上的所有 eval tasks,这个本身也不现实,而且没有意义。

我们的目标是希望找到一个最小 eval task 集合,使得他能够覆盖 llm 能力的各个维度,同时尽可能小可以帮助我们更快地跑出 eval 的结果。

从大的方面来总结,llm 的能力可以分为下面几个方面:

  1. 模型学到的知识;
  2. 模型的推理能力;
  3. 模型的代码能力;
  4. 模型的数学能力;

需要对每种能力都找到 1-2 个 eval task,这样能比较全面的判断模型在量化前后的能力水平。

通过调研发现 openai 最近 release simple-evals,其中包含了下面 6 个 task:

这 6 个 task 能比较好的测试到上面提到的模型的能力,MMLU 能测试模型的知识,DROP 测试模型的 reasoning,HumanEval 测试模型的代码能力,剩下 MATH,GPQA 和 MGSM 测试模型的数学以及本科水平的解决问题能力。

后续评估 TODO

后续的评估主要分成三个 stage:

  • 第一个 stage 是完成 simple-eval 在 crossing 中的集成和自动化流程;
  • 第二个 stage 是完成社区各种量化模型的评测,目前 crossing 只支持 GPTQ 格式的模型 load,还需要支持 AWQ 的格式 load,以及测试 70B 规模往上的模型在各种量化方案的性能情况;
  • 第三个 stage 是测试社区不支持的量化模型的评测,比如 FP8 和 W8A8 等方案;