Transformers documentation
Exporters
Exporters
HfExporter를 서브클래스로 만들어 Transformers에 새로운 export backends를 추가할 수 있습니다.
Exporters 가이드에서 내장된 내보내기 도구를 사용하는 방법을 배워보세요.
AutoHfExporter
ExportConfig를 기반으로 올바른 HfExporter를 자동으로 인스턴스화하는 Auto-HF exporter 클래스입니다.
export config를 포함하는 사전 학습된 모델/체크포인트에서 exporter 인스턴스를 로드합니다.
아직 구현되지 않음 — 1급 “export recipe” 워크플로우를 위한 자리표시자.
아이디어: 모델 소유자는 Hub에서 가중치와 함께 export_config.json(또는 config.json의 export_config 필드)을 게시합니다. 이 파일은 해당 아키텍처에 대해 소유자가 이미 검증한 설정을 담고 있습니다. 대상 형식(dynamo / onnx / executorch), 정확한 동적 형식 사양(예: text_ids는 4096까지 동적, 이미지 타일은 448로 고정, 엣지 배포를 위한 batch=1), strict 플래그, ONNX opset, prefill과 decode 레이아웃, ExecuTorch 백엔드 선택, 그리고 현재 README나 비공개 노트북에 구전 지식으로 존재하는 기타 모든 설정 항목입니다.
그 후, Consumers는 한 번의 호출로 소유자가 검증한 내보내기를 가져옵니다:
exporter = AutoHfExporter.from_pretrained("org/model-name")
program = exporter.export(model, inputs)[register_export_input_preparer] 레지스트리와 조합됩니다. 소유자는 export_config.json을 통해 shape spec을 제공하고, transformers는 해당 아키텍처에 대해 데이터에 종속적인 사전 계산(cu_seqlens, vision position ids, window indices, …)을 제공합니다. 이를 통해 새로운 모델 내보내기의 두 가지 어려운 부분, 즉 올바른 shape contract를 아는 것과 올바른 입력을 준비하는 것을 모두 커버하므로, 다운스트림 사용자는 이 둘을 처음부터 다시 파생할 필요가 없으며(잘못했을 때 프로덕션에서 깨지는 문제도 방지됩니다).
제공된 dict가 등록된 config 클래스와 등록된 exporter 클래스를 모두 갖춘 export_format을 설명하는지 확인하여 True를 반환합니다. 포맷이 완전히 누락된 경우, 알려지지 않은 경우, 또는 일부만 등록된 경우 실행 가능한 메시지로 경고를 표시합니다.
AutoExportConfig
사전에 저장된 export config를 기반으로 올바른 export config로 자동으로 분배하는 작업을 담당하는 Auto-HF export config 클래스입니다.
HfExporter
모든 Transformers 내보내기기의 추상 베이스 클래스입니다.
새로운 export backends를 추가하려면 ~HfExporter.export를 서브클래스화하고 구현하세요.
export
< source >( model: PreTrainedModelsample_inputs: MutableMapping[str, torch.Tensor | Cache]config: ExportConfigMixin )
매개변수
- model (PreTrainedModel) — 내보낼 모델.
- sample_inputs (
dict[str, torch.Tensor | Cache]) — Forward kwargs —model(**sample_inputs)에 전달할 인자들입니다. 트레이싱 중에 예시 입력으로 직접 사용됩니다. 오토레그레시브 디코드 스텝 내보내기의 경우,past_key_values,cache_position등을 포함해야 합니다. 생성 스타일의 입력만 있는 경우, 대신~HfExporter.export_for_generation을 사용하세요. 이 메서드는model.generate를 실행하고 각 단계를 내보냅니다. - config (
ExportConfigMixin) — 백엔드별 구성입니다.
모델을 내보내고 백엔드별 프로그램 객체를 반환합니다.
export_for_generation
< 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]
매개변수
- 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]) — 백엔드별 구성입니다. 모든 컴포넌트에 적용할 단일 구성을 전달하거나, 컴포넌트 이름(예:"image_encoder","language_model","lm_head","decode")을 키로 하는dict를 전달하여 컴포넌트별로 오버라이드할 수 있습니다 — dict에는 모든 컴포넌트 이름이 포함되어야 합니다. - generation_config (GenerationConfig, 선택 사항) —
generate()캡처로 전달됩니다(기본값은 모델 자체의 설정입니다). 고정 크기StaticCache에 대해 내보내려면cache_implementation="static"가 포함된 설정을 전달하세요. - multi_token_decode (
bool, 선택 사항, 기본값False) —decode구성 요소가 여러 개의 쿼리 토큰을 한 번에 처리하는지 여부입니다. 이는 동적 쿼리 축(빈 캐시에서의 prefill, 그 외에는 과거로부터의 연속 처리)을 사용하는 방식이며, decompose_for_generation()에서 설명하는 고전적인 단일 톱 단계와 대비됩니다. 동적 모양 내보내기(config.dynamic=True) 환경에서만 동적으로 유지됩니다.
반환값
dict[str, Any]
{component_name: backend_specific_artifact} — decompose_for_generation()과 동일한 키를 가집니다. 값은 ~HfExporter.export가 특정 백엔드(ExportedProgram, ONNXProgram, ExecutorchProgramManager)에 대해 반환하는 내용입니다.
생성 모델을 분해하고 각 구성 요소를 독립적으로 내보냅니다.
Thin wrapper around decompose_for_generation() that calls ~HfExporter.export on every returned (submodel, forward_inputs) pair. If you need
the intermediate (submodel, forward_inputs) pairs (for verification, custom inputs,
skipping a stage, …), call decompose_for_generation() directly.
required_packages가 설치되어 있는지 확인하고 tested_versions와 버전이 일치하지 않으면 경고합니다.
DynamoExporter
ExportedProgram으로 PreTrainedModel을 변환하는 Exporter입니다.
예:
>>> 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
PreTrainedModel을 ONNX ONNXProgram으로 변환하는 Exporter입니다.
예:
>>> 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
PreTrainedModel을 ExecuTorch ExecutorchProgramManager로 변환하는 Exporter입니다.
예:
>>> 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] )
ExecuTorch로 모델을 내보내며, 백엔드 준비 및 torch op 패치를 적용합니다.
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, 선택 사항, 기본값 False) — 동적(상징적) 모양으로 내보낼지 여부입니다. True이고 dynamic_shapes가 설정되지 않은 경우, 모든 텐서 차원이 자동으로 Dim.AUTO로 설정됩니다.
- strict (bool, 선택 사항, 기본값 False) — torch.export에서 strict 모드를 활성화할지 여부입니다. 전체 symbolic trace를 실행하여 더 많은 오류를 포착하지만, 속도가 느리고 복잡한 모델에서 실패할 가능성이 더 높습니다.
- dynamic_shapes (dict[str, Any], 선택 사항) — torch.export에 전달되는 입력별 명시적 동적 형식 사양입니다. dynamic보다 우선합니다.
- prefer_deferred_runtime_asserts_over_guards (bool, optional, 기본값 False) —
True인 경우, 데이터에 종속적인 shape guard가 전체 symbolic shape 범위에서 유지되지 않아 trace 시점에 export가 실패하는 대신, export된 그래프에서 runtime assert로 출력됩니다. 대부분의 transformer LLM은 세밀한
Dim(min=, max=)경계를 사용할 때 이 값을 True로 설정해야 합니다.dynamic=True/Dim.AUTO를 사용하는 경우,torch.export가 사용자가 명시한 경계와 대조하여 shape 관계를 검증하는 대신 이를 추론하므로 이 설정은 필요하지 않습니다. - quantizer ([~exporters.quantizers.ExportQuantizer], 선택 사항) — 내보내기 과정에서 적용되는 학습 후 양자화: 모든 백엔드에서 FX 그래프에 [~exporters.quantizers.PT2EQuantizer] 또는 [~exporters.quantizers.NNCFTorchFXQuantizer], 변환된 ONNX 모델에 [~exporters.quantizers.OnnxRuntimeQuantizer], 또는 변환된 OpenVINO / ONNX 모델에 [~exporters.quantizers.NNCFOpenVINOQuantizer] / [~exporters.quantizers.NNCFOnnxQuantizer]를 사용합니다.
torch.export를 통해 모델을 내보내는 데 사용되는 설정 클래스입니다.
OnnxConfig
class 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 )
매개변수
- output_path (
str또는PathLike, 선택 사항) —.onnx파일의 출력 경로입니다.None(기본값)인 경우 내보낸 모델은ONNXProgram으로 메모리에 유지되며 디스크에 기록되지 않습니다. - opset_version (
int, 선택 사항) — 대상으로 할 ONNX opset 버전입니다. 설치된onnxscript버전이 지원하는 최신 opset이 기본값입니다. - external_data (
bool, 선택 사항, 기본값True) — 크기가 큰 가중치 텐서를 protobuf에 내장하는 대신 별도의.onnx_data사이드카 파일에 저장합니다. 가중치가 2 GB protobuf 한도를 초과하는 모델에 필요합니다. - optimize (
bool, 선택 사항, 기본값True) — 내보낸 그래프에 대해onnxscript최적화 패스(상수 접기, 데드 코드 제거, …)를 실행합니다. 상위onnxscript최적화기 버그에 부딪히는 모델의 경우 비활성화하세요. - export_params (
bool, 선택 사항, 기본값True) — 모델 가중치를 ONNX 그래프에 내장합니다.False로 설정하면 가중치가 없는 그래프를 내보냅니다(가중치는 런타임에 제공해야 합니다). - keep_initializers_as_inputs (
bool, 선택 사항, 기본값False) — 가중치 초기화기를 명시적인 그래프 입력으로 노출합니다. 일부 구형 ONNX 런타임(opset < 9)에서 필요합니다.
torch.onnx.export를 통해 모델을 ONNX로 내보내는 데 사용되는 구성 클래스입니다.
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"— XNNPACK 라이브러리를 통한 CPU 추론 (기본값; 어디서든 실행 가능)."cuda"— ExecuTorch CUDA 백엔드를 통한 GPU 추론."mlx"— Apple Silicon에서 ExecuTorch MLX 백엔드를 통한 GPU 추론.
- alloc_graph_input (
bool, 선택 사항, 기본값True) — 메모리 계획 패스가 그래프 입력을 위한 아레나 메모리를 예약하는지 여부입니다.False인 경우 런타임은 아레나로 복사하는 대신 호출자가 제공한 입력 버퍼를 직접 사용합니다. 따라서 인플레이스USER_INPUT_MUTATION(예:StaticCache쓰기)는 아레나 사본이 아니라 호출자의 텐서에 반영됩니다. - 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
class 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 )
매개변수
- output_path (str 또는 PathLike, 선택 사항) —
.xml 파일의 출력 경로입니다(해당하는 .bin 파일은 함께 작성됩니다).
None(기본값)인 경우 변환된 모델은
openvino.Model로 메모리에 유지됩니다. - compress_to_fp16 (bool, optional, 기본값 True) —
저장 시 부동소수점 가중치를 FP16으로 압축합니다. 대부분의 모델에서 정확도에 거의 영향을 주지 않으면서 디스크 크기를 절반으로 줄입니다.
output_path가 설정된 경우에만 적용됩니다. - stateful (bool, optional, defaults to True) —
Fold round-tripped state tensors (KV cache, SSM states, …) into internal OV
variables (
ReadValue/Assign`). The runtime then carries state across `infer()` calls instead of marshalling cache tensors through inputs/outputs on every step, and a fused `beam_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.convert_model을 통해 모델을 OpenVINO IR로 내보내기 위한 설정 클래스입니다.
[DynamoConfig]의 모든 필드(dynamic, strict, dynamic_shapes, prefer_deferred_runtime_asserts_over_guards)를 상속합니다.
Quantizers
class transformers.exporters.ExportQuantizer
< source >( calibration_dataset: Iterable[dict[str, Any]] | None = None )
export 과정에서 적용되는 사후 학습 양자화기의 기본 클래스입니다.
Quantizer는 지원되는 내보내기 형식과 필요한 패키지(exporters와 마찬가지로 테스트된 버전 포함)를 선언하며, torch.export FX 그래프를 변환 전에 양자화하는지(이 경우 모든 백엔드가 결과를 사용함) 아니면 백엔드가 변환한 모델(onnx_ir.Model, openvino.Model)을 양자화하는지를 지정합니다. Exporter는 이를 내보내기에 대해 사전에 검증한 후, 해당 모델과 내보내기의 샘플 입력을 인수로 ~ExportQuantizer.quantize를 호출합니다. 새로운 양자화 방법을 추가하려면 이를 서브클래스로 상속하고 quantize를 구현하세요. CalibrationSet는 교정 샘플을 모델 자체의 입력으로 매핑합니다.
model(quantizes_fx_graph가 True인 경우 FX 그래프, 그렇지 않으면 백엔드 모델)을 양자화하고 결과를 반환합니다. 이때 calibration_dataset로 보정하거나, 해당 데이터셋이 없으면 export의 sample_inputs로 보정합니다.
이 quantizer가 export_format export에서 실행할 수 없거나, 필요한 패키지가 없거나 버전이 너무 오래되었을 경우 예외를 발생시키고, 테스트된 버전과 다를 경우 경고를 표시합니다.
calibration_dataset에서 보정(calibration)을 수행하도록 설정된 이 양자화기의 복사본입니다.
class 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-kwarg 샘플을 양자화된 모델이 받는 값(추적된 kwargs, ONNX feeds, OpenVINO port feeds)으로 매핑하며, 모든 패스에서 지연 방식으로 샘플 하나씩 처리합니다.
class transformers.exporters.PT2EQuantizer
< source >( quantizer: Anycalibration_dataset: Iterable[dict[str, Any]] | None = None )
매개변수
- quantizer (
torchao.quantization.pt2e.quantizer.Quantizer) — 그래프를 어노테이션하는 PT2E quantizer입니다. 해당 quantize/dequantize 연산은 대상 백엔드가 지원하는 것이어야 합니다: inductor의 경우X86InductorQuantizer, ONNX (QDQ) 또는 OpenVINO, ExecuTorch의 경우XNNPACKQuantizer. - calibration_dataset (
Iterable[dict], 선택 사항) — 관측자(observer)가 보정(calibration)에 사용하는 입력 딕셔너리입니다(ExportQuantizer참고). 각 입력은 하나의 포워드 패스에 해당합니다. 배치 단위로 보정하려면 단일 샘플의 목록 대신 샘플을 배치된 입력 딕셔너리로 collate하는DataLoader를 전달하세요.
PyTorch 2 Export (PT2E) 양자화로 FX 그래프를 양자화합니다: prepare_pt2e가 옵저버를 삽입하고, 캘리브레이션 세트가 이를 구동하며, convert_pt2e가 이를 quantize/dequantize 연산으로 대체합니다. 모든 export 백엔드와 호환됩니다.
예:
>>> 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))class transformers.exporters.OnnxRuntimeQuantizer
< source >( config: OnnxRuntimeStaticConfig | OnnxRuntimeDynamicConfig | None = Nonecalibration_dataset: Iterable[dict[str, Any]] | None = None )
변환된 ONNX 모델을 ONNX Runtime의 자체 도구(onnxruntime.quantization)로 양자화합니다: 기본값인 OnnxRuntimeStaticConfig와 함께 quantize_static을 사용하거나, OnnxRuntimeDynamicConfig와 함께 quantize_dynamic를 사용할 수 있습니다.
예:
>>> from transformers.exporters import (
... OnnxConfig,
... OnnxRuntimeDynamicConfig,
... OnnxRuntimeQuantizer,
... OnnxRuntimeStaticConfig,
... )
>>> static = OnnxRuntimeStaticConfig(per_channel=True)
>>> OnnxConfig(quantizer=OnnxRuntimeQuantizer(static, calibration_dataset=samples))
>>> OnnxConfig(quantizer=OnnxRuntimeQuantizer(OnnxRuntimeDynamicConfig()))class 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를 참조하세요.
class 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))
... )class 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(ONNX Runtime의 MatMulNBits로 int4)를 사용합니다.
예:
>>> import nncf
>>> from transformers.exporters import NNCFOnnxQuantizer, NNCFWeightCompressionConfig, OnnxConfig
>>> OnnxConfig(quantizer=NNCFOnnxQuantizer(calibration_dataset=samples))
>>> OnnxConfig(quantizer=NNCFOnnxQuantizer(NNCFWeightCompressionConfig(mode=nncf.CompressWeightsMode.INT4_SYM)))class transformers.exporters.NNCFTorchFXQuantizer
< source >( config: NNCFQuantizationConfig | NNCFWeightCompressionConfig | None = Nonecalibration_dataset: Iterable[dict[str, Any]] | None = None )
NNCF의 TorchFX 백엔드를 통해 torch.export FX 그래프를 양자화합니다: NNCF의 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의 기본값이 유지되지만, 기본값이 nncf.ModelType.TRANSFORMER인 model_type는 예외입니다.
각 인자에 대해서는 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의 인수: 데이터 인식 방식(AWQ, scale estimation, GPTQ)을 지원하는 int4 모드와 데이터가 필요 없는 int8 모드를 포함한 weight-only int8 또는 int4입니다. int8 모드는 데이터가 필요 없으며, 다른 모드는 quantizer의 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를 모두 인플레이스(in-place)로 변경하며, output_flags에 inputs에서 use_cache, return_dict 등의 값이 팝(pop)된 값이 저장된 (model, inputs, output_flags)를 반환합니다. (patch_model_config가 트레이스 중에 model.config에 가역적으로 적용할 값입니다.)
- 레이블 입력(
labels,future_values)을 제거합니다. 손실 계산은 지원되지 않습니다. inputs에서 출력 플래그(use_cache,return_dict, …)를 제거하여 추적된 kwargs로 나타나지 않도록 합니다. 값은model.config에 적용하도록 trace 블록에 반환됩니다.@register_export_input_preparer를 통해 등록된 데이터 의존형 vision/audio kwargs를 사전 계산하여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 입력을 캡처합니다.
전체 생성 메커니즘을 재사용하여 모든 아키텍처(decoder-only, SSM, encoder-decoder, multi-modal, …)가 루프를 다시 구현하지 않고도 올바른 입력을 받을 수 있도록 합니다.
generation_config는 generate()로 전달되며(기본값은 모델 자체의 설정), 캡처된 입력은 generate()가 구축할 캐시를 사용합니다. cache_implementation="static"과 max_cache_len=N를 전달하면 디코딩 입력에 정적 크기의 캐시를 캡처할 수 있으며, 이는 정적 캐시 내보내기의 기반이 됩니다. max_cache_len은 캡처와 독립적으로 캐시 크기를 설정하므로, 내보내진 디코딩은 성장하는 캐시가 아닌 고정된 [..., N, ...] 캐시를 사용합니다.
multi_token_decode가 True인 경우, decode 컴포넌트는 멀티 토큰 디코드로 캡처됩니다. 이는 두 개의 연속된 디코드 스텝을 병합한 것입니다(_merge_decode_calls 참조). 이렇게 하면 쿼리 시퀀스 축이 심볼릭 상태로 유지됩니다(단일 토큰 디코드의 경우 해당 축이 1로 특수화됩니다). 이후 이 컴포넌트는 단일 토큰(일반 디코딩)과 다중 토큰(캐시 기반의 과거로부터의 연속 처리 또는 캐시가 비어 있는 경우의 일반 프리필)을 모두 처리합니다. 그렇지 않은 경우 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— 모델에서 알려진 멀티모달 서브모듈을 찾지 못한 경우.
forward 패스 한 번으로 각 멀티모달 서브모듈의 입력을 캡처합니다.
속성 이름(vision tower, projector, language model, lm_head, …)을 기준으로 알려진 모든 멀티모달 서브모듈을 감지하고, model(**inputs) 호출 한 번 동안它们的 forward kwargs를 캡처합니다.
각 서브모듈은 독립적인 내보내기를 위해 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 kwargs —
model.generate(**inputs)에 전달할 인자 - generation_config — 캡처 중에
generate()로 전달되는 선택적GenerationConfig입니다. 정적 크기의 캐시에 대해 내보내려면cache_implementation="static"+max_cache_len=N를 가진 인스턴스를 전달하세요 (decompose_prefill_decode참조). - multi_token_decode —
True인 경우,decode구성 요소를 다중 토큰 디코드로 캡처합니다(동적 쿼리 시퀀스 축: 한 번에 여러 토큰 — 과거로부터의 연속 또는 캐시가 비어 있는 경우의 일반 프리필; 단일 토큰 디코드는 동적으로 유지할 수 없습니다.decompose_prefill_decode참조).
반환값
{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.
생성 모델을 독립적으로 내보낼 수 있는 (model, forward_inputs) 쌍으로 분해합니다.
decompose_prefill_decode를 실행하여 실제 model.generate(**inputs, max_new_tokens=2)에서 prefill 및 decode forward kwargs를 캡처합니다. prefill이 멀티모달인 경우(is_multimodal 기준), decompose_multimodal를 통해 서브모듈(비전/오디오 인코더, 프로젝터, 언어 모델, lm_head)별로 하나의 항목씩으로 추가 분할합니다.
모델이 모달 인코더와 언어 모델을 갖춘 멀티모달인 경우 True를 반환합니다.
PreTrainedModel이 아닌 모델(예: 단순한 nn.Module)은 정해진 get_encoder/get_decoder 접근자가 없으며, 당연히 멀티모달이 아니므로 False로 바로 반환됩니다.