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

Экспортеры

Новые backends экспорта можно добавить в Transformers, создав подкласс HfExporter.

Узнайте, как использовать встроенные экспортеры, в руководстве Exporters.

AutoHfExporter

класс transformers.exporters.AutoHfExporter

< >

( )

Класс экспортера Auto-HF, который автоматически создаёт экземпляр правильного HfExporter на основе переданного ExportConfig.

from_pretrained

< >

( pretrained_model_name_or_path**kwargs )

Загрузите экземпляр экспортера из предобученной модели/чекпоинта, который содержит конфигурацию экспорта.

Пока не реализовано — заглушка для первого класса «рецепт экспорта».

Идея: владельцы моделей публикуют 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, индексы окон, …) для данной архитектуры. Вместе они покрывают две сложные части экспорта новых моделей — знание правильного контракта форм и подготовку правильных входных данных — так что пользователи на нижних уровнях не выводят ни то, ни другое с нуля (и не ломают работу в продакшене, если ошибаются).

supports_export_format

< >

( export_config_dict: dict )

Возвращает True, если переданный словарь описывает export_format, для которого зарегистрированы и класс конфигурации, и класс экспортера. Выводит предупреждение с рекомендациями по устранению проблемы, если формат полностью отсутствует, неизвестен или зарегистрирован только частично.

AutoExportConfig

класс transformers.exporters.AutoExportConfig

< >

( )

Класс конфигурации экспорта Auto-HF, который автоматически выбирает правильную конфигурацию экспорта на основе конфигурации, сохранённой в словаре.

HfExporter

класс transformers.exporters.HfExporter

< >

( )

Абстрактный базовый класс для всех экспортеров Transformers.

Создайте подкласс и реализуйте ~HfExporter.export, чтобы добавить новый backend экспорта.

экспорт

< >

( 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

< >

( 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.

validate_environment

< >

( *args**kwargs )

Проверьте, установлены ли required_packages, и предупредите о расхождении версий с tested_versions.

DynamoExporter

класс transformers.exporters.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)

экспорт

< >

( model: PreTrainedModelsample_inputs: MutableMapping[str, Any]config: DynamoConfig | dict[str, Any] )

OnnxExporter

класс transformers.exporters.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

экспорт

< >

( model: PreTrainedModelsample_inputs: MutableMapping[str, Any]config: OnnxConfig | dict[str, Any] )

ExecutorchExporter

класс transformers.exporters.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")

экспорт

< >

( model: PreTrainedModelsample_inputs: MutableMapping[str, Any]config: ExecutorchConfig | dict[str, Any] )

Экспортируйте модель в ExecuTorch, применяя подготовку бэкенда и патчи torch op.

DynamoConfig

класс transformers.exporters.DynamoConfig

< >

( 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

< >

( 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

< >

( 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

< >

( 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_idx input 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

< >

( 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 сопоставляет калибровочные примеры с собственными входами модели.

quantize

< >

( model: Anysample_inputs: dict[str, Any]export_format: ExportFormat )

Квантуйте model (FX-граф, если quantizes_fx_graph, иначе модель бэкенда) и верните результат, откалиброванный на calibration_dataset или на sample_inputs экспорта, если датасет не задан.

validate_environment

< >

( export_format: ExportFormat )

Вызвать исключение, если данный квантизатор не может работать с экспортом в формате export_format, либо если отсутствует или устарел необходимый пакет; выдать предупреждение, если версия пакета отличается от той, на которой проводилось тестирование.

with_calibration

< >

( calibration_dataset: Iterable[dict[str, Any]] )

Копия этого квантизатора, выполняющая калибровку на calibration_dataset.

класс transformers.exporters.quantizers.CalibrationSet

< >

( 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

< >

( 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

< >

( 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

< >

( 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

< >

( 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

< >

( 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

< >

( 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

< >

( 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 нет для них ядер.

Пример:

>>> from transformers.exporters import DynamoConfig, NNCFTorchFXQuantizer

>>> DynamoConfig(quantizer=NNCFTorchFXQuantizer(calibration_dataset=samples))

класс transformers.exporters.NNCFQuantizationConfig

< >

( 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

< >

( 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

< >

( obj: Any ) → dict[str, torch.Tensor]

Параметры

  • obj (Any) — Тензор, dataclass, dict, list, tuple или любая их вложенная комбинация.

Возвращает

dict[str, torch.Tensor]

Плоское отображение из строковых путей с точками в тензоры.

Рекурсивно получить все тензоры-листья из потенциально вложенной структуры.

transformers.exporters.utils.prepare_for_export

< >

( 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

< >

( 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

< >

( 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

< >

( 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”_encoder”/“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.

transformers.exporters.utils.is_multimodal

< >

( model: PreTrainedModel | torch.nn.Module )

Возвращает True, если модель мультимодальная и содержит модальные энкодеры и языковую модель.

Модель, не являющаяся PreTrainedModel (например, обычный nn.Module), не имеет канонических аксессоров get_encoder/get_decoder и тривиально не является мультимодальной, поэтому функция сразу возвращает False.

Update on GitHub