Transformers documentation
Экспортеры
Экспортеры
Новые backends экспорта можно добавить в Transformers, создав подкласс HfExporter и зарегистрировав его с помощью register_backend().
Узнайте, как использовать встроенные экспортеры, в руководстве Exporters.
AutoHfExporter
Класс экспортера Auto-HF, который автоматически создаёт экземпляр правильного HfExporter на основе переданного ExportConfig.
AutoExportConfig
Класс конфигурации экспорта Auto-HF, который автоматически выбирает правильную конфигурацию экспорта на основе конфигурации, сохранённой в словаре.
register_backend
transformers.exporters.register_backend
< source >( exporter: type[HfExporter]runner: type[ModelRunner] | None = None )
Зарегистрируйте экспортер с его config_class под его export_format, а также раннер, который выполняет его экспорт, чтобы автоклассы могли их найти.
HfExporter
Абстрактный базовый класс для всех экспортеров Transformers.
Чтобы добавить backend, создайте подкласс и реализуйте ~HfExporter.export_program для трассировки одного графа, а также ~HfExporter.save_program / ~HfExporter.load_program для записи и чтения. Публичные методы ~HfExporter.export и ~HfExporter.export_for_generation строят ExportedModel на их основе.
экспорт
< source >( 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
< source >( 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
< source >( 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.
Чтение программы, сохранённой с помощью ~HfExporter.save_program. Она может отличаться от той, которую вернул ~HfExporter.export_program: это программа Program для ExecuTorch, для которой ExecutorchProgramManager невозможно восстановить из файла.
Файлы, которые ~HfExporter.save_program записывает для программы, сохранённой как filename: сам файл, а также любые данные, которые формат хранит рядом с ним (веса, внешние данные).
Запишите одну программу, возвращаемую ~HfExporter.export_program, в path в формате файла, используемом бэкендом.
Проверьте, установлены ли required_packages, и предупредите о расхождении версий с tested_versions.
ExportedModel
класс transformers.exporters.ExportedModel
< source >( 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Выполняет экспорт с одним графом, возвращая то, что возвращает исходная модель. Ключевые аргументы, с которыми экспорт не был прослежен, отбрасываются, поэтому можно передать весь вывод процессора. share_inputs и share_outputs передаются в раннер (см. ModelRunner.__call__): при share_outputs выводы остаются действительными до следующего вызова.
Собственная программа бэкенда для экспорта единого графа.
Загрузите программы на рантайм их бэкенда, на device (по умолчанию для бэкенда, если None). runner_kwargs передаются в раннер бэкенда: providers и session_options для ONNX Runtime, config (свойства компиляции) и torch_threads (разделить CPU с работой torch вокруг модели) для OpenVINO.
save_pretrained
< source >( 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
< source >( 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
Один экспортированный граф: программа бэкенда и сведения, которые экспортер записал о ней.
ExportMetadata
класс transformers.exporters.ExportMetadata
< source >( 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()).
Создайте метаданные из сохранённого словаря, пропуская поля, которых нет в этом классе (добавленные в более новой версии).
ModelRunner
Выполняет один экспортированный программный модуль на его бэкенде: runner(**kwargs) возвращает то, что возвращает исходная модель.
Запускающая программа как экспорт возвращает его, либо ~HfExporter.load_program считывает его обратно, на device (значение по умолчанию для бэкенда, если None).
Восстановите выходные данные модели из плоских выходов программы (которые идут последними) и записанных констант.
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экспорт
< source >( model: PreTrainedModelsample_inputs: MutableMapping[str, torch.Tensor | Cache]config: ExportConfigMixin | dict[str, Any] ) → ExportedModel
Возвращает
ExportedModel
Один компонент "model"; программа бэкенда — .program, а
save_pretrained записывает её вместе с метаданными и конфигурацией модели.
Экспортируйте модель как один граф.
Принимает те же аргументы forward, что и ~HfExporter.export_program.
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экспорт
< source >( model: PreTrainedModelsample_inputs: MutableMapping[str, torch.Tensor | Cache]config: ExportConfigMixin | dict[str, Any] ) → ExportedModel
Возвращает
ExportedModel
Один компонент "model"; программа бэкенда — .program, а
save_pretrained записывает её вместе с метаданными и конфигурацией модели.
Экспортируйте модель как один граф.
Принимает те же аргументы forward, что и ~HfExporter.export_program.
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экспорт
< source >( 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
< 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 = 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
< 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 = 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_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 экспорта, если датасет не задан.
Образцы калибровки в качестве отслеженных kwargs, для квантизаторов FX-графов.
Вызвать исключение, если данный квантизатор не может работать с экспортом в формате 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”<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.
Возвращает True, если модель мультимодальная и содержит модальные энкодеры и языковую модель.
Модель, не являющаяся PreTrainedModel (например, обычный nn.Module), не имеет канонических аксессоров get_encoder/get_decoder и тривиально не является мультимодальной, поэтому функция сразу возвращает False.