基准测试
为了进行快速便捷的检查,我们使用了一个简单的Python脚本,可以在这里找到,来评估我们的ktransformers项目的精确度。为了进行此评估,我们使用了相同的数据集,该数据集以一致的方式进行了洗牌,并限制在前1,000个数据点,以测试我们的实现跨越各种CPU内核、MLA内核和量化格式。
我们选择了DeepSeek-V3模型的bf16、int8和q4km版本进行此次测试。MMLU数据集可以在这里找到(我们选择了所有数据集,并使用固定的随机种子进行了洗牌)。
!!! 然而,我们跳过了少量样本部分,只选择了前1000个数据点进行快速检查。 请注意,这种方法可能导致结果与DeepSeek-V3的技术报告不一致。R1的测试以及更多测试正在进行中。
为了验证我们的结果,我们选择了 云服务平台 作为基线。所有测试均使用相同的脚本和数据集进行,这使我们能够对我们项目的精确度进行初步评估。
我们设置了参数 temperature=0.6,为了简化测试过程,我们跳过了少量样本部分,并使用了以下提示: 这是一个单项选择题。通过回复 A、B、C、D 来回答问题。其他答案不被接受。只有字母。 \n问题: {question}\nA. {option_a}\nB. {option_b}\nC. {option_c}\nD. {option_d}\n答案: '。有关更多详细信息,请参阅 script。
考虑到我们只测试了1,000个案例,这仅提供了初步判断,因此结果中的一些波动是合理的。我们选择了所有数据集并使用固定的随机种子对其进行了洗牌,以确保一致性。
一些细节
-
DeepSeek-V3 的 bf16 模型可以在 这里 找到(您可以通过 llama.cpp 将其转换为 gguf)。q4km 模型可以在 这里 找到。
-
优化的 YAML 文件位于 这里。对于 GEMM 内核,您可以将
KLinearMarlin更改为KLinearTorch。 -
要将MLA内核从Triton切换到Torch,您可以检查并修改这个文件,具体通过使用
forward_windows方法。 -
在尝试进行bf16测试(包括CPU权重和GPU权重)时,您可能会遇到由于较旧版本的g++和as引起的问题,特别是在使用Ubuntu 20或更早版本时。为了提供更顺畅的体验并使您能够重现我们的结果,我们提供了一个开发容器。该容器提供了为此目的量身定制的预配置环境。然而,请注意,容器中未安装ktrans软件包。因此,您可能仍需手动安装某些软件包以确保一切顺利运行。
- 您可以在
devcontainer/devcontainer.json中配置模型挂载目录,检查"mouts":配置。
- 您可以在
结果表
| 数据集 | CPU 权重格式 | CPU 核心 | GPU 权重格式 | GEMM 核心 | MLA 核心 | Siliconflow | Ktrans 点 |
| MMLU (洗牌 1k) | |||||||
| 1 | bf16 | cpuinfer | bf16 | torch | torch | 81.6 | 81.9 |
| 2 | q8_0 | cpuinfer | bf16 | torch | torch | 81.6 | 83.1 |
| 3 | q4km | cpuinfer | bf16 | torch | triton | 81.6 | 81.4 |
| 4 | q4km | cpuinfer | q4km->marlin 8 | marlin | triton | 81.6 | 81.1 |
| 5 | q4km | cpuinfer | q4km->marlin 4 | marlin | triton | 81.6 | 81 |
| 6 | q4km | cpuinfer | fp8 | fp8gemm | triton | 81.6 | 81.5 |
| MMLU-pro | |||||||
| 1 | q4km | cpuinfer | fp8 | fp8gemm | triton | 57.7 | 57.6 |
| 2 | q4km | cpuinfer | q4km->marlin 4 | marlin | triton | 57.7 | 57.5 |
| 人类评估 | 待定 | 待定 | 待定 | 待定 | 待定 | 待定 | 待定 |
| GSM8K | 待定 | 待定 | 待定 | 待定 | 待定 | 待定 | 待定 |
每个案例的详细信息如下:
默认情况下,MLA内核在Linux中使用triton,在Windows中使用torch。但我们需要在Linux中测试torch,因此我们手动修改文件。只需删除所有if分支并强制使用self.forward_windows
- MMLU test
- v3-chat_yaml 将所有的
KLinearMarlin替换为KLinearTorch(只需找到此文件中的所有使用情况)。源权重来自 那里(你需要使用 llama.cpp 将其转换为 gguf) - v3-chat_yaml。您需要修改代码以单独加载CPU的专家权重。我们在这些地方留了注释:1、2、3(注意在3中,将路径更改为您本地权重文件的路径)。q8_0的权重文件在这里
- v3-chat_yaml。您需要修改代码以单独加载cpu的专家权重。我们在这些地方留下了注释:1,2,3(注意在3中,将路径更改为您的本地权重文件路径)。q4km的权重文件在这里
- v3-chat_yaml。您无需更改源代码,因为它们都使用q4km。但请注意yaml文件这里和这里,在这些行下方,您需要添加
num_bits: 8(换句话说:将此kwargs添加到所有使用KLinearMarlin的地方)。q4km的权重文件在这里 - v3-chat_yaml. 无需更改yaml,只需使用默认值。q4km的权重文件在这里
- 您应该查看文档以了解如何测试此案例。这是一个混合张量案例。
- v3-chat_yaml 将所有的
- MMLU-pro test
- 您应该查看文档以了解如何测试此案例。这是一个混合张量案例。
- v3-chat_yaml. 无需更改yaml,只需使用默认值。q4km的权重文件在这里