跳到内容

使用 FP8 量化 Mixtral-8x7B-Instruct-v0.1 模型

此目录包含使用静态每张量 FP8 量化方案量化 LLM 的示例脚本。

安装

要开始,请执行以下命令安装必要的依赖项

git clone https://github.com/vllm-project/llm-compressor.git
cd llm-compressor
pip install -e .

快速入门

提供的示例脚本演示了一个端到端的量化算法应用过程

python3 mixtral_example.py

创建量化的 MoE 模型

本示例利用 llm-compressorcompressed-tensors 来创建 FP8 量化的 Mixtral-8x7B-Instruct-v0.1 模型。该模型使用 ultrachat_200k 数据集进行校准和训练。

您可以按照下面的详细步骤进行操作,或者直接运行示例脚本:

python mixtral_example.py

步骤 1:选择模型、数据集和配方

在此步骤中,您将选择一个基础模型用于量化、一个用于校准的数据集以及一个量化配方。

  • 模型:可以从本地目录引用,也可以从 Hugging Face Hub 检索。
  • 数据集:也可以来自本地目录或 Hugging Face Hub。
  • 配方:这些是 YAML 文件或 Python 修改器对象,它们描述了模型在训练期间或训练后应如何进行优化。在此示例中,我们使用一个 QuantizationModifier 对象,并将方案设置为 FP8
from llmcompressor.modifiers.quantization import QuantizationModifier

recipe = QuantizationModifier(scheme="FP8", targets="Linear", ignore=["lm_head", "re:.*block_sparse_moe.gate"])

注意:.*block_sparse_moe.gate 层量化效果不佳,因此将被忽略!

步骤 2:使用 Oneshot 进行量化

oneshot 方法将选定的配方应用于您的模型和数据集,而无需进行任何微调。模型将被稀疏化并保存到 Mixtral-8x7B-Instruct-v0.1-FP8

from llmcompressor import oneshot

output_dir = "Mixtral-8x7B-Instruct-v0.1-FP8"

oneshot(
    model=model,
    dataset=dataset,
    recipe=recipe,
    save_compressed=True,
    output_dir=output_dir,
    max_seq_length=2048,
    num_calibration_samples=512,
)

自定义量化

注意:截至目前 (vllm==0.6.1),vLLM 只支持每张量量化。

该存储库通过配方支持多种量化技术。支持的策略包括 tensorgroupchannel 量化。

在上例中,量化是通过 FP8 方案指定的。对于其他预设方案,请参阅 compressed-tensors 库中的 量化方案

也可以使用 config_groups 指定自定义方案。

# Example of defining a custom quantization scheme

from llmcompressor.modifiers.quantization.gptq import GPTQModifier

config_groups = {
    "group_0": {
        "targets": ["Linear"],
        "input_activations": None,
        "output_activations": None,
        "weights": {
            "num_bits": 8,
            "type": "int",
            "symmetric": True,
            "strategy": "group",
            "group_size": 128, 
        }
    }
}

recipe = GPTQModifier(config_groups=config_groups)