Transformers documentation
Exportateurs
Exportateurs
De nouveaux backends d’exportation peuvent être ajoutés à Transformers en sous-classant HfExporter.
Apprenez à utiliser les exporteurs intégrés dans le guide Exporters.
AutoHfExporter
La classe exportateur Auto-HF qui s’occupe d’instantier automatiquement le HfExporter approprié à partir de la ExportConfig.
Charger une instance d’exportateur à partir d’un modèle/pré-entraînement qui fournit une configuration d’export.
Pas encore implémenté — emplacement réservé pour un flux de travail « recette d’exportation » de premier ordre.
L’idée : les propriétaires de modèles publient un export_config.json (ou un champ export_config dans config.json) aux côtés de leurs poids sur le Hub. Ce fichier capture les réglages que le propriétaire a déjà validés pour son architecture — le format cible (dynamo / onnx / executorch), les spécifications exactes des formes dynamiques (par ex. text_ids dynamique jusqu’à 4096, tuiles d’image fixes à 448, batch=1 pour le déploiement sur edge), le drapeau strict, l’opset ONNX, la disposition prefill par rapport à decode, le choix du backend ExecuTorch, et tout autre paramètre qui, aujourd’hui, reste du savoir tribal dans un README ou un notebook privé.
Les consommateurs obtiennent ensuite l'export validé par le propriétaire en un seul appel :
exporter = AutoHfExporter.from_pretrained("org/model-name")
program = exporter.export(model, inputs)S’articule avec le registre [register_export_input_preparer] : le propriétaire fournit la spécification de forme via export_config.json, tandis que Transformers fournit les précalculations dépendantes des données (cu_seqlens, identifiants de position visuelle, indices de fenêtre, …) pour cette architecture. Ensemble, ils couvrent les deux aspects complexes de l’exportation de nouveaux modèles — connaître le bon contrat de forme et préparer les bonnes entrées — afin que les utilisateurs en aval n’aient pas à les redériver de zéro (et ne cassent pas en production s’ils se trompent).
Retourne True si le dictionnaire fourni décrit un export_format pour lequel une classe de configuration et une classe d’exportateur sont toutes deux enregistrées. Émet un avertissement avec un message actionnable lorsque le format est entièrement manquant, inconnu ou partiellement enregistré.
AutoExportConfig
La classe de configuration d’export Auto-HF qui se charge de dispatcher automatiquement vers la configuration d’export correcte à partir d’une configuration d’export stockée dans un dictionnaire.
HfExporter
Classe de base abstraite pour tous les exportateurs de Transformers.
Sous-classez et implémentez ~HfExporter.export pour ajouter un nouveau backend d’exportation.
export
< source >( model: PreTrainedModelsample_inputs: MutableMapping[str, torch.Tensor | Cache]config: ExportConfigMixin )
Paramètres
- model (PreTrainedModel) — Le modèle à exporter.
- sample_inputs (
dict[str, torch.Tensor | Cache]) — Forward kwargs — ce que vous passeriez àmodel(**sample_inputs). Ils sont utilisés directement comme entrées d’exemple pendant le traçage. Pour une exportation d’une étape de décodage autorégressive, vous devez donc inclurepast_key_values,cache_position, etc. Si vous ne disposez que d’entrées de type génération, utilisez plutôt~HfExporter.export_for_generation— il exécutemodel.generatepour vous et exporte chaque étape. - config (
ExportConfigMixin) — Configuration spécifique au backend.
Exporter le modèle et retourner l'objet de programme spécifique au backend.
export_for_generation
< source >( model: PreTrainedModelsample_inputs: MutableMapping[str, torch.Tensor | Cache]config: ExportConfigMixin | dict[str, ExportConfigMixin]generation_config: GenerationConfig | None = Nonemulti_token_decode: bool = False ) → dict[str, Any]
Paramètres
- model (PreTrainedModel) —
Le modèle génératif à exporter. Doit prendre en charge
model.generate(**sample_inputs). - sample_inputs (
dict[str, torch.Tensor | Cache]) — Generate kwargs — ce que vous passeriez àmodel.generate(**sample_inputs)(généralementinput_ids+attention_mask, ainsi que les entrées de modalités telles quepixel_values/input_featurespour les modèles multi-modaux). Les kwargs de forward par étape sont capturés en interne. - config (
ExportConfigMixinoudict[str, ExportConfigMixin]) — Configuration spécifique au backend. Passez une configuration unique pour l’appliquer à tous les composants, ou undictindexé par le nom du composant (par ex."image_encoder","language_model","lm_head","decode") pour définir des valeurs par composant — tous les noms de composants doivent être présents dans le dict. - generation_config (GenerationConfig, facultatif) —
Transmis à la capture
generate()(par défaut, celui du modèle). Passez-en un aveccache_implementation="static"pour exporter avec unStaticCachede taille fixe. - multi_token_decode (
bool, facultatif, par défautFalse) — Indique si le composantdecodetraite plusieurs jetons de requête à la fois — un axe de requête dynamique (préremplissage sur un cache vide, continuation à partir du passé sinon) — par rapport à l’étape classique à jeton unique (voir decompose_for_generation()). Ne reste dynamique que lors d’une exportation à forme dynamique (config.dynamic=True).
Retourne
dict[str, Any]
{component_name: backend_specific_artifact} — mêmes clés que
decompose_for_generation(). Les valeurs sont ce que
~HfExporter.export renvoie pour le backend concret (ExportedProgram,
ONNXProgram, ExecutorchProgramManager).
Décomposer un modèle génératif et exporter chaque composant indépendamment.
Gaine fine autour de decompose_for_generation() qui appelle ~HfExporter.export sur chaque paire (submodel, forward_inputs) renvoyée. Si vous avez besoin des paires intermédiaires (submodel, forward_inputs) (pour vérification, entrées personnalisées, saut d'une étape, …), appelez directement decompose_for_generation().
Vérifiez que required_packages sont installés et émettez un avertissement en cas d'écart de version par rapport à tested_versions.
DynamoExporter
Exporter qui convertit un PreTrainedModel en ExportedProgram.
Exemple :
>>> from transformers.exporters.exporter_dynamo import DynamoExporter, DynamoConfig
>>> exporter = DynamoExporter()
>>> exported = exporter.export(model, inputs, config=DynamoConfig(dynamic=True))
>>> outputs = exported.module()(**inputs)export
< source >( model: PreTrainedModelsample_inputs: MutableMapping[str, Any]config: DynamoConfig | dict[str, Any] )
OnnxExporter
Exporteur qui convertit un PreTrainedModel en ONNXProgram ONNX.
Exemple :
>>> 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 diskexport
< source >( model: PreTrainedModelsample_inputs: MutableMapping[str, Any]config: OnnxConfig | dict[str, Any] )
ExecutorchExporter
Exporteur qui convertit un PreTrainedModel en ExecutorchProgramManager ExecuTorch.
Exemple :
>>> 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")export
< source >( model: PreTrainedModelsample_inputs: MutableMapping[str, Any]config: ExecutorchConfig | dict[str, Any] )
Exporter un modèle vers ExecuTorch, en appliquant la préparation du backend et les correctifs d’opérateurs torch.
DynamoConfig
classe 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 )
Paramètres
- dynamic (bool, facultatif, par défaut False) — Indique s'il faut exporter avec des formes dynamiques (symboliques). Si True et que dynamic_shapes n'est pas défini, toutes les dimensions des tenseurs sont définies sur Dim.AUTO automatiquement.
- strict (bool, facultatif, par défaut False) — Indique s'il faut activer le mode strict dans torch.export. Exécute la trace symbolique complète et détecte davantage d'erreurs, mais est plus lent et plus susceptible d'échouer sur des modèles complexes.
- dynamic_shapes (dict[str, Any], facultatif) — Spécifications explicites des formes dynamiques par entrée, transmises à torch.export. Prend le pas sur dynamic.
- prefer_deferred_runtime_asserts_over_guards (bool, facultatif, valeur par défaut False) —
Lorsque True, les gardes de forme dépendantes des données sont émises sous forme d’assertions d’exécution dans le graphe exporté, au lieu d’échouer à l’exportation au moment du traçage si une garde ne tient pas sur l’ensemble de la plage de formes symboliques. La plupart des LLM de type transformer nécessitent que ce paramètre soit défini sur True lors de l’utilisation de bornes
Dim(min=, max=)fines. Ce n’est pas nécessaire avecdynamic=True/Dim.AUTO, oùtorch.exportinfère les relations de forme au lieu de les vérifier par rapport aux bornes déclarées par l’utilisateur. - quantizer ([~exporters.quantizers.ExportQuantizer], facultatif) — Quantification post-entraînement appliquée lors de l’export : [~exporters.quantizers.PT2EQuantizer] ou [~exporters.quantizers.NNCFTorchFXQuantizer] sur le graphe FX pour chaque backend, [~exporters.quantizers.OnnxRuntimeQuantizer] sur le modèle ONNX converti, ou [~exporters.quantizers.NNCFOpenVINOQuantizer] / [~exporters.quantizers.NNCFOnnxQuantizer] sur le modèle OpenVINO / ONNX converti.
Classe de configuration pour l’exportation de modèles via torch.export.
OnnxConfig
classe transformers.exporters.OnnxConfig
< source >( export_format: ExportFormat = <ExportFormat.ONNX: 'onnx'>dynamic: bool = Falsestrict: bool = Falsedynamic_shapes: dict[str, Any] | None = Noneprefer_deferred_runtime_asserts_over_guards: bool = Falsequantizer: ExportQuantizer | None = Noneoutput_path: str | PathLike | None = Noneopset_version: int | None = Noneexternal_data: bool = Trueoptimize: bool = Trueexport_params: bool = Truekeep_initializers_as_inputs: bool = False )
Paramètres
- output_path (
strouPathLike, facultatif) — Chemin de sortie pour le fichier.onnx. SiNone(par défaut), le modèle exporté est conservé en mémoire sous forme d'ONNXProgramet n'est pas écrit sur le disque. - opset_version (
int, facultatif) — Version de l'opset ONNX à cibler. Par défaut, la dernière opset prise en charge par la version installée deonnxscript. - external_data (
bool, facultatif, par défautTrue) — Stocke les grands tenseurs de poids dans un fichier annexe.onnx_datadistinct au lieu de les intégrer dans le protobuf. Requis pour les modèles dont les poids dépassent la limite de 2 Go du protobuf. - optimize (
bool, facultatif, valeur par défautTrue) — Exécute des passes d’optimisationonnxscript(repliement de constantes, élimination du code mort, …) sur le graphe exporté. À désactiver pour les modèles qui rencontrent des bugs dans l’optimiseuronnxscripten amont. - export_params (
bool, facultatif, valeur par défautTrue) — Intègre les poids du modèle dans le graphe ONNX. DéfinissezFalsepour exporter un graphe sans poids (les poids doivent être fournis à l'exécution). - keep_initializers_as_inputs (
bool, facultatif, valeur par défautFalse) — Expose les initialisateurs de poids en tant qu'entrées explicites du graphe. Requis par certains anciens runtime ONNX (opset < 9).
Classe de configuration pour l’exportation de modèles vers ONNX via torch.onnx.export.
Hérite de tous les champs de DynamoConfig (dynamic, strict, dynamic_shapes, prefer_deferred_runtime_asserts_over_guards).
ExecutorchConfig
classe 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 )
Paramètres
- backend (
str, facultatif, par défaut"xnnpack") — Backend ExecuTorch cible. Valeurs prises en charge :"xnnpack"— inférence CPU via la bibliothèque XNNPACK (par défaut ; fonctionne partout)."cuda"— inférence sur GPU via le backend CUDA d’ExecuTorch."mlx"— inférence GPU via le backend ExecuTorch MLX sur Apple Silicon.
- alloc_graph_input (
bool, facultatif, valeur par défautTrue) — Indique si la passe de planification de la mémoire réserve de la mémoire d’arène pour les entrées du graphe. SiFalse, le temps d’exécution utilise directement les tampons d’entrée fournis par l’appelant au lieu de les copier dans l’arène — ainsi, une mutationUSER_INPUT_MUTATIONsur place (par exemple une écriture dans unStaticCache) est appliquée au tenseur de l’appelant plutôt qu’à une copie dans l’arène. - alloc_graph_output (
bool, facultatif, valeur par défautTrue) — Indique si la passe de planification de la mémoire réserve de la mémoire d’arène pour les sorties du graphe. SiFalse, l’appelant doit lier les tampons de sortie à l’exécution (Method::set_output_data_ptr) ; lier une sortie au tampon de son entrée modifiée évite l’aller-retour de copie. - alloc_mutable_buffers (
bool, facultatif, valeur par défautTrue) — Indique si la passe de planification de la mémoire réserve de la mémoire d’arène pour les tampons mutables (état résident dans le modèle). Transmise à laMemoryPlanningPass.
Classe de configuration pour l’exportation de modèles au format ExecuTorch.
Hérite de tous les champs de DynamoConfig (dynamic, strict, dynamic_shapes, prefer_deferred_runtime_asserts_over_guards).
OpenVINOConfig
classe transformers.exporters.OpenVINOConfig
< source >( export_format: ExportFormat = <ExportFormat.OPENVINO: 'openvino'>dynamic: bool = Falsestrict: bool = Falsedynamic_shapes: dict[str, Any] | None = Noneprefer_deferred_runtime_asserts_over_guards: bool = Falsequantizer: ExportQuantizer | None = Noneoutput_path: str | PathLike | None = Nonecompress_to_fp16: bool = Truestateful: bool = True )
Paramètres
- output_path (str ou PathLike, facultatif) —
Chemin de sortie pour le fichier .xml (le fichier .bin correspondant est écrit à côté). Lorsque
None (par défaut), le modèle converti est conservé en mémoire sous forme d’
openvino.Model. - compress_to_fp16 (bool, facultatif, par défaut True) —
Compresse les poids en virgule flottante en FP16 lors de l’enregistrement — réduit la taille sur disque de moitié avec un impact négligeable sur la précision pour la plupart des modèles. Appliqué uniquement lorsque
output_pathest défini. - stateful (bool, facultatif, valeur par défaut 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.
Classe de configuration pour l’exportation de modèles vers OpenVINO IR via openvino.convert_model.
Hérite de tous les champs de [DynamoConfig] (dynamic, strict, dynamic_shapes, prefer_deferred_runtime_asserts_over_guards).
Quantificateurs
classe transformers.exporters.ExportQuantizer
< source >( calibration_dataset: Iterable[dict[str, Any]] | None = None )
Paramètres
- calibration_dataset (
Iterable[dict], facultatif) — Dictionnaires d’entrée sur lesquels le quantificateur effectue l’étalonnage : une liste, ou unDataLoaderdont les lots sont collés en entrées de modèle. Pour~HfExporter.export_for_generation, il s’agit des mots-clés de generate, capturés dans un jeu d’étalonnage par composant. SiNone, un quantificateur nécessitant des données s’étalonne sur les entrées d’échantillon de l’export, avec un avertissement.
Classe de base pour les quantificateurs post-entraînement appliqués lors de l’export.
Un quantiseur déclare les formats d’exportation qu’il prend en charge et les paquets dont il a besoin (avec les versions sur lesquelles il est testé, comme les exportateurs), ainsi que s’il quantise le graphe FX de torch.export, avant toute conversion (de sorte que chaque backend utilise le résultat), ou le modèle dans lequel un backend le convertit (onnx_ir.Model, openvino.Model). L’exportateur le valide par rapport à l’exportation dès le départ, puis appelle ~ExportQuantizer.quantize avec ce modèle et les entrées d’exemple de l’exportation. Sous-classez-le et implémentez quantize pour ajouter une nouvelle méthode de quantification ; un CalibrationSet associe les échantillons de calibration aux entrées propres au modèle.
Quantifier model (le graphe FX si quantizes_fx_graph, sinon le modèle backend) et renvoyer le résultat,
calibré sur calibration_dataset, ou sur les sample_inputs de l’export s’il n’en possède pas.
Lève une exception si ce quantiseur ne peut pas s’exécuter sur une exportation export_format, ou si un package requis est manquant ou trop ancien ; émet un avertissement si l’un d’eux diffère de la version sur laquelle il a été testé.
Une copie de ce quantificateur qui effectue la calibration sur calibration_dataset.
classe transformers.exporters.quantizers.CalibrationSet
< source >( calibration_dataset: Iterable[dict[str, Any]] | Nonesample_inputs: dict[str, Any]transform: Callable[[dict[str, Any]], Any] )
Vue réitérable des échantillons de calibration en tant qu'entrées du modèle.
Les échantillons sont le calibration_dataset du quantificateur, ou les sample_inputs propres à l’export (avec un avertissement, une fois qu’ils sont lus) s’il n’en possède pas. Ils peuvent être n’importe quel mapping, tel qu’un BatchEncoding de tokeniseur. transform mappe chaque échantillon de kwargs en avant sur ce que le modèle quantisé reçoit (kwargs tracés, entrées ONNX, entrées de ports OpenVINO), de manière paresseuse, un échantillon à la fois, à chaque passage.
classe transformers.exporters.PT2EQuantizer
< source >( quantizer: Anycalibration_dataset: Iterable[dict[str, Any]] | None = None )
Paramètres
- quantizer (
torchao.quantization.pt2e.quantizer.Quantizer) — Le quantizer PT2E qui annote le graphe. Ses opérations de quantization/déquantization doivent être prises en charge par le backend cible :X86InductorQuantizerpour inductor, ONNX (QDQ) ou OpenVINO,XNNPACKQuantizerpour ExecuTorch. - calibration_dataset (
Iterable[dict], facultatif) — Dictionnaires d'entrée sur lesquels les observateurs effectuent la calibration (voirExportQuantizer), un passage avant chacun. Pour calibrer sur des lots, passez unDataLoaderqui regroupe les échantillons en dictionnaires d'entrée par lot, au lieu d'une liste d'échantillons unitaires.
Quantifier le graphe FX avec la quantification PyTorch 2 Export (PT2E) : prepare_pt2e insère des observateurs, le jeu de calibration les pilote, et convert_pt2e les remplace par des opérations quantize/dequantize. Fonctionne avec tous les backends d'export.
Exemple :
>>> 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))classe transformers.exporters.OnnxRuntimeQuantizer
< source >( config: OnnxRuntimeStaticConfig | OnnxRuntimeDynamicConfig | None = Nonecalibration_dataset: Iterable[dict[str, Any]] | None = None )
Quantifier le modèle ONNX converti à l’aide des outils d’ONNX Runtime (onnxruntime.quantization) : quantize_static avec un OnnxRuntimeStaticConfig (par défaut), ou quantize_dynamic avec un OnnxRuntimeDynamicConfig.
Exemple :
>>> from transformers.exporters import (
... OnnxConfig,
... OnnxRuntimeDynamicConfig,
... OnnxRuntimeQuantizer,
... OnnxRuntimeStaticConfig,
... )
>>> static = OnnxRuntimeStaticConfig(per_channel=True)
>>> OnnxConfig(quantizer=OnnxRuntimeQuantizer(static, calibration_dataset=samples))
>>> OnnxConfig(quantizer=OnnxRuntimeQuantizer(OnnxRuntimeDynamicConfig()))classe 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 )
Arguments de onnxruntime.quantization.quantize_static : activations et poids int8 (QDQ par défaut), calibrés sur le calibration_dataset du quantiseur. Un champ laissé à None conserve la valeur par défaut d’ONNX Runtime. Consultez quantize_static pour chacun d’eux.
classe 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 )
Arguments de onnxruntime.quantization.quantize_dynamic : poids int8, activations quantifiées à l’exécution, aucune calibration. Un champ laissé à None conserve la valeur par défaut d’ONNX Runtime. Consultez quantize_dynamic pour chacun d’eux.
classe transformers.exporters.NNCFOpenVINOQuantizer
< source >( config: NNCFQuantizationConfig | NNCFWeightCompressionConfig | None = Nonecalibration_dataset: Iterable[dict[str, Any]] | None = None )
Quantifier le modèle OpenVINO converti avec NNCF : nncf.quantize avec un NNCFQuantizationConfig (par défaut), ou nncf.compress_weights avec un NNCFWeightCompressionConfig.
Exemple :
>>> import nncf
>>> from transformers.exporters import NNCFOpenVINOQuantizer, NNCFWeightCompressionConfig, OpenVINOConfig
>>> OpenVINOConfig(quantizer=NNCFOpenVINOQuantizer(calibration_dataset=samples))
>>> OpenVINOConfig(
... quantizer=NNCFOpenVINOQuantizer(NNCFWeightCompressionConfig(mode=nncf.CompressWeightsMode.INT4_SYM))
... )classe transformers.exporters.NNCFOnnxQuantizer
< source >( config: NNCFQuantizationConfig | NNCFWeightCompressionConfig | None = Nonecalibration_dataset: Iterable[dict[str, Any]] | None = None )
Quantifier le modèle ONNX converti avec NNCF via son backend ONNX : nncf.quantize avec un NNCFQuantizationConfig (par défaut, int8 QDQ), ou nncf.compress_weights avec un NNCFWeightCompressionConfig (int4 en tant que MatMulNBits d’ONNX Runtime).
Exemple :
>>> import nncf
>>> from transformers.exporters import NNCFOnnxQuantizer, NNCFWeightCompressionConfig, OnnxConfig
>>> OnnxConfig(quantizer=NNCFOnnxQuantizer(calibration_dataset=samples))
>>> OnnxConfig(quantizer=NNCFOnnxQuantizer(NNCFWeightCompressionConfig(mode=nncf.CompressWeightsMode.INT4_SYM)))classe transformers.exporters.NNCFTorchFXQuantizer
< source >( config: NNCFQuantizationConfig | NNCFWeightCompressionConfig | None = Nonecalibration_dataset: Iterable[dict[str, Any]] | None = None )
Quantifier le graphe FX de torch.export avec NNCF via son backend TorchFX : nncf.quantize avec un NNCFQuantizationConfig (par défaut, les opérations quantize/dequantize), ou nncf.compress_weights avec un NNCFWeightCompressionConfig. Comme PT2EQuantizer, il s’exécute avant toute conversion, de sorte que chaque backend utilise son résultat. ExecuTorch ne réduit que le résultat weight-only : XNNPACK ne délègue pas les opérations quantize/dequantize, et ExecuTorch ne dispose pas de noyaux pour elles.
classe 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 )
Arguments de nncf.quantize : activations et poids int8, calibrés sur le calibration_dataset du quantiseur.
Un champ laissé à None conserve la valeur par défaut de NNCF, à l’exception de model_type, dont la valeur par défaut est nncf.ModelType.TRANSFORMER.
Voir nncf.quantize pour chacun d’eux.
classe 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 )
Arguments de nncf.compress_weights : int8 ou int4 uniquement sur les poids, avec des méthodes prenant en compte les données (AWQ, estimation d’échelle, GPTQ) pour les modes int4. Les modes int8 sont sans données ; les autres effectuent une calibration sur le calibration_dataset du quantiseur. gptq et lora_correction sont exclusifs à OpenVINO. Un champ laissé à None conserve la valeur par défaut de NNCF. Consultez nncf.compress_weights pour chacun d’eux.
Utilitaires
Fonctions de bas niveau qui alimentent export_for_generation, utiles lorsque vous devez intervenir entre la décomposition d'un modèle et l'exportation de chaque composant.
transformers.exporters.utils.get_leaf_tensors
< source >( obj: Any ) → dict[str, torch.Tensor]
Récupérer récursivement tous les tenseurs feuilles d'une structure potentiellement imbriquée.
transformers.exporters.utils.prepare_for_export
< source >( model: PreTrainedModel | torch.nn.Moduleinputs: MutableMapping[str, Any] )
Configure le modèle et les entrées pour l'export. Modifie à la fois model et inputs en place,
renvoyant (model, inputs, output_flags) où output_flags contient les valeurs extraites
de inputs pour use_cache, return_dict, etc. (à appliquer de manière réversible sur model.config par patch_model_config pendant la trace).
- Supprime les entrées d'étiquettes (
labels,future_values) — le calcul de la perte n'est pas pris en charge. - Extrait les drapeaux de sortie (
use_cache,return_dict, …) deinputsafin qu’ils n’apparaissent pas en tant que kwargs tracés ; les valeurs sont renvoyées pour que le bloc de trace les applique àmodel.config. - Pré-calcule les kwargs de vision/audio dépendants des données enregistrés via
@register_export_input_prepareret les écrit dansinputs. - Convertit les tenseurs d’entrée pour correspondre au
dtype/devicedu modèle.
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]]
Retourne
dict[str, tuple[torch.nn.Module, dict]]
{"prefill": (model, prefill_inputs), "decode": (model, decode_inputs)}.
Exécutez model.generate() et capturez les entrées de préremplissage et de décodage.
Réutilise le mécanisme complet de génération afin que chaque architecture (decoder-only, SSM, encoder-decoder, multi-modal, …) reçoive des entrées correctes sans réimplémenter la boucle.
generation_config est transmis à generate() (en utilisant par défaut celui du modèle), de sorte que les entrées capturées utilisent le cache que generate() construirait. Transmettez-en un avec cache_implementation="static" et max_cache_len=N pour capturer un cache de taille statique dans les entrées de décodage — la base d’une exportation avec cache statique. max_cache_len dimensionne le cache indépendamment de la capture, de sorte que le décodage exporté utilise un cache fixe [..., N, ...] plutôt qu’un cache qui croît.
Lorsque multi_token_decode est actif, le composant decode est capturé comme un décodage multi-tokens — deux étapes de décodage consécutives fusionnées (voir _merge_decode_calls) afin que son axe de séquence de requête reste symbolique (un décodage mono-token spécialiserait cet axe à 1). Il gère ensuite à la fois un seul token (décodage ordinaire) et plusieurs (continuation à partir du passé, ou un préremplissage simple si le cache est vide). Sinon, decode est le décodage mono-token classique.
transformers.exporters.utils.decompose_multimodal
< source >( model: PreTrainedModelinputs: dict[str, Any] ) → dict[str, tuple[torch.nn.Module, dict]]
Retourne
dict[str, tuple[torch.nn.Module, dict]]
Une entrée name: (module, inputs) par sous-module détecté (encodeur image/audio, projecteur, modèle de langage, lm_head).
Lève
ValueError
ValueError— si aucun sous-module multi-modal connu n'est trouvé sur le modèle.
Capturer les entrées de chaque sous-module multi-modal via un seul passage avant.
Détecte tous les sous-modules multi-modaux connus par nom d'attribut (tour de vision, projecteur, modèle de langage, lm_head, …) et capture leurs kwargs de forward lors d'un appel model(**inputs).
Chaque sous-module est renvoyé comme une entrée distincte name: (module, inputs) pour un export indépendant. L'étape de fusion des jetons (par exemple masked_scatter pour les modèles multi-modaux) est volontairement laissée en dehors des graphes exportés — il incombe à l'appelant d'assembler inputs_embeds à partir des sorties de l'encodeur avant d'exécuter le décodeur.
transformers.exporters.utils.decompose_for_generation
< source >( model: PreTrainedModelinputs: dict[str, Any]generation_config: Any = Nonemulti_token_decode: bool = False ) → `{component_name
Paramètres
- model — Modèle génératif. Doit prendre en charge
model.generate(**inputs). - inputs — arguments de Generate — ce que vous passeriez à
model.generate(**inputs). - generation_config —
GenerationConfigfacultatif transmis àgenerate()lors de la capture. Transmettez-en un aveccache_implementation="static"+max_cache_len=Npour exporter avec un cache de taille statique (voirdecompose_prefill_decode). - multi_token_decode — Si
True, capture le composantdecodecomme un décodage multi-tokens (axe de séquence de requête dynamique : plusieurs tokens à la fois — continuation à partir du passé, ou un simple préremplissage si le cache est vide) ; un décodage mono-token ne peut pas rester dynamique (voirdecompose_prefill_decode).
Retourne
`{component_name
(submodel, forward_inputs)}. Keys are “prefill”/“decode”for plain generative models and”/“multi_modal_projector”/“language_model”/“lm_head”/“decode”` for multi-modal generative models.
Décomposer un modèle génératif en paires (model, forward_inputs) exportables indépendamment.
Exécute decompose_prefill_decode pour capturer les kwargs de préremplissage et de décodage en avant à partir d'un appel réel à model.generate(**inputs, max_new_tokens=2). Si le préremplissage est multimodal (selon is_multimodal), il le découpe ensuite en une entrée par sous-module (encodeur vision/audio, projecteur, modèle de langage, lm_head) via decompose_multimodal.
Retourne True si le modèle est multimodal avec des encodeurs modaux et un modèle de langage.
Un modèle qui n'est pas un PreTrainedModel (par exemple un simple nn.Module) ne dispose pas d'accesseurs canoniques get_encoder/get_decoder et n'est pas multimodal, il renvoie donc directement False.