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.23.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Экспортеры

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

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

AutoHfExporter

класс transformers.exporters.AutoHfExporter

< >

( )

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

AutoExportConfig

класс transformers.exporters.AutoExportConfig

< >

( )

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

register_backend

transformers.exporters.register_backend

< >

( exporter: type[HfExporter]runner: type[ModelRunner] | None = None )

Зарегистрируйте экспортер с его config_class под его export_format, а также раннер, который выполняет его экспорт, чтобы автоклассы могли их найти.

HfExporter

класс transformers.exporters.HfExporter

< >

( )

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

Чтобы добавить backend, создайте подкласс и реализуйте ~HfExporter.export_program для трассировки одного графа, а также ~HfExporter.save_program / ~HfExporter.load_program для записи и чтения. Публичные методы ~HfExporter.export и ~HfExporter.export_for_generation строят ExportedModel на их основе.

экспорт

< >

( model: PreTrainedModelsample_inputs: MutableMapping[str, torch.Tensor | Cache]config: ExportConfigMixin | dict[str, Any] ) → ExportedModel

Возвращает

ExportedModel

Один компонент "model"; программа бэкенда — .program, а save_pretrained записывает её вместе с метаданными и конфигурацией модели.

Экспортируйте модель как один граф.

Принимает те же аргументы forward, что и ~HfExporter.export_program.

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 ) → ExportedModel

Параметры

  • 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).

Возвращает

ExportedModel

По одному ExportedComponent на каждый этап, с теми же ключами, что и в decompose_for_generation().

Разложите генеративную модель и экспортируйте каждый компонент независимо.

Thin wrapper around decompose_for_generation() that calls ~HfExporter.export_program 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.

export_program

< >

( model: PreTrainedModelsample_inputs: MutableMapping[str, torch.Tensor | Cache]config: ExportConfigMixin ) → tuple[Any, ExportMetadata]

Параметры

  • 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) — Конфигурация, специфичная для бэкенда.

Возвращает

tuple[Any, ExportMetadata]

Объект программы бэкенда (ExportedProgram, onnx_ir.Model, ExecutorchProgramManager, openvino.Model) и метаданные, записанные во время трассировки (build_export_metadata()), возвращаются отдельно, поскольку только некоторые форматы могут их содержать.

Отслеживание одного графа. Точка расширения бэкенда, используемая в паре с ~HfExporter.save_program.

load_program

< >

( path: str | Path )

Чтение программы, сохранённой с помощью ~HfExporter.save_program. Она может отличаться от той, которую вернул ~HfExporter.export_program: это программа Program для ExecuTorch, для которой ExecutorchProgramManager невозможно восстановить из файла.

program_files

< >

( filename: str )

Файлы, которые ~HfExporter.save_program записывает для программы, сохранённой как filename: сам файл, а также любые данные, которые формат хранит рядом с ним (веса, внешние данные).

save_program

< >

( program: Anypath: str | Path )

Запишите одну программу, возвращаемую ~HfExporter.export_program, в path в формате файла, используемом бэкендом.

validate_environment

< >

( )

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

ExportedModel

класс transformers.exporters.ExportedModel

< >

( components: dict[str, ExportedComponent]export_format: ExportFormat | strconfig: PreTrainedConfig | None = Nonegeneration_config: GenerationConfig | None = None )

Экспортированная модель: её графы (components, {name: ExportedComponent}) и конфигурации, по которым они были прослежены, вызываемые так же, как и исходная модель.

~HfExporter.export создаёт один компонент "model", чья программа — .program; ~HfExporter.export_for_generation создаёт по одному компоненту на каждый этап генерации.

>>> exported = OnnxExporter().export(model, inputs, OnnxConfig(dynamic=True))
>>> exported.save_pretrained("exported")
>>> outputs = ExportedModel.from_pretrained("exported", device="cuda")(**inputs)
>>> outputs.last_hidden_state

__call__

< >

( share_inputs: bool = Trueshare_outputs: bool = False**kwargs )

Выполняет экспорт с одним графом, возвращая то, что возвращает исходная модель. Ключевые аргументы, с которыми экспорт не был прослежен, отбрасываются, поэтому можно передать весь вывод процессора. share_inputs и share_outputs передаются в раннер (см. ModelRunner.__call__): при share_outputs выводы остаются действительными до следующего вызова.

программа

< >

( )

Собственная программа бэкенда для экспорта единого графа.

до

< >

( device = None**runner_kwargs )

Загрузите программы на рантайм их бэкенда, на device (по умолчанию для бэкенда, если None). runner_kwargs передаются в раннер бэкенда: providers и session_options для ONNX Runtime, config (свойства компиляции) и torch_threads (разделить CPU с работой torch вокруг модели) для OpenVINO.

save_pretrained

< >

( save_directory: str | Pathpush_to_hub: bool = False**kwargs )

Параметры

  • save_directory (str или Path) — Каталог для записи; создаётся, если не существует.
  • push_to_hub (bool, необязательный, по умолчанию False) — Следует ли также загрузить сохранённые файлы в Hub, в repo_id (по умолчанию используется имя save_directory в вашем пространстве имён).
  • kwargs (dict[str, Any], необязательный) — Передаётся в загрузку на Hub: repo_id, commit_message, token, private, …

Создайте компоненты (по одному файлу на каждый), конфигурации и манифест, в котором указаны файлы каждого компонента и метаданные, записанные при трассировке. ~ExportedModel.from_pretrained загружает их обратно.

from_pretrained

< >

( pretrained_model_name_or_path: str | Pathdevice = Nonecache_dir: str | os.PathLike | None = Noneforce_download: bool = Falselocal_files_only: bool = Falsetoken: str | bool | None = Nonerevision: str = 'main'subfolder: str = ''trust_remote_code: bool = False**runner_kwargs )

Параметры

  • pretrained_model_name_or_path (str или Path) — Локальная директория или идентификатор репозитория на Hub. Из Hub загружаются только файлы, указанные в манифесте, поэтому экспортированные данные могут находиться рядом с собственными весами модели.
  • device (str или torch.device, необязательный) — Место выполнения (по умолчанию для бэкенда, если None).
  • cache_dir (Union[str, os.PathLike], необязательный) — Путь к каталогу, в котором следует кэшировать загруженную конфигурацию предобученной модели, если стандартный кэш не используется.
  • force_download (bool, необязательный, по умолчанию False) — Следует ли принудительно (пере)скачивать веса модели и файлы конфигурации, игнорируя кэшированные версии, если они существуют.
  • local_files_only (bool, необязательный, по умолчанию False) — Использовать только локальные файлы (то есть не пытаться скачать модель).
  • token (str или bool, необязательный) — Токен, используемый в качестве HTTP bearer-авторизации для удалённых файлов. Если указано True или параметр не задан, будет использован токен, сгенерированный при выполнении hf auth login (хранится в ~/.huggingface).
  • revision (str, необязательный, по умолчанию "main") — Конкретная версия модели, которую нужно использовать. Это может быть имя ветки, имя тега или идентификатор коммита, так как для хранения моделей и других артефактов на huggingface.co используется система на базе git, поэтому revision может быть любым идентификатором, разрешенным git.

    Чтобы протестировать pull request, который вы создали на Hub, вы можете передать revision="refs/pr/<pr_number>".

  • subfolder (str, необязательный, по умолчанию "") — Если нужные файлы находятся в подпапке репозитория модели на huggingface.co, укажите здесь имя папки.
  • trust_remote_code (bool, необязательный, по умолчанию False) — Загружать ли конфигурацию модели, код которой находится в её репозитории, как в случае с from_pretrained().
  • runner_kwargs (необязательный) — Параметры runner бэкенда, как для ~ExportedModel.to: providers и session_options для ONNX Runtime, config и torch_threads для OpenVINO.

Загрузите то, что записало ~ExportedModel.save_pretrained: каждый компонент через ~HfExporter.load_program его бэкенда, вместе с метаданными, а также конфигурации, сохранённые рядом с ними. Программы загружаются в рантайм соответствующего бэкенда сразу и готовы к запуску.

ExportedComponent

класс transformers.exporters.ExportedComponent

< >

( program: Anymetadata: ExportMetadata )

Один экспортированный граф: программа бэкенда и сведения, которые экспортер записал о ней.

ExportMetadata

класс transformers.exporters.ExportMetadata

< >

( architecture: str | None = Nonepackages: dict[str, str] = <factory>export_config: dict[str, Any] = <factory>export_dtype: str | None = Noneexport_device: str | None = Nonekwargs: dict[str, dict] = <factory>in_spec: str | None = Noneout_spec: str | None = Nonein_constants: dict[str, Any] = <factory>out_constants: list = <factory> )

Что экспортер записал об одном графе (build_export_metadata()).

from_dict

< >

( values: Mapping[str, Any] )

Создайте метаданные из сохранённого словаря, пропуская поля, которых нет в этом классе (добавленные в более новой версии).

ModelRunner

класс transformers.exporters.ModelRunner

< >

( metadata: ExportMetadata )

Выполняет один экспортированный программный модуль на его бэкенде: runner(**kwargs) возвращает то, что возвращает исходная модель.

from_program

< >

( program: Anymetadata: ExportMetadatadevice = None )

Запускающая программа как экспорт возвращает его, либо ~HfExporter.load_program считывает его обратно, на device (значение по умолчанию для бэкенда, если None).

unflatten

< >

( outputs: list )

Восстановите выходные данные модели из плоских выходов программы (которые идут последними) и записанных констант.

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(**inputs)
>>> exported.save_pretrained("exported")  # `model.pt2`, its metadata and the model config

экспорт

< >

( model: PreTrainedModelsample_inputs: MutableMapping[str, torch.Tensor | Cache]config: ExportConfigMixin | dict[str, Any] ) → ExportedModel

Возвращает

ExportedModel

Один компонент "model"; программа бэкенда — .program, а save_pretrained записывает её вместе с метаданными и конфигурацией модели.

Экспортируйте модель как один граф.

Принимает те же аргументы forward, что и ~HfExporter.export_program.

OnnxExporter

класс transformers.exporters.OnnxExporter

< >

( )

Экспортер, преобразующий PreTrainedModel в граф ONNX (onnx_ir.Model).

Пример:

>>> from transformers.exporters.exporter_onnx import OnnxExporter, OnnxConfig

>>> exporter = OnnxExporter()
>>> exported = exporter.export(model, inputs, config=OnnxConfig(dynamic=True))
>>> outputs = exported(**inputs)  # on ONNX Runtime
>>> onnx_model = exported.program  # an `onnx_ir.Model`
>>> exported.save_pretrained("exported")  # `model.onnx`, its metadata and the model config

экспорт

< >

( model: PreTrainedModelsample_inputs: MutableMapping[str, torch.Tensor | Cache]config: ExportConfigMixin | dict[str, Any] ) → ExportedModel

Возвращает

ExportedModel

Один компонент "model"; программа бэкенда — .program, а save_pretrained записывает её вместе с метаданными и конфигурацией модели.

Экспортируйте модель как один граф.

Принимает те же аргументы forward, что и ~HfExporter.export_program.

ExecutorchExporter

класс transformers.exporters.ExecutorchExporter

< >

( )

Экспортер, который преобразует PreTrainedModel в ExecutorchProgramManager ExecuTorch.

Пример:

>>> from transformers.exporters.exporter_executorch import ExecutorchExporter, ExecutorchConfig

>>> exporter = ExecutorchExporter()
>>> exported = exporter.export(model, inputs, config=ExecutorchConfig(backend="xnnpack"))
>>> outputs = exported(**inputs)  # on the ExecuTorch runtime
>>> exported.save_pretrained("exported")  # `model.pte`, its metadata and the model config

экспорт

< >

( model: PreTrainedModelsample_inputs: MutableMapping[str, torch.Tensor | Cache]config: ExportConfigMixin | dict[str, Any] ) → ExportedModel

Возвращает

ExportedModel

Один компонент "model"; программа бэкенда — .program, а save_pretrained записывает её вместе с метаданными и конфигурацией модели.

Экспортируйте модель как один граф.

Принимает те же аргументы forward, что и ~HfExporter.export_program.

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 = Noneopset_version: int | None = Noneoptimize: bool = Trueort_fusions: Literal['cpu', 'cuda', 'webgpu', 'dml'] | None = None )

Параметры

  • opset_version (int, необязательный) — версия opset ONNX, для которой выполняется генерация. По умолчанию используется последняя версия opset, поддерживаемая установленной версией onnxscript.
  • optimize (bool, необязательный, по умолчанию True) — Запускать проходы оптимизации onnxscript (свёртка констант, удаление мёртвого кода, …) для экспортированного графа. Отключите для моделей, которые сталкиваются с ошибками оптимизатора onnxscript в исходной библиотеке.
  • ort_fusions (str, необязательный) — Слияние графа в операции ONNX Runtime для провайдера выполнения, на котором он работает: "cpu", "cuda", "webgpu" или "dml". Слитый граф выполняется только в ONNX Runtime. Требуется optimize=True.

Класс конфигурации для экспорта моделей в 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 = Nonecompress_to_fp16: bool = Falsestateful: bool = True )

Параметры

  • compress_to_fp16 (bool, optional, по умолчанию False) — Сжимает веса float32 преобразованной модели до float16, уменьшая её размер вдвое. По умолчанию отключено из-за более узкого диапазона значений.
  • 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 экспорта, если датасет не задан.

traced_calibration

< >

( sample_inputs: dict[str, Any] )

Образцы калибровки в качестве отслеженных kwargs, для квантизаторов FX-графов.

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”<modality>_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