Buckets:
Квантование
Техники квантования снижают затраты памяти и вычислительных ресурсов, представляя веса и активации с помощью типов данных с пониженной точностью, таких как 8-битные целые числа (int8). Это позволяет загружать более крупные модели, которые в обычном режиме не помещаются в память, и ускорять инференс.
Узнайте, как квантовать модели, в руководстве Квантование.
PipelineQuantizationConfig[[diffusers.PipelineQuantizationConfig]]
diffusers.PipelineQuantizationConfig[[diffusers.PipelineQuantizationConfig]]
diffusers.PipelineQuantizationConfig(quant_backend: str = None, quant_kwargs: dict[str, str | float | int | dict] = None, components_to_quantize: list[str] | str | None = None, quant_mapping: dict[str, DiffQuantConfigMixin | 'TransformersQuantConfigMixin'] = None)
Параметры:
quant_backend (str) : Бэкенд квантования, который будет использоваться. При использовании этого параметра предполагается, что бэкенд доступен как для diffusers, так и для transformers.
quant_kwargs (dict) : Параметры для инициализации класса бэкенда квантования.
components_to_quantize (list) : Компоненты конвейера, подлежащие квантованию.
quant_mapping (dict) : Соответствие, определяющее спецификации квантования, используемые для компонентов конвейера. При использовании этого аргумента от пользователей не ожидается предоставление quant_backend, quant_kawargs и components_to_quantize.
Класс конфигурации, используемый при применении квантования на лету в from_pretrained().
BFLQuantizationConfig[[diffusers.BFLQuantizationConfig]]
diffusers.BFLQuantizationConfig[[diffusers.BFLQuantizationConfig]]
diffusers.BFLQuantizationConfig(compute_dtype: 'torch.dtype' | None = None)
Параметры:
compute_dtype (torch.dtype, по умолчанию torch.bfloat16) : Тип данных для активаций и неоквантованных слоев. На устройствах без слиянных ядер FP8 или NVFP4 веса деквантуются в этот тип данных на каждом проходе вперед.
Конфигурация для загрузки контрольных точек, квантованных с использованием схем Black Forest Labs fp8r и nvfp4.
Обе схемы читаются из контрольной точки через ~FromSingleFileMixin.from_single_file; квантование модели на лету не поддерживается. Линейный слой квантуется, если его вес сопровождается тензорами масштаба:
fp8r:weightимеет типfloat8_e4m3fnи форму[N, K], аweight_scale— это fp32-масштаб для каждой строки с формой[N].nvfp4:weightимеет типuint8и форму[N, K/2](два значения E2M1 на байт),weight_scale— это блочный масштабfloat8_e4m3fnформы[N, K/16], аweight_scale_2иinput_scale— скаляры fp32, хранящие глобальный масштаб весов и откалиброванный масштаб активаций (раскладка ModelOpt NVFP4).
BitsAndBytesConfig[[diffusers.BitsAndBytesConfig]]
diffusers.BitsAndBytesConfig[[diffusers.BitsAndBytesConfig]]
diffusers.BitsAndBytesConfig(load_in_8bit = False, load_in_4bit = False, llm_int8_threshold = 6.0, llm_int8_skip_modules = None, llm_int8_enable_fp32_cpu_offload = False, llm_int8_has_fp16_weight = False, bnb_4bit_compute_dtype = None, bnb_4bit_quant_type = 'fp4', bnb_4bit_use_double_quant = False, bnb_4bit_quant_storage = None, **kwargs)
Параметры:
load_in_8bit (bool, необязательный, по умолчанию False) : Этот флаг используется для включения 8-битного квантования с помощью LLM.int8().
load_in_4bit (bool, необязательный, по умолчанию False) : Этот флаг используется для включения 4-битного квантования путём замены слоёв Linear на слои FP4/NF4 из bitsandbytes.
llm_int8_threshold (float, optional, по умолчанию 6.0) : Это соответствует порогу выбросов для обнаружения выбросов, описанному в статье LLM.int8() : 8-bit Matrix Multiplication for Transformers at Scale: https://huggingface.co/papers/2208.07339 Любое значение скрытых состояний, превышающее этот порог, будет считаться выбросом, и операции с такими значениями будут выполняться в fp16. Значения обычно распределены нормально, то есть большинство значений находятся в диапазоне [-3.5, 3.5], но в больших моделях встречаются некоторые исключительные систематические выбросы, распределение которых сильно отличается. Эти выбросы часто находятся в интервале [-60, -6] или [6, 60]. Квантование Int8 хорошо работает для значений порядка ~5, но за пределами этого диапазона возникает значительное снижение производительности. Хорошим порогом по умолчанию является 6, но для более нестабильных моделей (маленькие модели, дообучение) может потребоваться более низкий порог.
llm_int8_skip_modules (list[str], необязательный) : Явный список модулей, которые мы не хотим конвертировать в 8 бит. Это полезно для таких моделей, как Jukebox, у которых несколько головок находятся в разных местах и не обязательно в последней позиции. Например, для моделей CausalLM последняя lm_head обычно сохраняется в исходном dtype.
llm_int8_enable_fp32_cpu_offload (bool, необязательный, по умолчанию False) : Этот флаг предназначен для продвинутых сценариев использования и пользователей, знакомых с данной функцией. Если вы хотите разделить модель на разные части и запустить некоторые из них в int8 на GPU, а другие — в fp32 на CPU, вы можете использовать этот флаг. Это полезно для выгрузки (offloading) больших моделей, таких как google/flan-t5-xxl. Обратите внимание, что операции int8 не будут выполняться на CPU.
llm_int8_has_fp16_weight (bool, необязательный, по умолчанию False) : Этот флаг запускает LLM.int8() с основными весами 16-битного формата. Это полезно для дообучения, так как веса не нужно конвертировать туда и обратно для обратного прохода.
bnb_4bit_compute_dtype (torch.dtype или str, необязательный, по умолчанию torch.float32) : Задаёт вычислительный тип, который может отличаться от типа входных данных. Например, входные данные могут быть fp32, но для ускорения вычислений можно задать bf16.
bnb_4bit_quant_type (str, необязательный, по умолчанию "fp4") : Этот параметр задаёт тип данных квантования в слоях bnb.nn.Linear4Bit. Доступны варианты FP4 и NF4, которые указываются с помощью fp4 или nf4.
bnb_4bit_use_double_quant (bool, необязательный, по умолчанию False) : Этот флаг используется для вложенной квантизации, при которой константы квантизации из первого прохода квантизации квантуются повторно.
bnb_4bit_quant_storage (torch.dtype или str, необязательный, по умолчанию torch.uint8) : Этот параметр задаёт тип хранилища для упаковки квантованных 4-битных параметров.
kwargs (dict[str, Any], необязательный) : Дополнительные параметры, из которых инициализируется объект конфигурации.
Это обёртка, содержащая все возможные атрибуты и функции, с которыми можно работать с моделью, загруженной с помощью bitsandbytes.
Это заменяет load_in_8bit или load_in_4bit, поэтому оба варианта взаимоисключающи.
В настоящее время поддерживаются только квантование LLM.int8(), FP4 и NF4. Если в bitsandbytes будут добавлены новые методы, то в этот класс будут добавлены соответствующие аргументы.
is_quantizable[[diffusers.BitsAndBytesConfig.is_quantizable]]
is_quantizable()
Возвращает True, если модель можно квантовать, иначе False.
post_init[[diffusers.BitsAndBytesConfig.post_init]]
post_init()
Проверка безопасности, что аргументы корректны — также заменяет некоторые аргументы типа NoneType их значениями по умолчанию.
quantization_method[[diffusers.BitsAndBytesConfig.quantization_method]]
quantization_method()
Этот метод возвращает метод квантования, использованный для модели. Если модель не поддерживает квантование, возвращается None.
to_diff_dict[[diffusers.BitsAndBytesConfig.to_diff_dict]]
to_diff_dict()
Возвращает: dict[str, Any]
Словарь всех атрибутов, из которых состоит этот экземпляр конфигурации,
Удаляет все атрибуты из config, соответствующие атрибутам конфигурации по умолчанию, для лучшей читаемости и сериализует в словарь Python.
GGUFQuantizationConfig[[diffusers.GGUFQuantizationConfig]]
diffusers.GGUFQuantizationConfig[[diffusers.GGUFQuantizationConfig]]
diffusers.GGUFQuantizationConfig(compute_dtype: 'torch.dtype' | None = None)
Параметры:
compute_dtype : (torch.dtype, по умолчанию torch.float32): задает вычислительный тип, который может отличаться от типа входных данных. Например, входные данные могут быть fp32, но для ускорения вычислений можно установить bf16.
Это класс конфигурации для методов квантования GGUF.
NunchakuLiteQuantizationConfig[[diffusers.NunchakuLiteQuantizationConfig]]
diffusers.NunchakuLiteQuantizationConfig[[diffusers.NunchakuLiteQuantizationConfig]]
diffusers.NunchakuLiteQuantizationConfig(compute_dtype: 'torch.dtype' | str | None = None, svdq_w4a4: dict[str, Any] | None = None, awq_w4a16: dict[str, Any] | None = None, **kwargs)
Параметры:
compute_dtype (torch.dtype, по умолчанию torch.bfloat16) : dtype, используемый во время выполнения для буферов с плавающей точкой в квантованных модулях.
svdq_w4a4 (dict, необязательный) : Явная целевая конфигурация SVDQ W4A4 с параметрами precision, group_size, rank и targets.
awq_w4a16 (dict, необязательный) : Явная целевая конфигурация AWQ W4A16 с параметрами precision, group_size и targets.
Конфигурация для загрузки контрольных точек Nunchaku Lite.
Поддержка Nunchaku Lite в Diffusers позволяет загружать предварительно квантованные контрольные точки. Чтобы создать совместимую контрольную точку, используйте diffuse-compressor, чтобы выбрать или адаптировать целевую конфигурацию для архитектуры модели, выполнить квантование и экспорт трансформера, а затем упаковать его в пайплайн Diffusers с компактным quantization_config, сохранённым в config.json.
Экспортированный state dict должен точно соответствовать архитектуре целевой модели Diffusers. Чекпоинты, квантованные с использованием объединённых QKV-проекций, не будут загружены в конфигурацию модели, ожидающую отдельные модули проекций Q, K и V.
Пример компактной конфигурации config.json:
{
"_class_name": "ErnieImageTransformer2DModel",
"quantization_config": {
"quant_method": "nunchaku_lite",
"compute_dtype": "bfloat16",
"svdq_w4a4": {
"precision": "nvfp4",
"group_size": 16,
"rank": 32,
"targets": ["layers.0.self_attention.to_q"]
},
"awq_w4a16": {
"precision": "int4",
"group_size": 64,
"targets": ["final_linear"]
}
}
}
QuantoConfig[[diffusers.QuantoConfig]]
diffusers.QuantoConfig[[diffusers.QuantoConfig]]
diffusers.QuantoConfig(weights_dtype: str = 'int8', modules_to_not_convert: list[str] | None = None, **kwargs)
Параметры:
weights_dtype (str, необязательный, по умолчанию "int8") : целевой тип данных для весов после квантования. Поддерживаемые значения: ("float8","int8","int4","int2")
Это обёртка, содержащая все возможные атрибуты и возможности, с которыми можно работать с моделью, загруженной с помощью quanto.
QuantoConfig устарела и будет удалена в версии 1.0.0. Рекомендуется перейти на один из других поддерживаемых бэкендов квантования, например BitsAndBytesConfig или TorchAoConfig.
modules_to_not_convert (list, необязательный, по умолчанию None): список модулей, которые не следует квантовать. Полезно для квантования моделей, которые явно требуют, чтобы некоторые модули оставались в исходной точности (например, энкодер Whisper, энкодер Llava, слои gate в Mixtral).
post_init[[diffusers.QuantoConfig.post_init]]
post_init()
Проверка безопасности: аргументы корректны
SDNQConfig[[diffusers.SDNQConfig]]
diffusers.SDNQConfig[[diffusers.SDNQConfig]]
diffusers.SDNQConfig(*args, **kwargs)
Параметры:
weights_dtype (str, необязательный, по умолчанию "int8") : целевой тип данных для весов после квантования, например "int8", "uint4", "float8_e4m3fn". См. sdnq.common.accepted_weight_dtypes для всех поддерживаемых значений.
group_size (int, optional, по умолчанию 0) : Сколько элементов тензора входят в одну группу квантования. Значение 0 автоматически выбирает размер группы на основе weights_dtype, а -1 отключает группировку и использует построчное квантование.
use_svd (bool, необязательный, по умолчанию False) : Нужно ли применять алгоритм SVDQuant поверх квантования SDNQ.
use_quantized_matmul (bool, необязательный, по умолчанию False) : Использовать ли квантованное INT8 / FP8 / FP16 матричное умножение на прямом проходе вместо BF16 / FP16.
modules_to_not_convert (list, необязательный, по умолчанию None) : Список модулей, которые нужно пропустить при квантовании.
kwargs (dict[str, Any], необязательный) : Дополнительные именованные аргументы, передаваемые в sdnq.SDNQConfig (например, quantized_matmul_dtype, svd_rank, use_hadamard, quant_conv, quant_embedding, modules_dtype_dict).
Класс конфигурации для SDNQ (SD.Next Quantization).
Библиотека sdnq предоставляет собственный конфиг и квантизатор, совместимые с diffusers; данный класс представляет собой тонкую фабрику, которая делегирует работу этим компонентам, чтобы чекпоинты с quant_method="sdnq" загружались нативно в diffusers. Все аргументы передаются в sdnq.SDNQConfig. Требуется библиотека sdnq: pip install sdnq.
Ссылка: https://github.com/Disty0/sdnq
TorchAoConfig[[diffusers.TorchAoConfig]]
diffusers.TorchAoConfig[[diffusers.TorchAoConfig]]
diffusers.TorchAoConfig(quant_type: 'AOBaseConfig', modules_to_not_convert: list[str] | None = None, **kwargs)
Параметры:
quant_type (AOBaseConfig) : экземпляр подкласса AOBaseConfig, определяющий тип квантования. См. документацию torchao для доступных классов конфигурации (например, Int4WeightOnlyConfig, Int8WeightOnlyConfig, Float8WeightOnlyConfig, Float8DynamicActivationFloat8WeightConfig и т. д.).
modules_to_not_convert (list[str], необязательный, по умолчанию None) : Список модулей, которые не следует квантовать. Полезно для квантования моделей, которые явно требуют, чтобы некоторые модули оставались в исходной точности.
Это класс конфигурации для методов квантования и разреженности torchao.
Пример:
from diffusers import FluxTransformer2DModel, TorchAoConfig
from torchao.quantization import Int8WeightOnlyConfig
quantization_config = TorchAoConfig(Int8WeightOnlyConfig())
transformer = FluxTransformer2DModel.from_pretrained(
"black-forest-labs/Flux.1-Dev",
subfolder="transformer",
quantization_config=quantization_config,
torch_dtype=torch.bfloat16,
)
from_dict[[diffusers.TorchAoConfig.from_dict]]
from_dict(config_dict, return_unused_kwargs = False, **kwargs)
Создание конфигурации из словаря.
get_apply_tensor_subclass[[diffusers.TorchAoConfig.get_apply_tensor_subclass]]
get_apply_tensor_subclass()
Создайте соответствующий метод квантования на основе конфигурации.
to_dict[[diffusers.TorchAoConfig.to_dict]]
to_dict()
Преобразование конфигурации в словарь.
DiffusersQuantizer[[diffusers.DiffusersQuantizer]]
diffusers.DiffusersQuantizer[[diffusers.DiffusersQuantizer]]
diffusers.DiffusersQuantizer(quantization_config: QuantizationConfigMixin, **kwargs)
Абстрактный класс квантизатора HuggingFace. На данный момент поддерживает квантизацию моделей HF diffusers для вывода и/или квантизации. Этот класс используется только в diffusers.models.modeling_utils.ModelMixin.from_pretrained и пока не может быть легко использован вне контекста этого метода.
Attributes quantization_config (diffusers.quantizers.quantization_config.QuantizationConfigMixin): Конфигурация квантования, определяющая параметры квантования модели, которую вы хотите квантовать. modules_to_not_convert (list[str], необязательно): Список имён модулей, которые не следует конвертировать при квантовании модели. required_packages (list[str], необязательно): Список необходимых pip-пакетов, которые нужно установить перед использованием квантизатора. requires_calibration (bool): Требует ли метод квантования калибровки модели перед её использованием.
adjust_max_memory[[diffusers.DiffusersQuantizer.adjust_max_memory]]
adjust_max_memory(max_memory: dict[str, int | str])
при необходимости дополнительного объема памяти для квантования отрегулируйте аргумент max_memory для infer_auto_device_map()
adjust_target_dtype[[diffusers.DiffusersQuantizer.adjust_target_dtype]]
adjust_target_dtype(torch_dtype: torch.dtype)
Параметры:
torch_dtype (torch.dtype, необязательный) : torch_dtype, используемый для вычисления device_map.
Переопределите этот метод, если вы хотите изменить переменную target_dtype, используемую в from_pretrained для вычисления device_map, в случае, если device_map является str. Например, для bitsandbytes мы принудительно устанавливаем target_dtype в torch.int8, а для 4-битного режима передаем пользовательский enum accelerate.CustomDtype.int4.
check_if_quantized_param[[diffusers.DiffusersQuantizer.check_if_quantized_param]]
check_if_quantized_param(model: ModelMixin, param_value: torch.Tensor, param_name: str, state_dict: dict[str, typing.Any], **kwargs)
проверяет, является ли загруженный компонент state_dict частью квантованного параметра + выполняет некоторую валидацию; определено только для методов квантования, требующих создания новых параметров для квантования.
check_quantized_param_shape[[diffusers.DiffusersQuantizer.check_quantized_param_shape]]
check_quantized_param_shape(*args, **kwargs)
проверяет, имеет ли квантованный параметр ожидаемую форму.
create_quantized_param[[diffusers.DiffusersQuantizer.create_quantized_param]]
create_quantized_param(*args, **kwargs)
забирает необходимые компоненты из state_dict и создаёт квантованный параметр.
dequantize[[diffusers.DiffusersQuantizer.dequantize]]
dequantize(model)
Возможно, деквантовать модель, чтобы получить исходную модель, с некоторой потерей точности / производительности. Обратите внимание, что не все схемы квантования поддерживают эту операцию.
get_cuda_warm_up_factor[[diffusers.DiffusersQuantizer.get_cuda_warm_up_factor]]
get_cuda_warm_up_factor()
Коэффициент, используемый в caching_allocator_warmup для определения количества байт, которые следует зарезервировать заранее для прогрева cuda. Коэффициент 2 означает, что мы выделяем все байты пустой модели (поскольку выделение происходит в fp16), коэффициент 4 означает, что мы выделяем половину памяти, занимаемой весами в пустой модели, и т. д.
get_special_dtypes_update[[diffusers.DiffusersQuantizer.get_special_dtypes_update]]
get_special_dtypes_update(model, torch_dtype: torch.dtype)
Параметры:
model (~diffusers.models.modeling_utils.ModelMixin) : модель для квантования
torch_dtype (torch.dtype) : dtype, переданный в метод from_pretrained.
возвращает dtypes для модулей, которые не квантованы — используется для вычисления device_map в случае, если в качестве device_map передаётся str. Метод использует modules_to_not_convert, которое изменяется в _process_model_before_weight_loading. У моделей diffusers пока нет атрибутов modules_to_not_convert, но это может измениться в будущем.
postprocess_model[[diffusers.DiffusersQuantizer.postprocess_model]]
postprocess_model(model: ModelMixin, **kwargs)
Параметры:
model (~diffusers.models.modeling_utils.ModelMixin) : модель для квантования
kwargs (dict, необязательный) : Ключевые аргументы, которые передаются вместе с _process_model_after_weight_loading.
Выполните постобработку модели после загрузки весов. Убедитесь, что вы переопределяете абстрактный метод _process_model_after_weight_loading.
preprocess_model[[diffusers.DiffusersQuantizer.preprocess_model]]
preprocess_model(model: ModelMixin, **kwargs)
Параметры:
model (~diffusers.models.modeling_utils.ModelMixin) : модель для квантования
kwargs (dict, необязательный) : Ключевые аргументы, которые передаются вместе с _process_model_before_weight_loading.
Установка атрибутов модели и/или преобразование модели до загрузки весов. На этом этапе модель должна быть инициализирована на meta-устройстве, поэтому вы можете свободно манипулировать каркасом модели, чтобы заменить модули на месте. Убедитесь, что вы переопределяете абстрактный метод _process_model_before_weight_loading.
update_device_map[[diffusers.DiffusersQuantizer.update_device_map]]
update_device_map(device_map: dict[str, typing.Any] | None)
Параметры:
device_map (dict | str, необязательный) : device_map, передаваемый через метод from_pretrained.
Переопределите этот метод, если вы хотите передать новое устройство map, чтобы переопределить существующее. Например, для bitsandbytes, поскольку accelerate является обязательным требованием, если device_map не передан, device_map устанавливается в `"auto"``
update_missing_keys[[diffusers.DiffusersQuantizer.update_missing_keys]]
update_missing_keys(model, missing_keys: list[str], prefix: str)
Параметры:
missing_keys (list[str], необязательный) : Список отсутствующих ключей в контрольной точке по сравнению со словарем состояний модели
Переопределите этот метод, если хотите изменить missing_keys.
update_torch_dtype[[diffusers.DiffusersQuantizer.update_torch_dtype]]
update_torch_dtype(torch_dtype: torch.dtype)
Параметры:
torch_dtype (torch.dtype) : входной dtype, передаваемый в from_pretrained
Некоторые методы квантования требуют явного задания dtype модели целевым dtype. Вам нужно переопределить этот метод, если вы хотите убедиться, что это поведение сохраняется
validate_environment[[diffusers.DiffusersQuantizer.validate_environment]]
validate_environment(*args, **kwargs)
Этот метод используется для потенциальной проверки конфликтов с аргументами, передаваемыми в from_pretrained. Его необходимо определить для всех будущих квантизаторов, интегрированных с diffusers. Если явная проверка не требуется, просто верните ничего.
Xet Storage Details
- Size:
- 36.3 kB
- Xet hash:
- fd97a5ffbc35096f1a4c015bf2f6b77b3561f1008b98c58e0b444d93572cc8e1
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.