基准测试

为了进行快速便捷的检查,我们使用了一个简单的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)
1bf16cpuinferbf16torchtorch81.681.9
2q8_0cpuinferbf16torchtorch81.683.1
3q4kmcpuinferbf16torchtriton81.681.4
4q4kmcpuinferq4km->marlin 8marlintriton81.681.1
5q4kmcpuinferq4km->marlin 4marlintriton81.681
6q4kmcpuinferfp8fp8gemmtriton81.681.5
MMLU-pro
1q4kmcpuinferfp8fp8gemmtriton57.757.6
2q4kmcpuinferq4km->marlin 4marlintriton57.757.5
人类评估待定待定待定待定待定待定待定
GSM8K待定待定待定待定待定待定待定

每个案例的详细信息如下

默认情况下,MLA内核在Linux中使用triton,在Windows中使用torch。但我们需要在Linux中测试torch,因此我们手动修改文件。只需删除所有if分支并强制使用self.forward_windows

  • MMLU test
    1. v3-chat_yaml 将所有的 KLinearMarlin 替换为 KLinearTorch(只需找到此文件中的所有使用情况)。源权重来自 那里(你需要使用 llama.cpp 将其转换为 gguf)
    2. v3-chat_yaml。您需要修改代码以单独加载CPU的专家权重。我们在这些地方留了注释:123(注意在3中,将路径更改为您本地权重文件的路径)。q8_0的权重文件在这里
    3. v3-chat_yaml。您需要修改代码以单独加载cpu的专家权重。我们在这些地方留下了注释:123(注意在3中,将路径更改为您的本地权重文件路径)。q4km的权重文件在这里
    4. v3-chat_yaml。您无需更改源代码,因为它们都使用q4km。但请注意yaml文件这里这里,在这些行下方,您需要添加num_bits: 8(换句话说:将此kwargs添加到所有使用KLinearMarlin的地方)。q4km的权重文件在这里
    5. v3-chat_yaml. 无需更改yaml,只需使用默认值。q4km的权重文件在这里
    6. 您应该查看文档以了解如何测试此案例。这是一个混合张量案例。
  • MMLU-pro test
    1. 您应该查看文档以了解如何测试此案例。这是一个混合张量案例。
    2. v3-chat_yaml. 无需更改yaml,只需使用默认值。q4km的权重文件在这里