# 4 over 6

[Four Over Six](https://github.com/mit-han-lab/fouroversix)は、NVIDIA Blackwell GPU上でNVFP4形式を用いた高速かつ高精度なFP4量子化を実行するためのライブラリです。当社の手法では、各ブロック内のほぼ最大値における量子化誤差を低減するために、NVFP4ブロックを4または6に適応的にスケーリングします。詳細は[プレプリント](https://arxiv.org/abs/2512.02010)に記載しています。

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

当社の実装は、NVIDIA Blackwell GPU上で最も効率的に動作します。ただし、Four Over Sixは古いハードウェアやCPUでも、コードの変更なしで実行できます。これらの場合、当社のフレームワークはFP32行列積によるシミュレーションを実行する実装に自動的にフォールバックします。

4/6でモデルをNVFP4に量子化するには、次のようにモデルを読み込むことができます。

```python
from transformers import AutoModelForCausalLM, FourOverSixConfig

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

NVFP4量子化で一般的に使用される多くの量子化オプションをサポートしています。これには、[プレプリント](https://arxiv.org/abs/2512.02010)で説明されているランダムハダマード変換、2Dブロックスケーリング、転置された入力、および確率的丸めが含まれます。これらのオプションは、上記で渡した`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
        ],
    ),
)
```

