Transformers documentation
Экспортеры
Экспортеры
Новые backends экспорта можно добавить в Transformers, создав подкласс HfExporter.
Узнайте, как использовать встроенные экспортеры, в руководстве Exporters.
AutoHfExporter
Класс экспортера Auto-HF, который автоматически создаёт экземпляр правильного HfExporter на основе переданного ExportConfig.
Загрузите экземпляр экспортера из предобученной модели/чекпоинта, который содержит конфигурацию экспорта.
Пока не реализовано — заглушка для первого класса «рецепт экспорта».
Идея: владельцы моделей публикуют export_config.json (или поле export_config в config.json) вместе со своими весами на Hub. Этот файл фиксирует настройки, которые владелец уже проверил для своей архитектуры: целевой формат (dynamo / onnx / executorch), точные спецификации динамических форм (например, text_ids динамические до 4096, тайлы изображений фиксированные на 448, batch=1 для edge-развёртывания), флаг strict, opset ONNX, раскладка prefill и decode, выбор бэкенда ExecuTorch, а также любой другой параметр, который сегодня существует как «устное знание» в README или в частном ноутбуке.
Потребители получают экспорт, проверенный владельцем, в одном вызове:
exporter = AutoHfExporter.from_pretrained("org/model-name")
program = exporter.export(model, inputs)Композиция с реестром [register_export_input_preparer]: владелец предоставляет спецификацию формы через export_config.json, а transformers обеспечивает вычисления, зависящие от данных (cu_seqlens, идентификаторы позиций для vision, индексы окон, …) для данной архитектуры. Вместе они покрывают две сложные части экспорта новых моделей — знание правильного контракта форм и подготовку правильных входных данных — так что пользователи на нижних уровнях не выводят ни то, ни другое с нуля (и не ломают работу в продакшене, если ошибаются).
Возвращает True, если переданный словарь описывает export_format, для которого зарегистрированы и класс конфигурации, и класс экспортера. Выводит предупреждение с рекомендациями по устранению проблемы, если формат полностью отсутствует, неизвестен или зарегистрирован только частично.
AutoExportConfig
Класс конфигурации экспорта Auto-HF, который автоматически выбирает правильную конфигурацию экспорта на основе конфигурации, сохранённой в словаре.
HfExporter
Абстрактный базовый класс для всех экспортеров Transformers.
Создайте подкласс и реализуйте ~HfExporter.export, чтобы добавить новый backend экспорта.
экспорт
< source >( model: PreTrainedModelsample_inputs: MutableMapping[str, torch.Tensor | Cache]config: ExportConfigMixin )
Параметры
- model (PreTrainedModel) — Модель для экспорта.
- sample_inputs (
dict[str, torch.Tensor | Cache]) — Forward kwargs — то, что вы передаёте вmodel(**sample_inputs). Эти значения используются непосредственно в качестве примеров входных данных во время трассировки. Для экспорта авто-регрессивного шага декодирования это означает, что вам необходимо включитьpast_key_values,cache_positionи т. д. Если у вас есть только входные данные в стиле генерации, используйте вместо этого~HfExporter.export_for_generation— он запускаетmodel.generateза вас и экспортирует каждый этап. - config (
ExportConfigMixin) — Конфигурация, специфичная для бэкенда.
Экспортируйте модель и верните объект программы, специфичный для конкретного бэкенда.
export_for_generation
< source >( model: PreTrainedModelsample_inputs: MutableMapping[str, torch.Tensor | Cache]config: ExportConfigMixin | dict[str, ExportConfigMixin]generation_config: GenerationConfig | None = Nonemulti_token_decode: bool = False ) → dict[str, Any]
Параметры
- model (PreTrainedModel) —
Генеративная модель для экспорта. Должна поддерживать
model.generate(**sample_inputs). - sample_inputs (
dict[str, torch.Tensor | Cache]) — Generate kwargs — аргументы, которые вы передаёте вmodel.generate(**sample_inputs)(обычноinput_ids+attention_mask, а также входные данные других модальностей, напримерpixel_values/input_featuresдля мультимодальных моделей). Forward kwargs для каждого этапа захватываются внутренне. - config (
ExportConfigMixinилиdict[str, ExportConfigMixin]) — Конфигурация, специфичная для бэкенда. Передайте одну конфигурацию, чтобы применить её ко всем компонентам, илиdictс ключами по имени компонента (например,"image_encoder","language_model","lm_head","decode"), чтобы переопределить настройки для каждого компонента — все имена компонентов должны присутствовать в словаре. - generation_config (GenerationConfig, optional) —
Передаётся в вызов
generate()(по умолчанию используется собственный конфиг модели). Передайте объект сcache_implementation="static", чтобы экспортировать модель с фиксированным размеромStaticCache. - multi_token_decode (
bool, необязательный, по умолчаниюFalse) — определяет, обрабатывает ли компонентdecodeнесколько токенов запроса за один раз — динамическая ось запроса (prefill при пустом кэше, продолжение из прошлого в противном случае) — или классический пошаговый режим с одним токеном (см. decompose_for_generation()). Остаётся динамической только при экспорте с динамической формой (config.dynamic=True).
Возвращает
dict[str, Any]
{component_name: backend_specific_artifact} — те же ключи, что и в
decompose_for_generation(). Значения — это то, что возвращает
~HfExporter.export для конкретного бэкенда (ExportedProgram,
ONNXProgram, ExecutorchProgramManager).
Разложите генеративную модель и экспортируйте каждый компонент независимо.
Thin wrapper around decompose_for_generation() that calls ~HfExporter.export on every returned (submodel, forward_inputs) pair. If you need
the intermediate (submodel, forward_inputs) pairs (for verification, custom inputs,
skipping a stage, …), call decompose_for_generation() directly.
Проверьте, установлены ли required_packages, и предупредите о расхождении версий с tested_versions.
DynamoExporter
Экспортер, который преобразует PreTrainedModel в ExportedProgram.
Пример:
>>> from transformers.exporters.exporter_dynamo import DynamoExporter, DynamoConfig
>>> exporter = DynamoExporter()
>>> exported = exporter.export(model, inputs, config=DynamoConfig(dynamic=True))
>>> outputs = exported.module()(**inputs)экспорт
< source >( model: PreTrainedModelsample_inputs: MutableMapping[str, Any]config: DynamoConfig | dict[str, Any] )
OnnxExporter
Экспортер, преобразующий PreTrainedModel в ONNX ONNXProgram.
Пример:
>>> from transformers.exporters.exporter_onnx import OnnxExporter, OnnxConfig
>>> exporter = OnnxExporter()
>>> onnx_program = exporter.export(model, inputs, config=OnnxConfig(dynamic=True))
>>> outputs = onnx_program(**inputs) # run in-memory
>>> exporter.export(model, inputs, config=OnnxConfig(output_path="model.onnx")) # save to diskэкспорт
< source >( model: PreTrainedModelsample_inputs: MutableMapping[str, Any]config: OnnxConfig | dict[str, Any] )
ExecutorchExporter
Экспортер, который преобразует PreTrainedModel в ExecutorchProgramManager ExecuTorch.
Пример:
>>> from transformers.exporters.exporter_executorch import ExecutorchExporter, ExecutorchConfig
>>> exporter = ExecutorchExporter()
>>> et_program = exporter.export(model, inputs, config=ExecutorchConfig(backend="xnnpack"))
>>> et_program.write_to_file("model.pte")экспорт
< source >( model: PreTrainedModelsample_inputs: MutableMapping[str, Any]config: ExecutorchConfig | dict[str, Any] )
Экспортируйте модель в ExecuTorch, применяя подготовку бэкенда и патчи torch op.
DynamoConfig
класс transformers.exporters.DynamoConfig
< source >( export_format: ExportFormat = <ExportFormat.DYNAMO: 'dynamo'>dynamic: bool = Falsestrict: bool = Falsedynamic_shapes: dict[str, Any] | None = Noneprefer_deferred_runtime_asserts_over_guards: bool = Falsequantizer: ExportQuantizer | None = None )
Параметры
- dynamic (bool, optional, по умолчанию False) — Экспортировать ли модель с динамическими (символьными) формами. Если True и dynamic_shapes не задано, все размеры тензоров автоматически устанавливаются в Dim.AUTO.
- strict (bool, необязательный, по умолчанию False) — Определяет, следует ли включить строгий режим в torch.export. Выполняет полную символьную трассировку и обнаруживает больше ошибок, но работает медленнее и с большей вероятностью завершается с ошибкой на сложных моделях.
- dynamic_shapes (dict[str, Any], optional) — Явные спецификации динамических форм для каждого входа, передаваемые в torch.export. Имеют приоритет над dynamic.
- prefer_deferred_runtime_asserts_over_guards (bool, optional, по умолчанию False) —
Если установлено значение True, проверки форм данных, зависящие от данных, выводятся как runtime-asserты в экспортированном графе, а не приводят к сбою экспорта на этапе трассировки, если проверка не выполняется для всего диапазона символьных форм. Для большинства трансформерных LLM при использовании точных границ
Dim(min=, max=)необходимо установить это значение в True. Не требуется при использованииdynamic=True/Dim.AUTO, когдаtorch.exportвыводит связи форм, а не проверяет их по границам, указанным пользователем. - quantizer ([~exporters.quantizers.ExportQuantizer], optional) — Постобучающая квантизация, применяемая при экспорте: [~exporters.quantizers.PT2EQuantizer] или [~exporters.quantizers.NNCFTorchFXQuantizer] для графа FX для любого бэкенда, [~exporters.quantizers.OnnxRuntimeQuantizer] для сконвертированной модели ONNX, или [~exporters.quantizers.NNCFOpenVINOQuantizer] / [~exporters.quantizers.NNCFOnnxQuantizer] для сконвертированной модели OpenVINO / ONNX.
Класс конфигурации для экспорта моделей через torch.export.
OnnxConfig
класс transformers.exporters.OnnxConfig
< source >( export_format: ExportFormat = <ExportFormat.ONNX: 'onnx'>dynamic: bool = Falsestrict: bool = Falsedynamic_shapes: dict[str, Any] | None = Noneprefer_deferred_runtime_asserts_over_guards: bool = Falsequantizer: ExportQuantizer | None = Noneoutput_path: str | PathLike | None = Noneopset_version: int | None = Noneexternal_data: bool = Trueoptimize: bool = Trueexport_params: bool = Truekeep_initializers_as_inputs: bool = False )
Параметры
- output_path (
strилиPathLike, необязательный) — Путь для сохранения файла.onnx. ЕслиNone(по умолчанию), экспортированная модель сохраняется в памяти какONNXProgramи не записывается на диск. - opset_version (
int, необязательный) — версия opset ONNX, для которой выполняется генерация. По умолчанию используется последняя версия opset, поддерживаемая установленной версиейonnxscript. - external_data (
bool, необязательный, по умолчаниюTrue) — Хранить большие тензоры весов в отдельном файле-спутнике.onnx_data, а не встраивать их в protobuf. Требуется для моделей, веса которых превышают лимит protobuf в 2 ГБ. - optimize (
bool, необязательный, по умолчаниюTrue) — Запускать проходы оптимизацииonnxscript(свёртка констант, удаление мёртвого кода, …) для экспортированного графа. Отключите для моделей, которые сталкиваются с ошибками оптимизатораonnxscriptв исходной библиотеке. - export_params (
bool, необязательный, по умолчаниюTrue) — Встроить веса модели в граф ONNX. УстановитеFalse, чтобы экспортировать граф без весов (веса должны быть предоставлены во время выполнения). - keep_initializers_as_inputs (
bool, необязательный, по умолчаниюFalse) — Выводит инициализаторы весов в качестве явных входов графа. Требуется некоторыми старыми рантаймами ONNX (opset < 9).
Класс конфигурации для экспорта моделей в ONNX через torch.onnx.export.
Наследует все поля из DynamoConfig (dynamic, strict, dynamic_shapes, prefer_deferred_runtime_asserts_over_guards).
ExecutorchConfig
класс transformers.exporters.ExecutorchConfig
< source >( export_format: ExportFormat = <ExportFormat.EXECUTORCH: 'executorch'>dynamic: bool = Falsestrict: bool = Falsedynamic_shapes: dict[str, Any] | None = Noneprefer_deferred_runtime_asserts_over_guards: bool = Falsequantizer: ExportQuantizer | None = Nonebackend: str = 'xnnpack'alloc_graph_input: bool = Truealloc_graph_output: bool = Truealloc_mutable_buffers: bool = True )
Параметры
- backend (
str, необязательный, по умолчанию"xnnpack") — Целевой бэкенд ExecuTorch. Поддерживаемые значения:"xnnpack"— CPU-инференс через библиотеку XNNPACK (по умолчанию; работает везде)."cuda"— GPU-инференс через CUDA-бэкенд ExecuTorch."mlx"— GPU-инференс через бэкенд ExecuTorch MLX на Apple Silicon.
- alloc_graph_input (
bool, необязательный, по умолчаниюTrue) — Определяет, выделяет ли этап планирования памяти область памяти в arena для входных данных графа. Если установлено значениеFalse, исполняемое окружение использует переданные вызывающим кодом буферы входных данных напрямую, не копируя их в arena, — в результате локальное изменениеUSER_INPUT_MUTATION(например, запись вStaticCache) выполняется в тензоре вызывающего кода, а не в копии в arena. - alloc_graph_output (
bool, необязательный, по умолчаниюTrue) — Определяет, выделяет ли этап планирования памяти память в арене для выходов графа. ЕслиFalse, вызывающая сторона должна привязать буферы выходов во время выполнения (Method::set_output_data_ptr); привязка выхода к буферу его изменённого входа позволяет избежать дополнительного копирования. - alloc_mutable_buffers (
bool, необязательный, по умолчаниюTrue) — Определяет, выделяет ли этап планирования памяти область памяти для изменяемых буферов (состояние, хранящееся в модели). Передаётся вMemoryPlanningPass.
Класс конфигурации для экспорта моделей в формат ExecuTorch.
Наследует все поля из DynamoConfig (dynamic, strict, dynamic_shapes, prefer_deferred_runtime_asserts_over_guards).
OpenVINOConfig
класс transformers.exporters.OpenVINOConfig
< source >( export_format: ExportFormat = <ExportFormat.OPENVINO: 'openvino'>dynamic: bool = Falsestrict: bool = Falsedynamic_shapes: dict[str, Any] | None = Noneprefer_deferred_runtime_asserts_over_guards: bool = Falsequantizer: ExportQuantizer | None = Noneoutput_path: str | PathLike | None = Nonecompress_to_fp16: bool = Truestateful: bool = True )
Параметры
- output_path (str или PathLike, необязательный) —
Путь для сохранения файла .xml (соответствующий файл .bin записывается рядом). Если
значение равно None (по умолчанию), преобразованная модель сохраняется в памяти как
openvino.Model. - compress_to_fp16 (bool, optional, по умолчанию True) —
Сжимает веса с плавающей точкой до FP16 при сохранении — вдвое уменьшает размер на диске с
незначительным влиянием на точность для большинства моделей. Применяется только при заданном
output_path. - stateful (bool, optional, defaults to True) —
Fold round-tripped state tensors (KV cache, SSM states, …) into internal OV
variables (
ReadValue/Assign`). The runtime then carries state across `infer()` calls instead of marshalling cache tensors through inputs/outputs on every step, and a fused `beam_idxinput reorders state in-graph for beam search. No-op for models without round-tripped state (encoders, prefill-only exports). Set it to False for targets that take no stateful model, such as the NPU plugin.
Класс конфигурации для экспорта моделей в формат OpenVINO IR с помощью openvino.convert_model.
Наследует все поля из [DynamoConfig] (dynamic, strict, dynamic_shapes, prefer_deferred_runtime_asserts_over_guards).
Квантизаторы
класс transformers.exporters.ExportQuantizer
< source >( calibration_dataset: Iterable[dict[str, Any]] | None = None )
Параметры
- calibration_dataset (
Iterable[dict], необязательный) — Входные словари, на которых квантизатор выполняет калибровку: список илиDataLoader, чьи батчи собираются в входные данные модели. Для~HfExporter.export_for_generationэто аргументы generate, которые фиксируются в набор для калибровки для каждого компонента. ЕслиNone, квантизатор, которому нужны данные, выполняет калибровку на собственных входных данных экспорта, с предупреждением.
Базовый класс для квантизаторов, применяемых на этапе пост-обучения при экспорте.
Квантизатор объявляет поддерживаемые форматы экспорта и необходимые пакеты (с версиями, на которых он протестирован, как и экспортеры), а также то, квантизирует ли он граф FX из torch.export до какого-либо преобразования (так что каждый бэкенд получает результат) или модель, в которую бэкенд ее преобразует (onnx_ir.Model, openvino.Model). Экспортер заранее валидирует его по отношению к экспорту, а затем вызывает ~ExportQuantizer.quantize с этой моделью и примерами входных данных экспорта. Создайте подкласс и реализуйте quantize, чтобы добавить новый метод квантизации; CalibrationSet сопоставляет калибровочные примеры с собственными входами модели.
Квантуйте model (FX-граф, если quantizes_fx_graph, иначе модель бэкенда) и верните результат, откалиброванный на calibration_dataset или на sample_inputs экспорта, если датасет не задан.
Вызвать исключение, если данный квантизатор не может работать с экспортом в формате export_format, либо если отсутствует или устарел необходимый пакет;
выдать предупреждение, если версия пакета отличается от той, на которой проводилось тестирование.
Копия этого квантизатора, выполняющая калибровку на calibration_dataset.
класс transformers.exporters.quantizers.CalibrationSet
< source >( calibration_dataset: Iterable[dict[str, Any]] | Nonesample_inputs: dict[str, Any]transform: Callable[[dict[str, Any]], Any] )
Повторно итерируемое представление калибровочных образцов в качестве входных данных модели.
Образцами служат calibration_dataset квантизатора или собственные sample_inputs экспорта (с предупреждением, при первом чтении), если квантизатора нет. Это может быть любое отображение, например BatchEncoding токенизатора. transform преобразует каждый образец forward-аргументов в то, что принимает квантованная модель (отслеженные kwargs, входные данные ONNX, входные порты OpenVINO), лениво, по одному образцу за раз, на каждом проходе.
класс transformers.exporters.PT2EQuantizer
< source >( quantizer: Anycalibration_dataset: Iterable[dict[str, Any]] | None = None )
Параметры
- quantizer (
torchao.quantization.pt2e.quantizer.Quantizer) — Квантизатор PT2E, который размечает граф. Его операции quantize/dequantize должны поддерживаться целевым бэкендом:X86InductorQuantizerдля inductor, ONNX (QDQ) или OpenVINO,XNNPACKQuantizerдля ExecuTorch. - calibration_dataset (
Iterable[dict], необязательный) — Входные словари, на которых наблюдатели выполняют калибровку (см.ExportQuantizer), по одному прямому пропуску на каждый. Для калибровки на батчах передайтеDataLoader, который объединяет примеры в батчи входных словарей, а не список отдельных примеров.
Квантизация графа FX с помощью квантизации PyTorch 2 Export (PT2E): prepare_pt2e вставляет наблюдатели, набор калибровки управляет ими, а convert_pt2e заменяет их на операции quantize/dequantize. Работает со всеми бэкендами экспорта.
Пример:
>>> from torchao.quantization.pt2e.quantizer.x86_inductor_quantizer import (
... X86InductorQuantizer,
... get_default_x86_inductor_quantization_config,
... )
>>> from transformers.exporters import DynamoConfig, PT2EQuantizer
>>> x86 = X86InductorQuantizer().set_global(get_default_x86_inductor_quantization_config())
>>> DynamoConfig(quantizer=PT2EQuantizer(x86, calibration_dataset=samples))класс transformers.exporters.OnnxRuntimeQuantizer
< source >( config: OnnxRuntimeStaticConfig | OnnxRuntimeDynamicConfig | None = Nonecalibration_dataset: Iterable[dict[str, Any]] | None = None )
Квантуйте преобразованную ONNX-модель с помощью собственных инструментов ONNX Runtime (onnxruntime.quantization): quantize_static с OnnxRuntimeStaticConfig (по умолчанию) или quantize_dynamic с OnnxRuntimeDynamicConfig.
Пример:
>>> from transformers.exporters import (
... OnnxConfig,
... OnnxRuntimeDynamicConfig,
... OnnxRuntimeQuantizer,
... OnnxRuntimeStaticConfig,
... )
>>> static = OnnxRuntimeStaticConfig(per_channel=True)
>>> OnnxConfig(quantizer=OnnxRuntimeQuantizer(static, calibration_dataset=samples))
>>> OnnxConfig(quantizer=OnnxRuntimeQuantizer(OnnxRuntimeDynamicConfig()))класс transformers.exporters.OnnxRuntimeStaticConfig
< source >( quant_format: Any = Noneop_types_to_quantize: list[str] | None = Noneper_channel: bool | None = Nonereduce_range: bool | None = Noneactivation_type: Any = Noneweight_type: Any = Nonenodes_to_quantize: list[str] | None = Nonenodes_to_exclude: list[str] | None = Nonecalibrate_method: Any = Nonecalibration_providers: list[str] | None = Noneextra_options: dict[str, Any] | None = None )
Аргументы onnxruntime.quantization.quantize_static: int8 для активаций и весов (по умолчанию QDQ), откалиброванные на calibration_dataset квантизатора. Поле, оставленное равным None, сохраняет значение по умолчанию ONNX Runtime. См. quantize_static для каждого из них.
класс transformers.exporters.OnnxRuntimeDynamicConfig
< source >( op_types_to_quantize: list[str] | None = Noneper_channel: bool | None = Nonereduce_range: bool | None = Noneweight_type: Any = Nonenodes_to_quantize: list[str] | None = Nonenodes_to_exclude: list[str] | None = Noneextra_options: dict[str, Any] | None = None )
Аргументы onnxruntime.quantization.quantize_dynamic: веса int8, активации квантуются во время выполнения, калибровка не требуется. Поле, оставленное равным None, сохраняет значение по умолчанию в ONNX Runtime. См. quantize_dynamic для каждого из них.
класс transformers.exporters.NNCFOpenVINOQuantizer
< source >( config: NNCFQuantizationConfig | NNCFWeightCompressionConfig | None = Nonecalibration_dataset: Iterable[dict[str, Any]] | None = None )
Квантуйте преобразованную модель OpenVINO с помощью NNCF: nncf.quantize с NNCFQuantizationConfig (по умолчанию) или nncf.compress_weights с NNCFWeightCompressionConfig.
Пример:
>>> import nncf
>>> from transformers.exporters import NNCFOpenVINOQuantizer, NNCFWeightCompressionConfig, OpenVINOConfig
>>> OpenVINOConfig(quantizer=NNCFOpenVINOQuantizer(calibration_dataset=samples))
>>> OpenVINOConfig(
... quantizer=NNCFOpenVINOQuantizer(NNCFWeightCompressionConfig(mode=nncf.CompressWeightsMode.INT4_SYM))
... )класс transformers.exporters.NNCFOnnxQuantizer
< source >( config: NNCFQuantizationConfig | NNCFWeightCompressionConfig | None = Nonecalibration_dataset: Iterable[dict[str, Any]] | None = None )
Квантуйте сконвертированную ONNX-модель с помощью NNCF через её ONNX-бэкенд: nncf.quantize с NNCFQuantizationConfig (по умолчанию, int8 QDQ) или nncf.compress_weights с NNCFWeightCompressionConfig (int4 как MatMulNBits в ONNX Runtime).
Пример:
>>> import nncf
>>> from transformers.exporters import NNCFOnnxQuantizer, NNCFWeightCompressionConfig, OnnxConfig
>>> OnnxConfig(quantizer=NNCFOnnxQuantizer(calibration_dataset=samples))
>>> OnnxConfig(quantizer=NNCFOnnxQuantizer(NNCFWeightCompressionConfig(mode=nncf.CompressWeightsMode.INT4_SYM)))класс transformers.exporters.NNCFTorchFXQuantizer
< source >( config: NNCFQuantizationConfig | NNCFWeightCompressionConfig | None = Nonecalibration_dataset: Iterable[dict[str, Any]] | None = None )
Квантизация графа FX из torch.export с помощью NNCF через его бэкенд TorchFX: nncf.quantize с NNCFQuantizationConfig (по умолчанию, операции quantize/dequantize) или nncf.compress_weights с NNCFWeightCompressionConfig. Как и PT2EQuantizer, он выполняется до любого преобразования, поэтому каждый бэкенд использует его результат. ExecuTorch понижает только результат weight-only: XNNPACK не делегирует операции quantize/dequantize, а в ExecuTorch нет для них ядер.
класс transformers.exporters.NNCFQuantizationConfig
< source >( mode: Any = Nonepreset: Any = Nonetarget_device: Any = Nonesubset_size: int | None = Nonefast_bias_correction: bool | None = Nonemodel_type: Any = Noneignored_scope: Any = Noneadvanced_parameters: Any = None )
Аргументы nncf.quantize: int8-активации и веса, откалиброванные на calibration_dataset квантизатора.
Поле, оставленное равным None, сохраняет значение по умолчанию NNCF, за исключением model_type, для которого значением по умолчанию является nncf.ModelType.TRANSFORMER.
См. nncf.quantize для каждого из них.
класс transformers.exporters.NNCFWeightCompressionConfig
< source >( mode: Any = Noneratio: float | None = Nonegroup_size: int | None = Noneignored_scope: Any = Noneall_layers: bool | None = Nonesensitivity_metric: Any = Nonesubset_size: int | None = Noneawq: bool | None = Nonescale_estimation: bool | None = Nonegptq: bool | None = Nonelora_correction: bool | None = Nonebackup_mode: Any = Nonecompression_format: Any = Noneadvanced_parameters: Any = None )
Аргументы nncf.compress_weights: только веса int8 или int4, с методами, учитывающими данные (AWQ, оценка масштаба,
GPTQ), для режимов int4. Режимы int8 не требуют данных; остальные калибруются на calibration_dataset квантизатора. gptq и lora_correction доступны только в OpenVINO. Поле, оставленное равным None, сохраняет значение по умолчанию NNCF. См. nncf.compress_weights для
каждого из них.
Утилиты
Функции низкого уровня, обеспечивающие работу export_for_generation, полезные, когда необходимо вмешаться между декомпозицией модели и экспортом каждого компонента.
transformers.exporters.utils.get_leaf_tensors
< source >( obj: Any ) → dict[str, torch.Tensor]
Рекурсивно получить все тензоры-листья из потенциально вложенной структуры.
transformers.exporters.utils.prepare_for_export
< source >( model: PreTrainedModel | torch.nn.Moduleinputs: MutableMapping[str, Any] )
Настройте модель и входные данные для экспорта. Метод изменяет model и inputs на месте, возвращая (model, inputs, output_flags), где output_flags содержит значения, извлечённые из inputs для use_cache, return_dict и т. д. (чтобы их можно было обратимо применить к model.config с помощью patch_model_config во время трассировки).
- Удаляет входные данные меток (
labels,future_values) — вычисление потерь не поддерживается. - Удаляет флаги вывода (
use_cache,return_dict, …) изinputs, чтобы они не появлялись как отслеживаемые kwargs; значения возвращаются для применения блока трассировки кmodel.config. - Предварительно вычисляет kwargs для зрения/аудио, зависящие от данных и зарегистрированные через
@register_export_input_preparer, и записывает их вinputs. - Преобразует входные тензоры в соответствии с
dtype/deviceмодели.
transformers.exporters.utils.decompose_prefill_decode
< source >( model: PreTrainedModelinputs: dict[str, Any]generation_config: Any = Nonemulti_token_decode: bool = False ) → dict[str, tuple[torch.nn.Module, dict]]
Возвращает
dict[str, tuple[torch.nn.Module, dict]]
{"prefill": (model, prefill_inputs), "decode": (model, decode_inputs)}.
Запустите model.generate() и зафиксируйте входные данные для prefill и decode.
Повторно использует полный механизм генерации, чтобы каждая архитектура (только декодер, SSM, энкодер-декодер, мультимодальная, …) получала корректные входные данные без повторной реализации цикла.
generation_config передаётся в generate() (по умолчанию используется собственный конфиг модели), поэтому захваченные входные данные используют тот же кэш, который построила бы generate(). Передайте конфиг с cache_implementation="static" и max_cache_len=N, чтобы захватить кэш статического размера во входных данных декодирования — это основа для экспорта со статическим кэшем. max_cache_len задаёт размер кэша независимо от захвата, поэтому экспортированный декодер принимает фиксированный кэш [..., N, ...], а не растущий.
Если включён multi_token_decode, компонент decode захватывается как multi-token decode — два последовательных шага декодирования объединяются (см. _merge_decode_calls), чтобы ось query-последовательности оставалась символьной (при single-token decode эта ось специализируется в 1). Затем он обрабатывает как один токен (обычное декодирование), так и множество (продолжение из прошлого или обычный prefill, если кэш пуст). В противном случае decode — это классический single-token decode.
transformers.exporters.utils.decompose_multimodal
< source >( model: PreTrainedModelinputs: dict[str, Any] ) → dict[str, tuple[torch.nn.Module, dict]]
Возвращает
dict[str, tuple[torch.nn.Module, dict]]
Одна запись name: (module, inputs)
на каждый обнаруженный подмодуль (кодировщик изображений/аудио, проектор, языковая модель, lm_head).
Исключения
ValueError
ValueError— если в модели не найдены известные мультимодальные подмодули.
Захватите входные данные для каждого мультимодального подмодуля за один прямой проход.
Определяет все известные мультимодальные подмодули по имени атрибута (vision tower, projector, language model, lm_head, …) и фиксирует их аргументы forward во время одного вызова model(**inputs).
Каждый подмодуль возвращается как отдельная запись name: (module, inputs) для независимого экспорта. Шаг слияния токенов (например, masked_scatter для мультимодальных моделей) намеренно вынесен за пределы экспортируемых графов — ответственность за сборку inputs_embeds из выходов кодировщика перед запуском декодера лежит на вызывающей стороне.
transformers.exporters.utils.decompose_for_generation
< source >( model: PreTrainedModelinputs: dict[str, Any]generation_config: Any = Nonemulti_token_decode: bool = False ) → `{component_name
Параметры
- model — генеративная модель. Должна поддерживать
model.generate(**inputs). - inputs — аргументы Generate — то, что вы передаёте в
model.generate(**inputs). - generation_config — Необязательный
GenerationConfig, передаваемый вgenerate()во время захвата. Передайте объект сcache_implementation="static"+max_cache_len=N, чтобы экспортировать модель с использованием кэша статического размера (см.decompose_prefill_decode). - multi_token_decode — Если
True, компонентdecodeзахватывается как много-токеновый decode (динамическая ось последовательности запроса: несколько токенов за один раз — продолжение из прошлого или обычный prefill, если кэш пуст); одно-токеновый decode не может оставаться динамическим (см.decompose_prefill_decode).
Возвращает
{component_name
(submodel, forward_inputs)}. Keys are “prefill”/“decode”for plain generative models and”/“multi_modal_projector”/“language_model”/“lm_head”/“decode”` for multi-modal generative models.
Разбейте генеративную модель на независимо экспортируемые пары (model, forward_inputs).
Выполняет decompose_prefill_decode для захвата аргументов kwargs для forward-прохода prefill и decode из реального вызова model.generate(**inputs, max_new_tokens=2). Если prefill является мультимодальным (согласно is_multimodal), он дополнительно разбивается на один элемент на каждый подмодуль (визуальный/аудио-энкодер, проектор, языковая модель, lm_head) с помощью decompose_multimodal.
Возвращает True, если модель мультимодальная и содержит модальные энкодеры и языковую модель.
Модель, не являющаяся PreTrainedModel (например, обычный nn.Module), не имеет канонических аксессоров get_encoder/get_decoder и тривиально не является мультимодальной, поэтому функция сразу возвращает False.