# 四比六

[Four Over Six](https://github.com/mit-han-lab/fouroversix) 是一个用于执行快速且精确的 FP4 量化的库，特别适用于在 NVIDIA Blackwell GPU 上使用 NVFP4 格式。正如我们的[预印本](https://arxiv.org/abs/2512.02010)中所述，我们的方法会自适应地将 NVFP4 块缩放至 4 或 6，以减少每个块中接近最大值处的量化误差。

![Four Over Six visual explanation](https://github.com/mit-han-lab/fouroversix/raw/main/assets/four-over-six.png)

我们的实现在 NVIDIA Blackwell GPU 上运行效率最高。不过，您也可以在较旧的硬件甚至 CPU 上运行 Four Over Six，且无需对代码进行任何更改，因为在这些情况下，我们的框架会自动回退到一种使用 FP32 矩阵乘法进行仿真的实现方式。

要将模型量化为 NVFP4 4/6，您可以按以下方式加载模型：

```python
from transformers import AutoModelForCausalLM, FourOverSixConfig

model = AutoModelForCausalLM.from_pretrained(
    "Qwen/Qwen3-8B",
    device_map="auto",
    quantization_config=FourOverSixConfig(),
)
```

我们支持在 NVFP4 量化过程中常用的多种量化选项，包括随机 Hadamard 变换、2D 块缩放、转置输入和随机舍入，具体描述见我们的 [预印本](https://arxiv.org/abs/2512.02010)。这些选项可通过在上方传入的 `FourOverSixConfig` 中设置相应参数来启用。如需为个别层指定自定义量化选项，可设置 `module_config_overrides`；如需将某些层排除在量化之外，可设置 `modules_to_not_convert`，如下所示。

## 训练

我们的量化线性层包含反向传播实现，因此许多模型只需少量修改即可继续训练。请确保将 `keep_master_weights` 设置为 `True`，并根据需要排除某些层不进行量化（通常保持网络最后几层的高精度非常重要）：

```python
from transformers import AutoModelForCausalLM, FourOverSixConfig

model = AutoModelForCausalLM.from_pretrained(
    "Qwen/Qwen3-8B",
    device_map="auto",
    quantization_config=FourOverSixConfig(
        keep_master_weights=True,
        modules_to_not_convert=[
            "lm_head",
            "model.layers.34.self_attn.q_proj",
            "model.layers.34.self_attn.k_proj",
            "model.layers.34.self_attn.v_proj",
            # Add more layers here, e.g. self_attn.o_proj, MLP layers
        ],
    ),
)
```

