Transformers documentation

Четыре из шести

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Четыре из шести

Four Over Six — это библиотека для быстрого и точного квантования FP4, в частности с использованием формата NVFP4 на GPU NVIDIA Blackwell. Наш метод адаптивно масштабирует блоки NVFP4 до 4 или 6, чтобы снизить ошибку квантования для значений, близких к максимальным в каждом блоке, как описано в нашей препринт-статье.

Four Over Six visual explanation

Наша реализация работает наиболее эффективно на GPU NVIDIA Blackwell. Однако вы можете запускать Four Over Six на более старом оборудовании, а также на CPU, без каких-либо изменений в коде, поскольку в этих случаях наш фреймворк автоматически переключается на реализацию, выполняющую симуляцию с использованием матричного умножения в формате FP32.

Чтобы квантовать модель в NVFP4 с 4/6, вы можете загрузить модель следующим образом:

from transformers import AutoModelForCausalLM, FourOverSixConfig

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

Мы поддерживаем множество различных вариантов квантования, которые часто используются при NVFP4-квантовании, включая случайное преобразование Хадамар, 2D-блочное масштабирование, транспонированные входные данные и стохастическое округление, как описано в нашей препринт-статье. Их можно использовать, задав соответствующий параметр в FourOverSixConfig, переданном выше. Для отдельных слоёв можно задать индивидуальные параметры квантования, установив module_config_overrides, либо исключить их из квантования, установив modules_to_not_convert, как показано ниже.

Обучение

Наша квантованная линейная функция содержит реализацию обратного прохода, поэтому многие модели можно продолжать обучать с небольшими изменениями. Убедитесь, что параметр keep_master_weights установлен в значение True, и при необходимости исключайте слои из квантования (часто важно сохранять последние несколько слоёв сети в высокой точности):

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
        ],
    ),
)
Update on GitHub