Transformers documentation
FP8 с высокой точностью
FP8 с высокой точностью
Квантование FP8 с высокой детализацией квантует веса и активации до fp8.
- Веса квантуются до 8 бит для каждого 2D-блока (
weight_block_size=(128, 128)). - Активации квантуются до 8 бит для каждой группы на токен. Значение группы совпадает с весами во входном канале (по умолчанию 128).
Квантование FP8 обеспечивает поддержку DeepSeek-V3 и DeepSeek-R1.

Вам нужен GPU с Compute Capability>=9 (H100), а также установка версии PyTorch, совместимой с версией CUDA вашего GPU.
Установите Accelerate и обновите PyTorch до последней версии.
pip install --upgrade accelerate torch
Создайте класс FineGrainedFP8Config и передайте его в from_pretrained() для квантования. По умолчанию веса загружаются в полной точности (torch.float32), независимо от фактического типа данных, в котором они хранятся. Установите dtype="auto", чтобы загружать веса в тип данных, определённый в файле config.json модели, и автоматически использовать наиболее оптимальный по памяти тип данных.
from transformers import FineGrainedFP8Config, AutoModelForCausalLM, AutoTokenizer
model_name = "meta-llama/Meta-Llama-3-8B"
quantization_config = FineGrainedFP8Config()
quantized_model = AutoModelForCausalLM.from_pretrained(model_name, dtype="auto", device_map="auto", quantization_config=quantization_config)
tokenizer = AutoTokenizer.from_pretrained(model_name)
input_text = "What are we having for dinner?"
input_ids = tokenizer(input_text, return_tensors="pt").to(quantized_model.device.type)
output = quantized_model.generate(**input_ids, max_new_tokens=10)
print(tokenizer.decode(output[0], skip_special_tokens=True))Используйте save_pretrained() для сохранения квантованной модели и загрузите её с помощью from_pretrained().
quant_path = "/path/to/save/quantized/model"
quantized_model.save_pretrained(quant_path)
model = AutoModelForCausalLM.from_pretrained(quant_path, device_map="auto")Быстрый путь DeepGEMM
На GPU Hopper (SM90+) и Blackwell (SM100+) каждый FP8-линейный слой автоматически использует ядра DeepGEMM из kernels-community/deep-gemm, если заданы weight_block_size=(128, 128) и activation_scheme="dynamic". DeepGEMM работает в 3–6 раз быстрее, чем резервный вариант на Triton. Для включения этой возможности установите или обновите пакет kernels.
pip install -U kernels
DeepGEMM выполняет JIT-компиляцию своих ядер с помощью системного nvcc, поэтому необходимо установить полный CUDA toolkit. Установка только для времени выполнения (библиотеки CUDA без nvcc) не будет работать. Минимальная версия toolkit зависит от оборудования: 12.3 или новее для Hopper (SM90), 12.9 или новее для Blackwell (SM100).
Transformers находит набор инструментов, последовательно проверяя CUDA_HOME, затем CUDA_PATH, затем nvcc в переменной PATH, а затем /usr/local/cuda. Если nvcc не обнаружен, установите CUDA_HOME на корневой каталог набора инструментов.
Если ядро не удаётся загрузить (отсутствует kernels, неподдерживаемая GPU, отсутствует CUDA toolkit или nvcc старше требуемой версии), Transformers один раз записывает предупреждение в лог и переключается на ядро Triton finegrained-fp8. Статическая квантизация активаций всегда выполняется по пути Triton.
Чтобы принудительно использовать резервный вариант Triton, даже если DeepGEMM доступен, установите TRANSFORMERS_DISABLE_DEEPGEMM_LINEAR=1. Это влияет только на диспетчеризацию FP8-линейных слоёв и не затрагивает бэкенд экспертов "deepgemm", который переключается с помощью set_experts_implementation().
Для экспертов MoE путь DeepGEMM включается явно. Передайте experts_implementation="deepgemm" (или "deepgemm_megamoe" на Blackwell) при загрузке, чтобы маршрутизировать матричные умножения экспертов через DeepGEMM. Полный список вариантов описан в руководстве Бэкенды для экспертов.
Формат масштаба UE8M0
Чекпоинты в стиле DeepSeek V4 хранят масштабы весов FP8 в упакованном формате float8_e8m0fnu, а не в float32. Эти чекпоинты предварительно квантованы и содержат в конфигурации квантования параметр scale_fmt="ue8m0". Ядра DeepGEMM и Triton читают масштабы UE8M0, поэтому такие чекпоинты работают на обоих путях.
На Blackwell (SM100+) ядра DeepGEMM для экспертов поддерживают только масштабы UE8M0. Чекпоинт с обычными масштабами float32 (scale_fmt="float") вызывает ValueError. Используйте чекпоинт с scale_fmt="ue8m0" или запускайте эксперты с grouped_mm или batched_mm, которые напрямую поддерживают масштабы float32. Hopper (SM90+) поддерживает масштабы float32 в пути DeepGEMM без преобразования. См. руководство Бэкенды экспертов для вариантов бэкендов экспертов.