Transformers documentation
Exportadores
Exportadores
Novos backends de exportação podem ser adicionados ao Transformers por meio da herança de HfExporter.
Aprenda a usar os exportadores integrados no guia Exporters.
AutoHfExporter
A classe exportadora Auto-HF que cuida da instanciação automática para o HfExporter correto, dado o ExportConfig.
Carregue uma instância de exportador a partir de um modelo/checkpoint pré-treinado que inclui uma configuração de exportação.
Ainda não implementado — espaço reservado para um fluxo de trabalho de “receita de exportação” de primeira classe.
A ideia: os proprietários dos modelos publicam um export_config.json (ou um campo export_config em config.json) junto com seus pesos no Hub. Esse arquivo registra as configurações que o proprietário já validou para sua arquitetura — o formato de destino (dynamo / onnx / executorch), especificações exatas de formas dinâmicas (por exemplo, text_ids dinâmico até 4096, tiles de imagem fixos em 448, batch=1 para implantação em dispositivos de borda), a flag strict, o opset do ONNX, o layout de prefill versus decode, a escolha do backend do ExecuTorch e qualquer outro parâmetro que hoje existe como conhecimento tácito em um README ou em um notebook privado.
Em seguida, os consumidores recebem a exportação validada pelo proprietário em uma única chamada:
exporter = AutoHfExporter.from_pretrained("org/model-name")
program = exporter.export(model, inputs)Complementa o registro [register_export_input_preparer]: o proprietário fornece a especificação de forma via export_config.json, enquanto o transformers fornece as pré-computações dependentes de dados (cu_seqlens, ids de posição de visão, índices de janela, …) para essa arquitetura. Juntos, eles cobrem as duas partes mais difíceis da exportação de novos modelos — conhecer o contrato de forma correto e preparar os inputs corretos —, de modo que os usuários a jusante não precisem rederivar nenhum dos dois do zero (e não quebrem em produção quando errarem).
Retorna True se o dict fornecido descreve um export_format que possui tanto uma classe de configuração registrada quanto uma classe de exportador registrada. Emite um aviso com uma mensagem acionável quando o formato está totalmente ausente, desconhecido ou apenas parcialmente registrado.
AutoExportConfig
A classe de configuração de exportação Auto-HF que se encarrega de despachar automaticamente para a configuração de exportação correta, dada uma configuração de exportação armazenada em um dicionário.
HfExporter
Classe base abstrata para todos os exportadores do Transformers.
Subclasse e implemente ~HfExporter.export para adicionar um novo backend de exportação.
export
< source >( model: PreTrainedModelsample_inputs: MutableMapping[str, torch.Tensor | Cache]config: ExportConfigMixin )
Parâmetros
- model (PreTrainedModel) — O modelo a ser exportado.
- sample_inputs (
dict[str, torch.Tensor | Cache]) — Forward kwargs — o que você passaria paramodel(**sample_inputs). Eles são usados diretamente como entradas de exemplo durante o tracing. Para uma exportação de etapa de decodificação autorregressiva, isso significa que você precisa incluirpast_key_values,cache_position, etc. Se você tiver apenas entradas no estilo geração, use~HfExporter.export_for_generationem vez disso — ele executamodel.generatepara você e exporta cada etapa. - config (
ExportConfigMixin) — Configuração específica do backend.
Exporte o modelo e retorne o objeto de programa específico do 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]
Parâmetros
- model (PreTrainedModel) —
O modelo generativo a ser exportado. Deve suportar
model.generate(**sample_inputs). - sample_inputs (
dict[str, torch.Tensor | Cache]) — Generate kwargs — o que você passaria paramodel.generate(**sample_inputs)(tipicamenteinput_ids+attention_mask, além de qualquer entrada de modalidade, comopixel_values/input_featurespara modelos multimodais). Os kwargs de forward por etapa são capturados internamente. - config (
ExportConfigMixinoudict[str, ExportConfigMixin]) — Configuração específica do backend. Passe uma única configuração para aplicar a todos os componentes, ou umdictcom chaves pelo nome do componente (por exemplo,"image_encoder","language_model","lm_head","decode") para sobrescrever por componente — todos os nomes de componentes devem estar presentes no dict. - generation_config (GenerationConfig, opcional) —
Encaminhado para a captura de
generate()(padrão: a própria do modelo). Passe um comcache_implementation="static"para exportar contra umStaticCachede tamanho fixo. - multi_token_decode (
bool, opcional, padrãoFalse) — Se o componentedecodeprocessa múltiplos tokens de consulta de uma vez — um eixo de consulta dinâmico (prefill em um cache vazio, continuação a partir do passado caso contrário) — em vez do passo clássico de token único (veja decompose_for_generation()). Permanece dinâmico apenas sob uma exportação de forma dinâmica (config.dynamic=True).
Retorna
dict[str, Any]
{component_name: backend_specific_artifact} — mesmas chaves de
decompose_for_generation(). Os valores são o que
~HfExporter.export retorna para o backend específico (ExportedProgram,
ONNXProgram, ExecutorchProgramManager).
Decomponha um modelo generativo e exporte cada componente de forma independente.
Wrapper fino em torno de decompose_for_generation() que chama ~HfExporter.export em cada par (submodel, forward_inputs) retornado. Se você precisar
dos pares intermediários (submodel, forward_inputs) (para verificação, entradas personalizadas,
pular uma etapa, …), chame decompose_for_generation() diretamente.
Verifique se os required_packages estão instalados e emita um aviso em caso de divergência de versão em relação aos tested_versions.
DynamoExporter
Exportador que converte um PreTrainedModel em um ExportedProgram.
Exemplo:
>>> 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
Exportador que converte um PreTrainedModel em um ONNXProgram ONNX.
Exemplo:
>>> 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
Exportador que converte um PreTrainedModel em um ExecutorchProgramManager do ExecuTorch.
Exemplo:
>>> 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] )
Exporte um modelo para o ExecuTorch, aplicando a preparação do backend e patches de operações do 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 )
Parâmetros
- dynamic (bool, opcional, padrão False) — Se deve exportar com formas dinâmicas (simbólicas). Quando True e dynamic_shapes não está definido, todas as dimensões dos tensors são definidas como Dim.AUTO automaticamente.
- strict (bool, opcional, padrão False) — Se deve ativar o modo estrito no torch.export. Executa o rastreamento simbólico completo e detecta mais erros, mas é mais lento e tem maior probabilidade de falhar em modelos complexos.
- dynamic_shapes (dict[str, Any], opcional) — Especificações explícitas de formas dinâmicas por entrada, passadas para torch.export. Tem precedência sobre dynamic.
- prefer_deferred_runtime_asserts_over_guards (bool, opcional, padrão False) —
Quando True, as guards de forma dependentes de dados são emitidas como asserts de runtime no grafo exportado, em vez de falhar a exportação no momento do trace quando uma guard não se mantém ao longo de todo o intervalo simbólico de formas. A maioria dos LLMs transformer precisa que isso esteja definido como True ao usar limites finos de
Dim(min=, max=). Não é necessário comdynamic=True/Dim.AUTO, onde otorch.exportinfere as relações de forma em vez de verificá-las contra os limites declarados pelo usuário. - quantizer ([~exporters.quantizers.ExportQuantizer], opcional) — Quantização pós-treino aplicada durante a exportação: [~exporters.quantizers.PT2EQuantizer] ou [~exporters.quantizers.NNCFTorchFXQuantizer] no grafo FX para todos os backends, [~exporters.quantizers.OnnxRuntimeQuantizer] no modelo ONNX convertido, ou [~exporters.quantizers.NNCFOpenVINOQuantizer] / [~exporters.quantizers.NNCFOnnxQuantizer] no modelo OpenVINO / ONNX convertido.
Classe de configuração para exportar modelos 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 )
Parâmetros
- output_path (
strouPathLike, opcional) — Caminho de saída para o arquivo.onnx. QuandoNone(padrão), o modelo exportado é mantido em memória como umONNXPrograme não é gravado em disco. - opset_version (
int, opcional) — Versão do opset ONNX a ser usada como alvo. O padrão é a versão mais recente do opset suportada pela versão instalada doonnxscript. - external_data (
bool, opcional, padrãoTrue) — Armazena tensores de pesos grandes em um arquivo lateral.onnx_dataseparado, em vez de incorporá-los ao protobuf. Obrigatório para modelos cujos pesos excedem o limite de 2 GB do protobuf. - optimize (
bool, opcional, padrãoTrue) — Executa passes de otimização doonnxscript(dobramento de constantes, eliminação de código morto, …) no grafo exportado. Desative para modelos que encontram bugs no otimizador upstream doonnxscript. - export_params (
bool, opcional, padrãoTrue) — Incorpora os pesos do modelo no grafo ONNX. Defina comoFalsepara exportar um grafo sem pesos (os pesos devem ser fornecidos em tempo de execução). - keep_initializers_as_inputs (
bool, opcional, padrãoFalse) — Expor os inicializadores de pesos como entradas explícitas do grafo. Necessário para alguns runtimes ONNX mais antigos (opset < 9).
Classe de configuração para exportar modelos para ONNX via torch.onnx.export.
Herdita todos os campos 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 )
Parâmetros
- backend (
str, opcional, padrão é"xnnpack") — Backend do ExecuTorch de destino. Valores suportados:"xnnpack"— Inferência em CPU por meio da biblioteca XNNPACK (padrão; funciona em qualquer lugar)."cuda"— Inferência em GPU por meio do backend CUDA do ExecuTorch."mlx"— inferência em GPU por meio do backend ExecuTorch MLX em Apple Silicon.
- alloc_graph_input (
bool, opcional, padrãoTrue) — Se a etapa de planejamento de memória reserva memória de arena para as entradas do grafo. QuandoFalse, o tempo de execução usa diretamente os buffers de entrada fornecidos pelo chamador, em vez de copiá-los para a arena — assim, umaUSER_INPUT_MUTATIONin-place (por exemplo, uma escrita emStaticCache) é aplicada no tensor do chamador, e não em uma cópia da arena. - alloc_graph_output (
bool, opcional, padrãoTrue) — Se a etapa de planejamento de memória reserva memória de arena para as saídas do grafo. QuandoFalse, o chamador deve vincular os buffers de saída em tempo de execução (Method::set_output_data_ptr); vincular uma saída ao buffer da sua entrada mutada evita a cópia de saída. - alloc_mutable_buffers (
bool, opcional, padrãoTrue) — Se a etapa de planejamento de memória reserva memória de arena para buffers mutáveis (estado residente no modelo). Transmitido para oMemoryPlanningPass.
Classe de configuração para exportar modelos para o formato ExecuTorch.
Herdita todos os campos 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 )
Parâmetros
- output_path (str ou PathLike, opcional) —
Caminho de saída para o arquivo .xml (o .bin correspondente é gravado ao lado). Quando
None (padrão), o modelo convertido é mantido em memória como um
openvino.Model. - compress_to_fp16 (bool, opcional, padrão True) —
Comprime os pesos em ponto flutuante para FP16 ao salvar — reduz o tamanho em disco pela metade com impacto desprezível na precisão na maioria dos modelos. Aplicado apenas quando
output_pathestá definido. - 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.
Classe de configuração para exportar modelos para o IR do OpenVINO via openvino.convert_model.
Herdita todos os campos de [DynamoConfig] (dynamic, strict, dynamic_shapes, prefer_deferred_runtime_asserts_over_guards).
Quantizadores
classe transformers.exporters.ExportQuantizer
< source >( calibration_dataset: Iterable[dict[str, Any]] | None = None )
Parâmetros
- calibration_dataset (
Iterable[dict], opcional) — Dicionários de entrada nos quais o quantizador realiza a calibração: uma lista, ou umDataLoadercujos lotes são colacionados para as entradas do modelo. Para~HfExporter.export_for_generation, são os kwargs de generate, capturados em um conjunto de calibração por componente. QuandoNone, um quantizador que precisa de dados realiza a calibração nas próprias entradas de exemplo da exportação, com um aviso.
Classe base para quantizadores de pós-treino aplicados durante a exportação.
Um quantizer declara os formatos de exportação que suporta e os pacotes de que precisa (com as versões em que foi testado, assim como os exporters) e se ele quantiza o grafo FX de torch.export, antes de qualquer conversão (de modo que cada backend recebe o resultado), ou o modelo para o qual um backend o converte (onnx_ir.Model, openvino.Model). O exporter valida-o em relação à exportação antecipadamente e, em seguida, chama ~ExportQuantizer.quantize com esse modelo e as entradas de exemplo da exportação. Subclasse-o e implemente quantize para adicionar um novo método de quantização; um CalibrationSet mapeia as amostras de calibração para as entradas próprias do modelo.
Quantize model (o grafo FX, se quantizes_fx_graph, caso contrário, o modelo do backend) e retorne o resultado, calibrado em calibration_dataset ou nos sample_inputs da exportação, quando não houver nenhum.
Gera um erro se este quantizador não puder ser executado em uma exportação export_format, ou se um pacote necessário estiver ausente ou for muito antigo;
emite um aviso quando uma versão difere da versão em que foi testado.
Uma cópia deste quantizador que calibra em 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] )
Visualização re-iterável das amostras de calibração como entradas do modelo.
As amostras são o calibration_dataset do quantizador, ou o próprio sample_inputs da exportação (com um aviso, uma vez que são lidos) quando este não possui nenhum. Podem ser qualquer mapeamento, como um BatchEncoding de um tokenizador. O transform mapeia cada amostra de kwarg de forward para o que o modelo quantizado recebe (kwarg rastreados, feeds ONNX, feeds de porta OpenVINO), de forma preguiçosa, uma amostra por vez, em cada passagem.
classe transformers.exporters.PT2EQuantizer
< source >( quantizer: Anycalibration_dataset: Iterable[dict[str, Any]] | None = None )
Parâmetros
- quantizer (
torchao.quantization.pt2e.quantizer.Quantizer) — O quantizador PT2E que anota o grafo. Suas operações de quantize/dequantize devem ser aquelas suportadas pelo backend de destino:X86InductorQuantizerpara inductor, ONNX (QDQ) ou OpenVINO,XNNPACKQuantizerpara ExecuTorch. - calibration_dataset (
Iterable[dict], opcional) — Dicionários de entrada nos quais os observadores realizam a calibração (vejaExportQuantizer), um forward para cada um. Para calibrar em lotes, passe umDataLoaderque agrupa as amostras em dicionários de entrada em lote, em vez de uma lista de amostras individuais.
Quantize o grafo FX com a quantização PyTorch 2 Export (PT2E): prepare_pt2e insere observadores, o conjunto de calibração os direciona e convert_pt2e os substitui por operações de quantize/dequantize. Funciona com todos os backends de exportação.
Exemplo:
>>> 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 )
Quantize o modelo ONNX convertido com as próprias ferramentas do ONNX Runtime (onnxruntime.quantization): quantize_static com um OnnxRuntimeStaticConfig (o padrão) ou quantize_dynamic com um OnnxRuntimeDynamicConfig.
Exemplo:
>>> 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 )
Argumentos de onnxruntime.quantization.quantize_static: ativações e pesos int8 (QDQ por padrão), calibrados
no calibration_dataset do quantizador. Um campo deixado como None mantém o padrão do ONNX Runtime. Consulte quantize_static para cada um.
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 )
Argumentos de onnxruntime.quantization.quantize_dynamic: pesos int8, ativações quantizadas em tempo de execução, sem
calibração. Um campo deixado como None mantém o padrão do ONNX Runtime. Consulte quantize_dynamic para cada um.
classe transformers.exporters.NNCFOpenVINOQuantizer
< source >( config: NNCFQuantizationConfig | NNCFWeightCompressionConfig | None = Nonecalibration_dataset: Iterable[dict[str, Any]] | None = None )
Quantize o modelo OpenVINO convertido com NNCF: nncf.quantize com um NNCFQuantizationConfig (o padrão), ou nncf.compress_weights com um NNCFWeightCompressionConfig.
Exemplo:
>>> 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 )
Quantize o modelo ONNX convertido com NNCF por meio de seu backend ONNX: nncf.quantize com um NNCFQuantizationConfig (o padrão, int8 QDQ), ou nncf.compress_weights com um NNCFWeightCompressionConfig (int4 como MatMulNBits do ONNX Runtime).
Exemplo:
>>> 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 )
Quantize o grafo FX do torch.export com NNCF por meio de seu backend TorchFX: nncf.quantize com um NNCFQuantizationConfig (o padrão, ops quantize/dequantize), ou nncf.compress_weights com um NNCFWeightCompressionConfig. Assim como o PT2EQuantizer, ele é executado antes de qualquer conversão, de modo que todos os backends utilizam seu resultado. O ExecuTorch reduz apenas o resultado somente de pesos: o XNNPACK não delega os ops quantize/dequantize, e o ExecuTorch não possui kernels para eles.
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 )
Argumentos de nncf.quantize: ativações e pesos int8, calibrados no calibration_dataset do quantizador.
Um campo deixado como None mantém o padrão do NNCF, exceto model_type, cujo padrão é nncf.ModelType.TRANSFORMER.
Consulte nncf.quantize para cada um.
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 )
Argumentos de nncf.compress_weights: int8 ou int4 apenas para pesos, com métodos conscientes dos dados (AWQ, estimativa de escala, GPTQ) para os modos int4. Os modos int8 são independentes de dados; os outros calibram no calibration_dataset do quantizador. gptq e lora_correction são exclusivos do OpenVINO. Um campo deixado como None mantém o padrão do NNCF. Consulte nncf.compress_weights para cada um.
Utilitários
Funções de nível inferior que sustentam o export_for_generation, úteis quando você precisa intervir entre a decomposição de um modelo e a exportação de cada componente.
transformers.exporters.utils.get_leaf_tensors
< source >( obj: Any ) → dict[str, torch.Tensor]
Recupere recursivamente todos os tensores folha de uma estrutura potencialmente aninhada.
transformers.exporters.utils.prepare_for_export
< source >( model: PreTrainedModel | torch.nn.Moduleinputs: MutableMapping[str, Any] )
Configure o modelo e as entradas para exportação. Modifica tanto model quanto inputs no local,
retornando (model, inputs, output_flags), onde output_flags contém os valores removidos
de inputs para use_cache, return_dict, etc. (a serem aplicados de forma reversível em model.config por patch_model_config durante o trace).
- Remove as entradas de rótulo (
labels,future_values) — o cálculo de perda não é suportado. - Remove as flags de saída (
use_cache,return_dict, …) deinputspara que não apareçam como kwargs rastreados; os valores são retornados para que o bloco de rastreamento os aplique emmodel.config. - Pré-computa os kwargs de visão/áudio dependentes de dados registrados via
@register_export_input_preparere os grava eminputs. - Converte os tensores de entrada para corresponder ao
dtype/devicedo modelo.
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]]
Retorna
dict[str, tuple[torch.nn.Module, dict]]
{"prefill": (model, prefill_inputs), "decode": (model, decode_inputs)}.
Execute model.generate() e capture as entradas de prefill e decode.
Reutiliza todo o mecanismo de geração para que cada arquitetura (somente decodificador, SSM, codificador-decodificador, multimodal, …) receba entradas corretas sem reimplementar o loop.
generation_config é encaminhado para generate() (padrão: o próprio do modelo), de modo que as entradas capturadas usam o cache que generate() construiria. Passe um com cache_implementation="static" e max_cache_len=N para capturar um cache de tamanho estático nas entradas de decodificação — a base para uma exportação com cache estático. max_cache_len dimensiona o cache independentemente da captura, de modo que a decodificação exportada usa um cache fixo [..., N, ...] em vez de um que cresce.
Quando multi_token_decode, o componente decode é capturado como um multi-token decode — duas etapas consecutivas de decode mescladas (veja _merge_decode_calls) para que o eixo de sequência de consulta permaneça simbólico (um decode de token único especializaria esse eixo para 1). Em seguida, ele lida tanto com um token (decodificação comum) quanto com muitos (continuação a partir do passado, ou um prefill simples quando o cache está vazio). Caso contrário, decode é o decode clássico de token único.
transformers.exporters.utils.decompose_multimodal
< source >( model: PreTrainedModelinputs: dict[str, Any] ) → dict[str, tuple[torch.nn.Module, dict]]
Retorna
dict[str, tuple[torch.nn.Module, dict]]
Uma entrada name: (module, inputs)
para cada submódulo detectado (codificador de imagem/áudio, projetor, modelo de linguagem, lm_head).
Exceções
ValueError
ValueError— se nenhum submódulo multimodal conhecido for encontrado no modelo.
Capture as entradas de cada submódulo multimodal por meio de uma única passagem de frente.
Detecta todos os submódulos multimodais conhecidos pelo nome do atributo (torre de visão, projetor, modelo de linguagem, lm_head, …) e captura os kwargs do forward deles durante uma chamada model(**inputs).
Cada submódulo é retornado como uma entrada separada name: (module, inputs) para exportação independente. A etapa de mesclagem de tokens (por exemplo, masked_scatter para modelos multimodais) é intencionalmente deixada fora dos grafos exportados — é responsabilidade do chamador montar inputs_embeds a partir das saídas do codificador antes de executar o decodificador.
transformers.exporters.utils.decompose_for_generation
< source >( model: PreTrainedModelinputs: dict[str, Any]generation_config: Any = Nonemulti_token_decode: bool = False ) → `{component_name
Parâmetros
- model — Modelo generativo. Deve suportar
model.generate(**inputs). - inputs — kwargs de Generate — o que você passaria para
model.generate(**inputs). - generation_config —
GenerationConfigopcional encaminhado paragenerate()durante a captura. Passe um comcache_implementation="static"+max_cache_len=Npara exportar contra um cache de tamanho estático (vejadecompose_prefill_decode). - multi_token_decode — Quando
True, captura o componentedecodecomo um decode de múltiplos tokens (eixo de sequência de consulta dinâmico: múltiplos tokens de uma vez — continuação a partir do passado, ou um prefill simples quando o cache está vazio); um decode de token único não pode permanecer dinâmico (vejadecompose_prefill_decode).
Retorna
`{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.
Decomponha um modelo generativo em pares (model, forward_inputs) exportáveis de forma independente.
Executa decompose_prefill_decode para capturar os kwargs de forward de prefill e decode a partir de uma chamada real de model.generate(**inputs, max_new_tokens=2). Se o prefill for multimodal (conforme is_multimodal),
ele o divide ainda em uma entrada por submódulo (codificador de visão/áudio, projetor, modelo de linguagem, lm_head) por meio de decompose_multimodal.
Retorna True se o modelo for multimodal, com codificadores de modalidade e um modelo de linguagem.
Um modelo que não é um PreTrainedModel (por exemplo, um nn.Module simples) não possui os acessores canônicos get_encoder/get_decoder e, trivialmente, não é multimodal, portanto, retorna False diretamente.