Transformers documentation
Trình xuất
Trình xuất
Các backend xuất mới có thể được thêm vào Transformers bằng cách kế thừa từ HfExporter.
Tìm hiểu cách sử dụng các trình xuất có sẵn trong hướng dẫn Exporters.
AutoHfExporter
Lớp Auto-HF exporter chịu trách nhiệm tự động khởi tạo thành HfExporter phù hợp dựa trên ExportConfig được cung cấp.
Tải một instance exporter từ một model/checkpoint được huấn luyện trước có kèm theo cấu hình xuất.
Chưa được triển khai — phần giữ chỗ cho quy trình “công thức xuất” cấp một.
Ý tưởng: các chủ sở hữu mô hình công bố một export_config.json (hoặc một trường export_config trong config.json) cùng với trọng số của họ trên Hub. Tệp đó ghi lại các cài đặt mà chủ sở hữu đã xác thực cho kiến trúc của họ — định dạng đích (dynamo / onnx / executorch), các thông số hình dạng động chính xác (ví dụ: text_ids động đến 4096, các ô ảnh cố định ở 448, batch=1 cho triển khai trên thiết bị biên), cờ strict, opset ONNX, bố cục prefill so với decode, lựa chọn backend ExecuTorch, và bất kỳ tùy chỉnh nào khác mà hiện nay chỉ tồn tại như kiến thức truyền miệng trong một README hoặc một notebook riêng tư.
Người dùng sau đó nhận được bản xuất đã được chủ sở hữu xác thực chỉ trong một lần gọi:
exporter = AutoHfExporter.from_pretrained("org/model-name")
program = exporter.export(model, inputs)Kết hợp với registry [register_export_input_preparer]: bên sở hữu cung cấp shape spec thông qua export_config.json, trong khi transformers cung cấp các phép tính trước phụ thuộc vào dữ liệu (cu_seqlens, vision position ids, window indices, …) cho kiến trúc đó. Cùng nhau, chúng bao phủ hai phần khó khăn khi xuất các mô hình mới — biết đúng shape contract và chuẩn bị đúng các input — để người dùng phía sau không phải tự suy ra lại từ đầu (và không bị lỗi trong môi trường production khi làm sai).
Trả về True nếu dict được cung cấp mô tả một export_format có cả lớp config đã đăng ký và lớp exporter đã đăng ký. Cảnh báo với thông điệp có thể hành động khi định dạng bị thiếu hoàn toàn, không xác định, hoặc chỉ được đăng ký một phần.
AutoExportConfig
Lớp cấu hình xuất Auto-HF chịu trách nhiệm tự động chuyển hướng đến cấu hình xuất chính xác dựa trên cấu hình xuất được lưu trong một từ điển.
HfExporter
Lớp trừu tượng cơ sở cho tất cả các trình xuất của Transformers.
Tạo lớp con và triển khai ~HfExporter.export để thêm một backend xuất mới.
export
< source >( model: PreTrainedModelsample_inputs: MutableMapping[str, torch.Tensor | Cache]config: ExportConfigMixin )
Tham số
- model (PreTrainedModel) — Mô hình cần xuất.
- sample_inputs (
dict[str, torch.Tensor | Cache]) — Forward kwargs — những gì bạn sẽ truyền vàomodel(**sample_inputs). Chúng được sử dụng trực tiếp làm đầu vào mẫu trong quá trình tracing. Đối với xuất khẩu bước giải mã tự hồi quy, điều này có nghĩa là bạn cần bao gồmpast_key_values,cache_position, v.v. Nếu bạn chỉ có các đầu vào kiểu generation, hãy sử dụng~HfExporter.export_for_generationthay thế — nó sẽ chạymodel.generatecho bạn và xuất khẩu từng giai đoạn. - config (
ExportConfigMixin) — Cấu hình cụ thể cho backend.
Xuất mô hình và trả về đối tượng chương trình cụ thể của 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]
Tham số
- model (PreTrainedModel) —
Mô hình sinh cần xuất. Phải hỗ trợ
model.generate(**sample_inputs). - sample_inputs (
dict[str, torch.Tensor | Cache]) — Generate kwargs — những gì bạn sẽ truyền vàomodel.generate(**sample_inputs)(thường làinput_ids+attention_mask, cùng với các đầu vào đa giác quan nhưpixel_values/input_featurescho các mô hình đa phương tiện). Các forward kwargs cho từng giai đoạn được ghi nhận bên trong. - config (
ExportConfigMixinhoặcdict[str, ExportConfigMixin]) — Cấu hình cụ thể cho backend. Truyền một cấu hình duy nhất để áp dụng cho mọi thành phần, hoặc mộtdictcó khóa là tên thành phần (ví dụ"image_encoder","language_model","lm_head","decode") để ghi đè theo từng thành phần — tất cả tên thành phần phải có mặt trong dict. - generation_config (GenerationConfig, optional) —
Được chuyển tiếp đến capture
generate()(mặc định là của chính model). Truyền một cấu hình cócache_implementation="static"để xuất đối vớiStaticCachecó kích thước cố định. - multi_token_decode (
bool, tùy chọn, mặc định làFalse) — Xác định xem thành phầndecodecó xử lý nhiều token truy vấn cùng lúc — một trục truy vấn động (prefill trên cache trống, hoặc tiếp nối từ quá khứ trong các trường hợp khác) — hay là bước đơn token cổ điển (xem decompose_for_generation()). Chỉ giữ trạng thái động khi xuất với hình dạng động (config.dynamic=True).
Trả về
dict[str, Any]
{component_name: backend_specific_artifact} — các khóa giống với
decompose_for_generation(). Giá trị là những gì
~HfExporter.export trả về cho backend cụ thể (ExportedProgram,
ONNXProgram, ExecutorchProgramManager).
Phân tách một mô hình sinh và xuất từng thành phần một cách độc lập.
Lớp bọc mỏng quanh decompose_for_generation(), gọi ~HfExporter.export trên mỗi cặp (submodel, forward_inputs) được trả về. Nếu bạn cần
các cặp (submodel, forward_inputs) trung gian (để xác minh, đầu vào tùy chỉnh,
bỏ qua một giai đoạn, …), hãy gọi trực tiếp decompose_for_generation().
Kiểm tra required_packages đã được cài đặt và cảnh báo khi có sự lệch phiên bản so với tested_versions.
DynamoExporter
Trình xuất chuyển đổi PreTrainedModel thành ExportedProgram.
Ví dụ:
>>> 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
Trình xuất chuyển đổi PreTrainedModel thành ONNXProgram của ONNX.
Ví dụ:
>>> 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
Trình xuất chuyển đổi PreTrainedModel thành ExecutorchProgramManager của ExecuTorch.
Ví dụ:
>>> 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] )
Xuất mô hình sang ExecuTorch, áp dụng chuẩn bị backend và vá torch op.
DynamoConfig
lớp 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 )
Tham số
- dynamic (bool, optional, mặc định là False) — Có xuất với các hình dạng động (symbolic) hay không. Khi True và dynamic_shapes không được đặt, tất cả các chiều tensor sẽ được đặt thành Dim.AUTO một cách tự động.
- strict (bool, tuỳ chọn, mặc định là False) — Có bật chế độ nghiêm ngặt trong torch.export hay không. Chạy quá trình truy vết biểu tượng đầy đủ và bắt được nhiều lỗi hơn, nhưng chậm hơn và dễ thất bại hơn trên các mô hình phức tạp.
- dynamic_shapes (dict[str, Any], optional) — Quy định hình dạng động cụ thể cho từng đầu vào được truyền vào torch.export. Có ưu tiên cao hơn dynamic.
- prefer_deferred_runtime_asserts_over_guards (bool, optional, mặc định là False) —
Khi True, các guard hình dạng phụ thuộc vào dữ liệu sẽ được phát ra dưới dạng runtime asserts trong đồ thị đã xuất thay vì khiến quá trình xuất thất bại tại thời điểm trace nếu guard không được giữ nguyên trên toàn bộ phạm vi hình dạng biểu tượng. Hầu hết các LLM transformer cần đặt giá trị này thành True khi sử dụng các ràng buộc
Dim(min=, max=)chi tiết. Không cần thiết khi dùngdynamic=True/Dim.AUTO, nơitorch.exportsuy luận các quan hệ hình dạng thay vì kiểm chứng chúng với các ràng buộc do người dùng khai báo. - quantizer ([~exporters.quantizers.ExportQuantizer], optional) — Lượng tử hóa sau huấn luyện được áp dụng trong quá trình xuất: [~exporters.quantizers.PT2EQuantizer] hoặc [~exporters.quantizers.NNCFTorchFXQuantizer] trên đồ thị FX cho mọi backend, [~exporters.quantizers.OnnxRuntimeQuantizer] trên mô hình ONNX đã chuyển đổi, hoặc [~exporters.quantizers.NNCFOpenVINOQuantizer] / [~exporters.quantizers.NNCFOnnxQuantizer] trên mô hình OpenVINO / ONNX đã chuyển đổi.
Lớp cấu hình để xuất mô hình thông qua torch.export.
OnnxConfig
lớp 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 )
Tham số
- output_path (
strhoặcPathLike, tùy chọn) — Đường dẫn đầu ra cho tệp.onnx. KhiNone(mặc định), mô hình được xuất sẽ được giữ trong bộ nhớ dưới dạngONNXProgramvà không được ghi xuống đĩa. - opset_version (
int, tùy chọn) — Phiên bản opset ONNX cần nhắm tới. Mặc định là phiên bản opset mới nhất được hỗ trợ bởi phiên bảnonnxscriptđã cài đặt. - external_data (
bool, tùy chọn, mặc định làTrue) — Lưu các tensor trọng lượng lớn trong một tệp phụ.onnx_datariêng biệt thay vì nhúng chúng vào protobuf. Bắt buộc đối với các mô hình có trọng lượng vượt quá giới hạn 2 GB của protobuf. - optimize (
bool, tùy chọn, mặc định làTrue) — Chạy các bước tối ưu hóa củaonnxscript(gấp hằng số, loại bỏ mã chết, …) trên đồ thị đã xuất. Tắt đối với các mô hình gặp lỗi của trình tối ưu hóaonnxscriptở thượng nguồn. - export_params (
bool, tùy chọn, mặc định làTrue) — Nhúng trọng số mô hình vào đồ thị ONNX. Đặt thànhFalseđể xuất một đồ thị không có trọng số (trọng số phải được cung cấp khi chạy). - keep_initializers_as_inputs (
bool, tùy chọn, mặc định làFalse) — Hiển thị các bộ khởi tạo trọng số dưới dạng các đầu vào đồ thị rõ ràng. Bắt buộc đối với một số runtime ONNX cũ hơn (opset < 9).
Lớp cấu hình để xuất mô hình sang ONNX thông qua torch.onnx.export.
Kế thừa tất cả các trường từ DynamoConfig (dynamic, strict, dynamic_shapes, prefer_deferred_runtime_asserts_over_guards).
ExecutorchConfig
lớp 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 )
Tham số
- backend (
str, tùy chọn, mặc định là"xnnpack") — Backend ExecuTorch đích. Các giá trị được hỗ trợ:"xnnpack"— suy luận CPU thông qua thư viện XNNPACK (mặc định; chạy ở mọi nơi)."cuda"— suy luận GPU thông qua backend CUDA của ExecuTorch."mlx"— suy luận GPU thông qua backend ExecuTorch MLX trên Apple Silicon.
- alloc_graph_input (
bool, tuỳ chọn, mặc định làTrue) — Xác định xem bước lập kế hoạch bộ nhớ có dành vùng nhớ arena cho các đầu vào của đồ thị hay không. KhiFalse, thời gian chạy sẽ sử dụng trực tiếp các bộ đệm đầu vào do người gọi cung cấp thay vì sao chép vào arena — do đó, một thao tácUSER_INPUT_MUTATIONtại chỗ (ví dụ: ghi vàoStaticCache) sẽ được thực hiện trên tensor của người gọi thay vì trên bản sao trong arena. - alloc_graph_output (
bool, tuỳ chọn, mặc định làTrue) — Xác định xem bước lập kế hoạch bộ nhớ có dành trước bộ nhớ arena cho các đầu ra của đồ thị hay không. KhiFalse, người gọi phải liên kết các bộ đệm đầu ra vào thời điểm thực thi (Method::set_output_data_ptr); việc liên kết một đầu ra với bộ đệm của đầu vào đã bị thay đổi sẽ tránh được vòng lặp sao chép ra ngoài. - alloc_mutable_buffers (
bool, tuỳ chọn, mặc định làTrue) — Xác định xem bước lập kế hoạch bộ nhớ có dành vùng nhớ arena cho các bộ đệm có thể thay đổi (trạng thái nằm trong mô hình) hay không. Giá trị này được truyền qua choMemoryPlanningPass.
Lớp cấu hình để xuất mô hình sang định dạng ExecuTorch.
Kế thừa tất cả các trường từ DynamoConfig (dynamic, strict, dynamic_shapes, prefer_deferred_runtime_asserts_over_guards).
OpenVINOConfig
lớp 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 )
Tham số
- output_path (str hoặc PathLike, tùy chọn) —
Đường dẫn đầu ra cho tệp .xml (tệp .bin tương ứng được ghi cùng vị trí). Khi
None (mặc định), mô hình đã chuyển đổi sẽ được giữ trong bộ nhớ dưới dạng
openvino.Model. - compress_to_fp16 (bool, optional, mặc định là True) —
Nén trọng số dạng số dấu phẩy động sang FP16 khi lưu — giảm một nửa kích thước trên đĩa với tác động không đáng kể đến độ chính xác trên hầu hết các mô hình. Chỉ được áp dụng khi
output_pathđược đặt. - 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.
Lớp cấu hình để xuất mô hình sang OpenVINO IR thông qua openvino.convert_model.
Kế thừa tất cả các trường từ [DynamoConfig] (dynamic, strict, dynamic_shapes, prefer_deferred_runtime_asserts_over_guards).
Bộ lượng tử hóa
lớp transformers.exporters.ExportQuantizer
< source >( calibration_dataset: Iterable[dict[str, Any]] | None = None )
Tham số
- calibration_dataset (
Iterable[dict], tùy chọn) — Các dict đầu vào mà bộ lượng tử hóa dùng để hiệu chuẩn: một danh sách, hoặc mộtDataLoadercó các batch được collate thành đầu vào của model. Đối với~HfExporter.export_for_generation, chúng là các kwargs của generate, được thu thập thành một tập hiệu chuẩn cho mỗi thành phần. KhiNone, một bộ lượng tử hóa cần dữ liệu sẽ hiệu chuẩn trên các đầu vào mẫu của chính quá trình xuất, kèm theo một cảnh báo.
Lớp cơ sở cho các bộ lượng tử hóa sau huấn luyện được áp dụng trong quá trình xuất.
Bộ lượng tử hóa khai báo các định dạng xuất mà nó hỗ trợ và các gói cần thiết (kèm theo các phiên bản đã được kiểm thử, tương tự như các bộ xuất) cũng như việc nó lượng tử hóa đồ thị FX của torch.export trước bất kỳ bước chuyển đổi nào (để mọi backend đều nhận kết quả) hay lượng tử hóa mô hình mà một backend chuyển đổi nó thành (onnx_ir.Model, openvino.Model). Bộ xuất xác thực nó với quá trình xuất ngay từ đầu, sau đó gọi ~ExportQuantizer.quantize với mô hình đó và các đầu vào mẫu của quá trình xuất. Hãy kế thừa lớp này và triển khai quantize để thêm một phương pháp lượng tử hóa mới; một CalibrationSet ánh xạ các mẫu hiệu chuẩn sang các đầu vào của chính mô hình.
Lượng tử hóa model (đồ thị FX nếu quantizes_fx_graph, ngược lại là model backend) và trả về kết quả, được hiệu chuẩn trên calibration_dataset, hoặc trên sample_inputs của bản xuất khi không có bộ dữ liệu hiệu chuẩn.
Ném lỗi nếu quantizer này không thể chạy trên export export_format, hoặc một gói cần thiết bị thiếu hoặc quá cũ;
cảnh báo khi một gói khác với phiên bản đã được kiểm thử.
Một bản sao của bộ lượng tử hóa này, được hiệu chuẩn trên calibration_dataset.
lớp transformers.exporters.quantizers.CalibrationSet
< source >( calibration_dataset: Iterable[dict[str, Any]] | Nonesample_inputs: dict[str, Any]transform: Callable[[dict[str, Any]], Any] )
Xem lại có thể lặp lại các mẫu hiệu chuẩn dưới dạng đầu vào của mô hình.
Các mẫu là calibration_dataset của bộ lượng tử hóa, hoặc chính sample_inputs của bản xuất (kèm một cảnh báo, một lần duy nhất khi chúng được đọc) nếu không có bộ lượng tử hóa. Chúng có thể là bất kỳ ánh xạ nào, chẳng hạn như BatchEncoding của bộ mã hóa. transform ánh xạ từng mẫu forward-kwarg thành những gì mô hình đã lượng tử hóa nhận vào (các kwargs được theo dõi, các feed ONNX, các feed cổng OpenVINO), một cách lười biếng, từng mẫu một, trong mỗi lượt chạy.
lớp transformers.exporters.PT2EQuantizer
< source >( quantizer: Anycalibration_dataset: Iterable[dict[str, Any]] | None = None )
Tham số
- quantizer (
torchao.quantization.pt2e.quantizer.Quantizer) — Bộ lượng tử hóa PT2E dùng để chú thích đồ thị. Các toán tử lượng tử hóa/giải lượng tử hóa của nó phải là những toán tử được backend đích hỗ trợ:X86InductorQuantizercho inductor, ONNX (QDQ) hoặc OpenVINO,XNNPACKQuantizercho ExecuTorch. - calibration_dataset (
Iterable[dict], tùy chọn) — Các dict đầu vào mà các observer dùng để hiệu chuẩn (xemExportQuantizer), mỗi dict tương ứng với một lần forward. Để hiệu chuẩn trên các batch, hãy truyền mộtDataLoadergộp các mẫu thành các dict đầu vào dạng batch thay vì một danh sách các mẫu đơn lẻ.
Thực hiện lượng hóa đồ thị FX bằng lượng hóa PyTorch 2 Export (PT2E): prepare_pt2e chèn các observer, tập hiệu chuẩn điều khiển chúng, và convert_pt2e thay thế chúng bằng các toán tử quantize/dequantize. Hoạt động với mọi backend xuất.
Ví dụ:
>>> 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))lớp transformers.exporters.OnnxRuntimeQuantizer
< source >( config: OnnxRuntimeStaticConfig | OnnxRuntimeDynamicConfig | None = Nonecalibration_dataset: Iterable[dict[str, Any]] | None = None )
Lượng tử hóa mô hình ONNX đã chuyển đổi bằng các công cụ riêng của ONNX Runtime (onnxruntime.quantization): quantize_static với OnnxRuntimeStaticConfig (mặc định), hoặc quantize_dynamic với OnnxRuntimeDynamicConfig.
Ví dụ:
>>> from transformers.exporters import (
... OnnxConfig,
... OnnxRuntimeDynamicConfig,
... OnnxRuntimeQuantizer,
... OnnxRuntimeStaticConfig,
... )
>>> static = OnnxRuntimeStaticConfig(per_channel=True)
>>> OnnxConfig(quantizer=OnnxRuntimeQuantizer(static, calibration_dataset=samples))
>>> OnnxConfig(quantizer=OnnxRuntimeQuantizer(OnnxRuntimeDynamicConfig()))lớp 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 )
Các tham số của onnxruntime.quantization.quantize_static: kích hoạt và trọng số int8 (mặc định là QDQ), được hiệu chuẩn trên calibration_dataset của bộ lượng tử hóa. Một trường được đặt thành None sẽ giữ nguyên giá trị mặc định của ONNX Runtime. Xem quantize_static cho từng tham số.
lớp 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 )
Các tham số của onnxruntime.quantization.quantize_dynamic: trọng số int8, kích hoạt được lượng tử hóa khi chạy, không hiệu chuẩn. Một trường được đặt thành None sẽ giữ nguyên giá trị mặc định của ONNX Runtime. Xem quantize_dynamic cho từng tham số.
lớp transformers.exporters.NNCFOpenVINOQuantizer
< source >( config: NNCFQuantizationConfig | NNCFWeightCompressionConfig | None = Nonecalibration_dataset: Iterable[dict[str, Any]] | None = None )
Thực hiện lượng tử hóa mô hình OpenVINO đã chuyển đổi bằng NNCF: nncf.quantize với NNCFQuantizationConfig (mặc định), hoặc nncf.compress_weights với NNCFWeightCompressionConfig.
Ví dụ:
>>> import nncf
>>> from transformers.exporters import NNCFOpenVINOQuantizer, NNCFWeightCompressionConfig, OpenVINOConfig
>>> OpenVINOConfig(quantizer=NNCFOpenVINOQuantizer(calibration_dataset=samples))
>>> OpenVINOConfig(
... quantizer=NNCFOpenVINOQuantizer(NNCFWeightCompressionConfig(mode=nncf.CompressWeightsMode.INT4_SYM))
... )lớp transformers.exporters.NNCFOnnxQuantizer
< source >( config: NNCFQuantizationConfig | NNCFWeightCompressionConfig | None = Nonecalibration_dataset: Iterable[dict[str, Any]] | None = None )
Thực hiện lượng tử hóa mô hình ONNX đã chuyển đổi bằng NNCF thông qua backend ONNX của nó: nncf.quantize với NNCFQuantizationConfig (mặc định, int8 QDQ), hoặc nncf.compress_weights với NNCFWeightCompressionConfig (int4 dưới dạng MatMulNBits của ONNX Runtime).
Ví dụ:
>>> import nncf
>>> from transformers.exporters import NNCFOnnxQuantizer, NNCFWeightCompressionConfig, OnnxConfig
>>> OnnxConfig(quantizer=NNCFOnnxQuantizer(calibration_dataset=samples))
>>> OnnxConfig(quantizer=NNCFOnnxQuantizer(NNCFWeightCompressionConfig(mode=nncf.CompressWeightsMode.INT4_SYM)))lớp transformers.exporters.NNCFTorchFXQuantizer
< source >( config: NNCFQuantizationConfig | NNCFWeightCompressionConfig | None = Nonecalibration_dataset: Iterable[dict[str, Any]] | None = None )
Lượng tử hóa đồ thị FX của torch.export bằng NNCF thông qua backend TorchFX của nó: nncf.quantize với NNCFQuantizationConfig (mặc định, các op quantize/dequantize), hoặc nncf.compress_weights với NNCFWeightCompressionConfig. Giống như PT2EQuantizer, nó chạy trước bất kỳ bước chuyển đổi nào, nên mọi backend đều nhận kết quả của nó. ExecuTorch chỉ hạ thấp kết quả weight-only: XNNPACK không ủy quyền cho các op quantize/dequantize, và ExecuTorch không có kernel cho chúng.
lớp 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 )
Các tham số của nncf.quantize: kích hoạt và trọng số int8, được hiệu chuẩn trên calibration_dataset của bộ lượng tử hóa.
Một trường được đặt thành None sẽ giữ nguyên giá trị mặc định của NNCF, ngoại trừ model_type, có giá trị mặc định là nncf.ModelType.TRANSFORMER.
Xem nncf.quantize cho từng tham số.
lớp 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 )
Các tham số của nncf.compress_weights: int8 hoặc int4 chỉ cho trọng số, với các phương pháp nhận thức dữ liệu (AWQ, ước lượng tỷ lệ,
GPTQ) cho các chế độ int4. Các chế độ int8 không cần dữ liệu; các chế độ khác hiệu chuẩn trên calibration_dataset của bộ lượng tử hóa. gptq và lora_correction chỉ dành cho OpenVINO. Một trường được đặt thành None sẽ giữ nguyên giá trị mặc định của NNCF. Xem nncf.compress_weights cho
từng tham số.
Công cụ tiện ích
Các hàm cấp thấp hơn hỗ trợ export_for_generation, hữu ích khi bạn cần can thiệp giữa việc phân rã mô hình và xuất từng thành phần.
transformers.exporters.utils.get_leaf_tensors
< source >( obj: Any ) → dict[str, torch.Tensor]
Lấy đệ quy tất cả các tensor lá từ một cấu trúc có thể lồng nhau.
transformers.exporters.utils.prepare_for_export
< source >( model: PreTrainedModel | torch.nn.Moduleinputs: MutableMapping[str, Any] )
Cấu hình model và inputs để xuất. Thay đổi cả model và inputs tại chỗ,
trả về (model, inputs, output_flags) trong đó output_flags chứa các giá trị đã được lấy ra
từ inputs cho use_cache, return_dict, v.v. (để được áp dụng một cách có thể đảo ngược lên model.config bởi patch_model_config trong quá trình trace).
- Loại bỏ các đầu vào nhãn (
labels,future_values) — không hỗ trợ tính toán loss. - Lấy các cờ đầu ra (
use_cache,return_dict, …) ra khỏiinputsđể chúng không xuất hiện dưới dạng kwargs được theo dõi; các giá trị này được trả về để khối trace áp dụng lênmodel.config. - Tiền xử lý các tham số kwargs của thị giác/âm thanh phụ thuộc vào dữ liệu đã được đăng ký thông qua
@register_export_input_preparervà ghi chúng vàoinputs. - Chuyển đổi các tensor đầu vào để khớp với
dtype/devicecủa mô hình.
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]]
Trả về
dict[str, tuple[torch.nn.Module, dict]]
{"prefill": (model, prefill_inputs), "decode": (model, decode_inputs)}.
Chạy model.generate() và ghi nhận các đầu vào của prefill và decode.
Tái sử dụng toàn bộ cơ chế sinh để mọi kiến trúc (chỉ có decoder, SSM, encoder-decoder, đa phương thức, …) đều nhận được các đầu vào chính xác mà không cần cài đặt lại vòng lặp.
generation_config được chuyển tiếp đến generate() (mặc định là cấu hình của chính model), do đó các đầu vào được ghi lại sẽ sử dụng bất kỳ cache nào mà generate() sẽ xây dựng. Truyền một cấu hình có cache_implementation="static" và max_cache_len=N để ghi lại một cache có kích thước tĩnh trong các đầu vào decode — nền tảng cho việc xuất (export) cache tĩnh. max_cache_len xác định kích thước cache độc lập với quá trình ghi lại, nên bản decode được xuất sẽ nhận một cache cố định [..., N, ...] thay vì một cache tăng dần.
Khi multi_token_decode, thành phần decode được bắt giữ dưới dạng multi-token decode — hai bước decode liên tiếp được gộp lại (xem _merge_decode_calls) để trục query-sequence của nó vẫn ở dạng biểu tượng (một bước decode single-token sẽ đặc biệt hóa trục đó thành 1). Sau đó, nó xử lý cả trường hợp một token (giải mã thông thường) và nhiều token (tiếp nối từ quá khứ, hoặc prefill thông thường khi cache trống). Ngược lại, decode là bước decode single-token cổ điển.
transformers.exporters.utils.decompose_multimodal
< source >( model: PreTrainedModelinputs: dict[str, Any] ) → dict[str, tuple[torch.nn.Module, dict]]
Trả về
dict[str, tuple[torch.nn.Module, dict]]
Một mục name: (module, inputs) cho mỗi submodule được phát hiện (bộ mã hóa hình ảnh/âm thanh, bộ chiếu, mô hình ngôn ngữ, lm_head).
Gây ra
ValueError
ValueError— nếu không tìm thấy các module con đa phương thức đã biết nào trên model.
Thu thập đầu vào cho từng mô-đun con đa phương thức thông qua một lần truyền tiến duy nhất.
Phát hiện tất cả các module con đa phương thức đã biết theo tên thuộc tính (vision tower, projector,
language model, lm_head, …) và ghi lại các tham số kwargs của forward trong một lần gọi model(**inputs).
Mỗi submodule được trả về dưới dạng một mục name: (module, inputs) riêng biệt để xuất độc lập. Bước hợp nhất token (ví dụ masked_scatter cho các model đa phương thức) được cố ý giữ bên ngoài các đồ thị đã xuất — trách nhiệm của người gọi là lắp ráp inputs_embeds từ đầu ra của encoder trước khi chạy decoder.
transformers.exporters.utils.decompose_for_generation
< source >( model: PreTrainedModelinputs: dict[str, Any]generation_config: Any = Nonemulti_token_decode: bool = False ) → `{component_name
Tham số
- model — Mô hình tạo sinh. Phải hỗ trợ
model.generate(**inputs). - inputs — Generate kwargs — những gì bạn sẽ truyền vào
model.generate(**inputs). - generation_config — Tùy chọn
GenerationConfigđược chuyển đếngenerate()trong quá trình capture. Truyền một cấu hình cócache_implementation="static"+max_cache_len=Nđể xuất đối với cache có kích thước tĩnh (xemdecompose_prefill_decode). - multi_token_decode — Khi
True, bắt (capture) thành phầndecodedưới dạng multi-token decode (trục query sequence động: nhiều token cùng lúc — tiếp nối từ quá khứ, hoặc prefill thông thường khi cache trống); single-token decode không thể giữ ở chế độ động (xemdecompose_prefill_decode).
Trả về
`{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.
Phân tách một mô hình sinh thành thành các cặp (model, forward_inputs) có thể xuất độc lập.
Chạy decompose_prefill_decode để thu thập các kwargs của forward cho prefill và decode từ một model.generate(**inputs, max_new_tokens=2) thực tế. Nếu prefill là đa phương thức (theo is_multimodal),
nó sẽ tách thêm thành một mục cho mỗi submodule (encoder thị giác/âm thanh, projector, mô hình ngôn ngữ, lm_head) thông qua decompose_multimodal.
Trả về True nếu mô hình là đa phương thức với các bộ mã hóa phương thức và một mô hình ngôn ngữ.
Một mô hình không phải là PreTrainedModel (ví dụ: một nn.Module thuần túy) không có các bộ truy cập chuẩn get_encoder/get_decoder và rõ ràng không phải là đa phương thức, do đó nó sẽ trả về False ngay lập tức.