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

Наша реализация работает наиболее эффективно на 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
],
),
)