Transformers documentation

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

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.2).
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