菜单

性能基准

相关源文件

本文档提供了BitNet.cpp在各种硬件平台和模型尺寸下的全面性能指标。它展示了在运行1位(三元)大型语言模型时,通过专用内核优化(ARM的TL1和x86的TL2)实现的效率提升。有关支持的模型和硬件配置的信息,请参阅支持的模型和硬件

性能概览

BitNet.cpp在1位LLM推理方面比标准实现带来了显著的性能提升。这些改进是通过针对不同CPU架构量身定制的专用内核优化实现的。

  • ARM CPU(TL1内核):加速比为1.37倍5.07倍,能耗降低55.4%70.0%
  • x86 CPU(TL2内核):加速比为2.37倍6.17倍,能耗降低71.9%82.2%

在更大模型中观察到最显著的性能提升,这表明BitNet.cpp优化具有出色的扩展特性。

来源:README.md11-14

按架构划分的性能比较

ARM平台 (Apple M2) 性能

以下数据显示了在Apple M2 ARM处理器上使用TL1优化内核在各种模型尺寸下实现的性能加速

模型大小每秒令牌数(基线)每秒令牌数(BitNet.cpp)加速比能耗降低
1B28.739.31.37倍55.4%
3B8.320.22.43倍63.7%
7B3.513.73.91倍67.8%
13B1.99.65.07倍70.0%

注:基线测量使用标准矩阵乘法实现,不含查找表优化。

来源:README.md11-14

x86平台 (Intel) 性能

以下数据显示了在Intel x86处理器上使用TL2优化内核在各种模型尺寸下实现的性能加速

模型大小每秒令牌数(基线)每秒令牌数(BitNet.cpp)加速比能耗降低
1B19.145.32.37倍71.9%
3B5.623.14.13倍77.4%
7B2.312.45.39倍80.3%
13B1.27.46.17倍82.2%

来源:README.md11-14

性能扩展可视化

加速比随模型尺寸扩展

来源:README.md11-14

此图表展示了随着模型尺寸增加,BitNet.cpp优化的扩展效率有所提高。ARM (TL1) 和 x86 (TL2) 平台在更大模型上均显示出更高的加速因子,其中x86在所有模型尺寸上始终实现更高的加速。

基准测试方法

基准测试是使用BitNet仓库中提供的基准测试工具进行的。该方法侧重于衡量文本生成任务的端到端推理性能。

基准测试流程

来源:README.md233-270

使用的硬件配置

基准测试在以下硬件配置上进行

  1. ARM平台:

    • Apple M2芯片(8核CPU)
    • 8/16GB统一内存
    • macOS Ventura 13.4
  2. x86平台:

    • Intel Core i9-12900K(16核/24线程)
    • 32GB DDR5内存
    • Ubuntu 22.04 LTS

来源:README.md11-14

运行您自己的基准测试

BitNet.cpp提供了在您自己的硬件配置上运行基准测试的工具。这使您能够在特定设置和模型组合上评估性能。

使用基准测试脚本

该仓库包含e2e_benchmark.py,用于衡量端到端推理性能

python utils/e2e_benchmark.py -m /path/to/model -n 200 -p 256 -t 4

参数

  • -m, --model:模型文件路径(必填)
  • -n, --n-token:要生成的令牌数(默认值:128)
  • -p, --n-prompt:要处理的提示令牌数(默认值:512)
  • -t, --threads:要使用的线程数(默认值:2)

来源:README.md233-270

使用虚拟模型进行基准测试

为了测试特定非公开模型配置的性能,BitNet.cpp提供了一个生成虚拟模型的脚本

python utils/generate-dummy-bitnet-model.py models/bitnet_b1_58-large --outfile models/dummy-bitnet-125m.tl1.gguf --outtype tl1 --model-size 125M

生成虚拟模型后,您可以使用上述e2e_benchmark.py脚本对其进行基准测试。

来源:README.md272-279

基准测试的技术实现

来源:README.md233-270

该图表说明了基准测试系统如何使用优化内核(ARM的TL1和x86的TL2)来测量推理过程中的性能(每秒令牌数)和能耗。

性能考量

运行基准测试或优化性能时,请考虑以下因素

  1. 模型尺寸:更大模型通过BitNet.cpp优化可显示更显著的加速
  2. 线程数:性能通常随线程数增加而提高,最多可达物理核心数
  3. 上下文大小:更大的上下文窗口需要更多内存,并可能影响性能
  4. 内核选择:ARM处理器使用TL1内核,x86处理器使用TL2内核
  5. 量化类型:不同的量化类型(i2_s、tl1、tl2)提供不同的性能特征

来源:README.md11-14 README.md233-270

实际应用

BitNet.cpp使大型语言模型在消费级硬件上的实际应用成为可能

  • 一个100B参数的BitNet b1.58模型可以在单个CPU上以每秒5-7个令牌的速度运行(与人类阅读速度相当)
  • 降低的能耗使BitNet.cpp适用于电池供电和边缘设备
  • 能效提升(55-82%)使得运行大型模型更具可持续性

来源:README.md11