Transformers documentation
المصدّرون
المصدّرون
يمكن إضافة واجهات تصدير جديدة إلى Transformers عن طريق إنشاء فئة فرعية من HfExporter.
تعلّم كيفية استخدام مُصدِّرات النظام المدمجة في دليل Exporters.
AutoHfExporter
فئة مُصدِّر Auto-HF التي تتولى إنشاء HfExporter الصحيح تلقائيًا بناءً على ExportConfig.
حمّل مثيل مُصدِّر من نموذج/نقطة تحقق مُدرَّب مسبقًا يتضمن إعداد تصدير.
لم يتم تنفيذه بعد — عنصر احتيازي لمسار عمل "وصفة تصدير" من الدرجة الأولى.
الفكرة: ينشر مالكو النماذج ملف export_config.json (أو حقل export_config داخل config.json) إلى جانب أوزانهم على Hub. يلتقط هذا الملف الإعدادات التي سبق للمالك التحقق منها بخصوص معماريته — وهي: الصيغة المستهدفة (dynamo / onnx / executorch)، مواصفات الأشكال الديناميكية الدقيقة (مثل: text_ids ديناميكي حتى 4096، بلاطات الصور ثابتة عند 448، batch=1 للنشر على الحافة)، علم strict، مجموعة عمليات ONNX، تخطيط prefill مقابل decode، اختيار خلفية ExecuTorch، وأي إعداد آخر كان يُدار حتى اليوم كمعرفة شفهية في ملف README أو دفتر ملاحظات خاص.
ثم يحصل المستهلكون على التصدير المُتحقَّق منه من قِبل المالك في استدعاء واحد:
exporter = AutoHfExporter.from_pretrained("org/model-name")
program = exporter.export(model, inputs)يتكامل مع سجل register_export_input_preparer: حيث يوفّر المالك مواصفات الأبعاد عبر export_config.json، بينما يوفّر transformers الحسابات المسبقة المعتمدة على البيانات (cu_seqlens، معرّفات مواضع الرؤية، فهارس النوافذ، …) لتلك البنية المعمارية. معًا، يغطّيان الجزأين الصعيبين في تصدير النماذج الجديدة — معرفة عقد الأبعاد الصحيح وإعداد المدخلات الصحيحة — بحيث لا يضطر المستخدمون في المراحل اللاحقة إلى إعادة اشتقاق أيٍّ منهما من الصفر (ولا يواجهون أعطالاً في بيئة الإنتاج عند ارتكابهم خطأً).
تُرجع True إذا كان القاموس المُقدَّم يصف export_format الذي يحتوي على كلا من فئة الإعدادات المسجّلة وفئة المُصدِّر المسجّلة. تُصدر تحذيراً برسالة قابلة للتنفيذ عندما يكون التنسيق مفقوداً بالكامل، أو غير معروف، أو مسجّلاً جزئياً فقط.
AutoExportConfig
فئة إعدادات التصدير Auto-HF التي تتولى تلقائيًا توجيه الطلب إلى فئة إعدادات التصدير الصحيحة بناءً على إعدادات التصدير المخزنة في قاموس.
HfExporter
فئة أساسية مجردة لجميع مُصدِّرات Transformers.
أنشئ فئة فرعية ونفّذ ~HfExporter.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 — ما ستمرره إلىmodel.generate(**sample_inputs)(عادةًinput_ids+attention_mask، بالإضافة إلى أي مدخلات نمطية مثلpixel_values/input_featuresللنماذج متعددة الأنماط). يتم التقاط معاملات التقديم لكل مرحلة داخليًا. - config (
ExportConfigMixinأوdict[str, ExportConfigMixin]) — إعدادات خاصة بالخلفية. مرّر إعدادًا واحدًا لتطبيقه على جميع المكونات، أو مرّرdictمفاتيحه هي أسماء المكونات (مثل"image_encoder"،"language_model"،"lm_head"،"decode") لتجاوز الإعدادات لكل مكوّن على حدة — يجب أن تكون جميع أسماء المكونات موجودة في القاموس. - generation_config (GenerationConfig، اختياري) —
يُمرَّر إلى التقاط
generate()(افتراضيًا، يُستخدم إعداد النموذج الخاص به). مرِّر إعدادًا يحتوي علىcache_implementation="static"للتصدير مقابلStaticCacheبحجم ثابت. - multi_token_decode (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان مكوّنdecodeيعالج رموز الاستعلام المتعددة دفعة واحدة — محور استعلام ديناميكي (تعبئة مسبقة على ذاكرة مؤقتة فارغة، أو استئناف من الماضي في الحالات الأخرى) — مقابل خطوة الرمز الواحد الكلاسيكية (انظر 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
مُصدِّر يقوم بتحويل PreTrainedModel إلى ExportedProgram.
مثال:
>>> from transformers.exporters.exporter_dynamo import DynamoExporter, DynamoConfig
>>> exporter = DynamoExporter()
>>> exported = exporter.export(model, inputs, config=DynamoConfig(dynamic=True))
>>> outputs = exported.module()(**inputs)تصدير
< source >( model: PreTrainedModelsample_inputs: MutableMapping[str, Any]config: DynamoConfig | dict[str, Any] )
OnnxExporter
مُصدِّر يقوم بتحويل PreTrainedModel إلى ONNXProgram بصيغة ONNX.
مثال:
>>> 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 diskتصدير
< source >( model: PreTrainedModelsample_inputs: MutableMapping[str, Any]config: OnnxConfig | dict[str, Any] )
ExecutorchExporter
مُصدِّر يقوم بتحويل PreTrainedModel إلى ExecutorchProgramManager في ExecuTorch.
مثال:
>>> 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")تصدير
< source >( model: PreTrainedModelsample_inputs: MutableMapping[str, Any]config: ExecutorchConfig | dict[str, Any] )
تصدير نموذج إلى ExecuTorch، مع تطبيق إعدادات الخلفية (backend) وإصلاحات عمليات torch.
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. يقوم بتشغيل التتبع الرمزي الكامل ويكشف عن أخطاء أكثر، لكنه أبطأ وأكثر عرضة للفشل عند التعامل مع نماذج معقدة.
- dynamic_shapes (dict[str, Any], اختياري) — مواصفات صريحة لأشكال ديناميكية لكل مدخل تُمرَّر إلى torch.export. لها الأولوية على dynamic.
- prefer_deferred_runtime_asserts_over_guards (bool، اختياري، القيمة الافتراضية False) —
عندما تكون القيمة True، تُصدر حواجز الأشكال المعتمدة على البيانات على شكل تأكيدات وقت التشغيل في الرسم المُصدَّر بدلاً من فشل التصدير وقت التتبع عندما لا يتحقق الحاجز عبر نطاق الشكل الرمزي الكامل. تحتاج معظم نماذج LLM من نوع transformer إلى ضبط هذه القيمة على True عند استخدام حدود
Dim(min=, max=)الدقيقة. لا حاجة إليها عند استخدامdynamic=True/Dim.AUTO، حيث يستنتجtorch.exportعلاقات الأشكال بدلاً من التحقق منها مقابل الحدود التي حددها المستخدم. - quantizer ([~exporters.quantizers.ExportQuantizer], اختياري) — كمّية ما بعد التدريب المطبّقة أثناء التصدير: [~exporters.quantizers.PT2EQuantizer] أو [~exporters.quantizers.NNCFTorchFXQuantizer] على مخطط FX لكل واجهة خلفية، [~exporters.quantizers.OnnxRuntimeQuantizer] على نموذج ONNX المُحوَّل، أو [~exporters.quantizers.NNCFOpenVINOQuantizer] / [~exporters.quantizers.NNCFOnnxQuantizer] على نموذج OpenVINO / ONNX المُحوَّل.
فئة الإعدادات لتصدير النماذج عبر torch.export.
OnnxConfig
فئة transformers.exporters.OnnxConfig
< source >( export_format: ExportFormat = <ExportFormat.ONNX: 'onnx'>dynamic: bool = Falsestrict: bool = Falsedynamic_shapes: dict[str, Any] | None = Noneprefer_deferred_runtime_asserts_over_guards: bool = Falsequantizer: ExportQuantizer | None = 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 المستهدف. القيمة الافتراضية هي أحدث مجموعة عمليات مدعومة من قبل إصدارonnxscriptالمثبت. - external_data (
bool، اختياري، القيمة الافتراضيةTrue) — تخزين متجهات الأوزان الكبيرة في ملف جانبي منفصل.onnx_dataبدلاً من تضمينها في ملف البروتوكول. يُشترط هذا الخيار للنماذج التي تتجاوز أوزانها حد 2 غيغابايت الخاص بملفات البروتوكول. - optimize (
bool، اختياري، القيمة الافتراضيةTrue) — تنفيذ عمليات تحسينonnxscript(طيّ الثوابت، إزالة الكود غير المستخدم، …) على الرسم البياني المُصدَّر. عطّل هذا الخيار للنماذج التي تصطدم بأخطاء في مُحسِّنonnxscriptالأصلي. - export_params (
bool، اختياري، القيمة الافتراضيةTrue) — تضمين أوزان النموذج في رسم ONNX. اضبطه علىFalseلتصدير رسم خالٍ من الأوزان (يجب توفير الأوزان وقت التشغيل). - keep_initializers_as_inputs (
bool، اختياري، القيمة الافتراضيةFalse) — تُعرِّف مُهيِّئات الأوزان كمدخلات صريحة للرسم البياني. وهي مطلوبة من بعض إصدارات ONNX runtimes الأقدم (opset < 9).
فئة التهيئة لتصدير النماذج إلى ONNX عبر torch.onnx.export.
يرث جميع الحقول من DynamoConfig (dynamic، strict، dynamic_shapes، prefer_deferred_runtime_asserts_over_guards).
ExecutorchConfig
فئة transformers.exporters.ExecutorchConfig
< source >( export_format: ExportFormat = <ExportFormat.EXECUTORCH: 'executorch'>dynamic: bool = Falsestrict: bool = Falsedynamic_shapes: dict[str, Any] | None = Noneprefer_deferred_runtime_asserts_over_guards: bool = Falsequantizer: ExportQuantizer | None = Nonebackend: str = 'xnnpack'alloc_graph_input: bool = Truealloc_graph_output: bool = Truealloc_mutable_buffers: bool = True )
المعاملات
- backend (
str, اختياري, الافتراضي هو"xnnpack") — خلفية ExecuTorch المستهدفة. القيم المدعومة:"xnnpack"— الاستدلال على المعالج المركزي عبر مكتبة XNNPACK (الافتراضي؛ يعمل في أي مكان)."cuda"— الاستدلال على وحدة معالجة الرسوميات (GPU) عبر وحدة الخلفية CUDA في ExecuTorch."mlx"— استنتاج عبر وحدة المعالجة الرسومية باستخدام وحدة ExecuTorch MLX على Apple Silicon.
- alloc_graph_input (
bool، اختياري، القيمة الافتراضيةTrue) — هل يحجز مسار تخطيط الذاكرة ذاكرة الساحة (arena) لإدخالات الرسم البياني. عند تعيينFalse، يستخدم وقت التشغيل مخازن الإدخال التي يوفرها المستدعي مباشرةً بدلاً من نسخها إلى الساحة — وبالتالي فإن أيUSER_INPUT_MUTATIONفي الموقع (مثل كتابةStaticCache) يقع في متجه المستدعي بدلاً من نسخة الساحة. - alloc_graph_output (
bool، اختياري، القيمة الافتراضيةTrue) — هل يحجز مسار تخطيط الذاكرة ذاكرة الساحة (arena) لمخرجات الرسم البياني. عند تعيينFalse، يجب على المستدعي ربط مخازن المخرجات وقت التشغيل (Method::set_output_data_ptr)؛ وربط مخرج بمخزن مدخله المُعدَّل يتجنّب دورة النسخ للخارج. - alloc_mutable_buffers (
bool، اختياري، القيمة الافتراضيةTrue) — هل تحجز مرحلة تخطيط الذاكرة ذاكرة الساحة (arena) للذاكرة المتغيرة (الحالة المقيمة في النموذج). يتم تمريرها إلىMemoryPlanningPass.
فئة الإعدادات لتصدير النماذج إلى تنسيق ExecuTorch.
يرث جميع الحقول من DynamoConfig (dynamic، strict، dynamic_shapes، prefer_deferred_runtime_asserts_over_guards).
OpenVINOConfig
فئة transformers.exporters.OpenVINOConfig
< source >( export_format: ExportFormat = <ExportFormat.OPENVINO: 'openvino'>dynamic: bool = Falsestrict: bool = Falsedynamic_shapes: dict[str, Any] | None = Noneprefer_deferred_runtime_asserts_over_guards: bool = Falsequantizer: ExportQuantizer | None = 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، اختياري، القيمة الافتراضية 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 IR عبر openvino.convert_model.
يرث جميع الحقول من [DynamoConfig] (dynamic، strict، dynamic_shapes، prefer_deferred_runtime_asserts_over_guards).
مُكمِّسات
فئة transformers.exporters.ExportQuantizer
< source >( calibration_dataset: Iterable[dict[str, Any]] | None = None )
المعاملات
- calibration_dataset (
Iterable[dict], اختياري) — قواميس الإدخال التي يُعاير عليها المُعايِر: قائمة، أوDataLoaderتُجمَّع دفعاته إلى مدخلات النموذج. في حالة~HfExporter.export_for_generation، تكون هذه معاملات generate، وتُلتقط في مجموعة معايرة لكل مكوّن. عند تعيينNone، يُعايِر المُعايِر الذي يحتاج إلى بيانات على مدخلات العينة الخاصة بالتصدير نفسه، مع إصدار تحذير.
الفئة الأساسية لمكمّسات ما بعد التدريب المطبّقة أثناء التصدير.
يُعلن المُكمِّم عن صيغ التصدير التي يدعمها والحزم التي يحتاجها (مع الإصدارات التي تم اختبارها عليها، كما هو الحال مع مُصدِّرات التصدير)، وعن ما إذا كان يُكمِّم رسم torch.export الخاص بـ FX قبل أي تحويل (لذا يتلقى كل مُنفِّذ النتيجة)، أم يُكمِّم النموذج الذي يحوله مُنفِّذ ما (onnx_ir.Model، openvino.Model). يتحقق مُصدِّر التصدير من ذلك مقابل عملية التصدير مسبقاً، ثم يستدعي ~ExportQuantizer.quantize مع ذلك النموذج ومدخلات العينة الخاصة بالتصدير. قم بإنشاء فئة فرعية منه ونفّذ quantize لإضافة طريقة تكميم جديدة؛ حيث تُطبِّق CalibrationSet عينات المعايرة على مدخلات النموذج الخاصة به.
تكميم model (رسم FX إذا كان quantizes_fx_graph، وإلا النموذج الأساسي) وإرجاع النتيجة، مع معايرة على calibration_dataset، أو على sample_inputs الخاص بالتصدير إذا لم يتوفر.
ارفع استثناءً إذا لم يستطع هذا المُكمِّم (quantizer) العمل على تصدير بصيغة export_format، أو إذا كان الحزمة المطلوبة مفقودة أو قديمة جداً؛
وأصدر تحذيراً إذا اختلفت أي حزمة عن الإصدار الذي تم اختباره عليه.
نسخة من هذا المُكمِّم تُعاير على calibration_dataset.
فئة transformers.exporters.quantizers.CalibrationSet
< source >( calibration_dataset: Iterable[dict[str, Any]] | Nonesample_inputs: dict[str, Any]transform: Callable[[dict[str, Any]], Any] )
عرض قابل لإعادة التكرار لعينات المعايرة كمدخلات للنموذج.
تكون العينات هي calibration_dataset الخاص بمُكمِّم الأرقام، أو sample_inputs الخاصة بالتصدير نفسه (مع تحذير، مرة واحدة عند قراءتها) إذا لم يتوفر أي منها. يمكن أن تكون هذه العينات أي خرائط، مثل BatchEncoding الخاص بمُرمِّز. يحوّل transform كل عينة من معاملات الأمامية إلى ما يقبله النموذج المُكمَّم (معاملات مُتبعة، مدخلات ONNX، مدخلات منافذ OpenVINO)، بشكل كسول، عينة واحدة في كل مرة، في كل مسار.
فئة transformers.exporters.PT2EQuantizer
< source >( quantizer: Anycalibration_dataset: Iterable[dict[str, Any]] | None = None )
المعاملات
- quantizer (
torchao.quantization.pt2e.quantizer.Quantizer) — مكمِّم PT2E الذي يضيف التسميات إلى الرسم البياني. يجب أن تكون عمليات التكميم/إلغاء التكميم الخاصة به مدعومة من قبل الخلفية المستهدفة:X86InductorQuantizerلـ inductor، أو ONNX (QDQ) أو OpenVINO، وXNNPACKQuantizerلـ ExecuTorch. - calibration_dataset (
Iterable[dict], اختياري) — قواميس الإدخال التي تُعاير عليها المُراقِبات (انظرExportQuantizer)، مع تمريرة أمامية واحدة لكل منها. لمعايرة على دفعات، مرّرDataLoaderيجمع العينات في قواميس إدخال مُجمّعة بدلاً من قائمة من العينات المفردة.
قم بتكميم رسم FX باستخدام تكميم PyTorch 2 Export (PT2E): يقوم prepare_pt2e بإدراج المراقبين، وتقوم مجموعة المعايرة بتشغيلهم، بينما يستبدل convert_pt2e هذه المراقبين بعمليات التكميم/إلغاء التكميم. يعمل مع جميع واجهات التصدير.
مثال:
>>> from torchao.quantization.pt2e.quantizer.x86_inductor_quantizer import (
... X86InductorQuantizer,
... get_default_x86_inductor_quantization_config,
... )
>>> from transformers.exporters import DynamoConfig, PT2EQuantizer
>>> x86 = X86InductorQuantizer().set_global(get_default_x86_inductor_quantization_config())
>>> DynamoConfig(quantizer=PT2EQuantizer(x86, calibration_dataset=samples))فئة transformers.exporters.OnnxRuntimeQuantizer
< source >( config: OnnxRuntimeStaticConfig | OnnxRuntimeDynamicConfig | None = Nonecalibration_dataset: Iterable[dict[str, Any]] | None = None )
قم بتكميم نموذج ONNX المُحوَّل باستخدام أدوات ONNX Runtime الخاصة (onnxruntime.quantization): إما quantize_static مع OnnxRuntimeStaticConfig (الافتراضي)، أو quantize_dynamic مع OnnxRuntimeDynamicConfig.
مثال:
>>> from transformers.exporters import (
... OnnxConfig,
... OnnxRuntimeDynamicConfig,
... OnnxRuntimeQuantizer,
... OnnxRuntimeStaticConfig,
... )
>>> static = OnnxRuntimeStaticConfig(per_channel=True)
>>> OnnxConfig(quantizer=OnnxRuntimeQuantizer(static, calibration_dataset=samples))
>>> OnnxConfig(quantizer=OnnxRuntimeQuantizer(OnnxRuntimeDynamicConfig()))فئة transformers.exporters.OnnxRuntimeStaticConfig
< source >( quant_format: Any = Noneop_types_to_quantize: list[str] | None = Noneper_channel: bool | None = Nonereduce_range: bool | None = Noneactivation_type: Any = Noneweight_type: Any = Nonenodes_to_quantize: list[str] | None = Nonenodes_to_exclude: list[str] | None = Nonecalibrate_method: Any = Nonecalibration_providers: list[str] | None = Noneextra_options: dict[str, Any] | None = None )
حجج onnxruntime.quantization.quantize_static: تفعيلات وأوزان من نوع int8 (QDQ افتراضياً)، مُعايرة على calibration_dataset الخاص بالمعاير. يُبقي الحقل المُتروك على None على القيمة الافتراضية لـ ONNX Runtime. راجع quantize_static لكل منها.
فئة transformers.exporters.OnnxRuntimeDynamicConfig
< source >( op_types_to_quantize: list[str] | None = Noneper_channel: bool | None = Nonereduce_range: bool | None = Noneweight_type: Any = Nonenodes_to_quantize: list[str] | None = Nonenodes_to_exclude: list[str] | None = Noneextra_options: dict[str, Any] | None = None )
حجج onnxruntime.quantization.quantize_dynamic: أوزان int8، وتفعيلات يتم كميها وقت التشغيل، دون معايرة. أي حقل يُترك على None يحافظ على القيمة الافتراضية لـ ONNX Runtime. راجع quantize_dynamic لكل منها.
فئة transformers.exporters.NNCFOpenVINOQuantizer
< source >( config: NNCFQuantizationConfig | NNCFWeightCompressionConfig | None = Nonecalibration_dataset: Iterable[dict[str, Any]] | None = None )
قم بتكميم نموذج OpenVINO المحوّل باستخدام NNCF: إما nncf.quantize مع NNCFQuantizationConfig (الافتراضي)، أو nncf.compress_weights مع NNCFWeightCompressionConfig.
مثال:
>>> import nncf
>>> from transformers.exporters import NNCFOpenVINOQuantizer, NNCFWeightCompressionConfig, OpenVINOConfig
>>> OpenVINOConfig(quantizer=NNCFOpenVINOQuantizer(calibration_dataset=samples))
>>> OpenVINOConfig(
... quantizer=NNCFOpenVINOQuantizer(NNCFWeightCompressionConfig(mode=nncf.CompressWeightsMode.INT4_SYM))
... )فئة transformers.exporters.NNCFOnnxQuantizer
< source >( config: NNCFQuantizationConfig | NNCFWeightCompressionConfig | None = Nonecalibration_dataset: Iterable[dict[str, Any]] | None = None )
قم بتكميم نموذج ONNX المُحوَّل باستخدام NNCF عبر واجهته الخلفية الخاصة بـ ONNX: إما nncf.quantize مع NNCFQuantizationConfig (الافتراضي، int8 QDQ)، أو nncf.compress_weights مع NNCFWeightCompressionConfig (int4 على شكل MatMulNBits في ONNX Runtime).
مثال:
>>> import nncf
>>> from transformers.exporters import NNCFOnnxQuantizer, NNCFWeightCompressionConfig, OnnxConfig
>>> OnnxConfig(quantizer=NNCFOnnxQuantizer(calibration_dataset=samples))
>>> OnnxConfig(quantizer=NNCFOnnxQuantizer(NNCFWeightCompressionConfig(mode=nncf.CompressWeightsMode.INT4_SYM)))فئة transformers.exporters.NNCFTorchFXQuantizer
< source >( config: NNCFQuantizationConfig | NNCFWeightCompressionConfig | None = Nonecalibration_dataset: Iterable[dict[str, Any]] | None = None )
قم بتكميم مخطط torch.export الخاص بـ FX باستخدام NNCF عبر واجهة TorchFX الخاصة به: إما nncf.quantize مع NNCFQuantizationConfig (الافتراضي، عمليات quantize/dequantize)، أو nncf.compress_weights مع NNCFWeightCompressionConfig. على غرار PT2EQuantizer، يتم تشغيله قبل أي تحويل، لذا تستقبل جميع الواجهات الخلفية نتيجته. يقوم ExecuTorch بتحويل النتيجة التي تتضمن الأوزان فقط: فـ XNNPACK لا يفوّض عمليات quantize/dequantize، ولا يحتوي ExecuTorch على نوى (kernels) لهذه العمليات.
فئة transformers.exporters.NNCFQuantizationConfig
< source >( mode: Any = Nonepreset: Any = Nonetarget_device: Any = Nonesubset_size: int | None = Nonefast_bias_correction: bool | None = Nonemodel_type: Any = Noneignored_scope: Any = Noneadvanced_parameters: Any = None )
حجج nncf.quantize: تفعيلات وأوزان من نوع int8، مُعايرة على calibration_dataset الخاص بالمعاير.
الحقل الذي يُترك على None يحافظ على القيمة الافتراضية لـ NNCF، باستثناء model_type الذي تكون قيمته الافتراضية nncf.ModelType.TRANSFORMER.
راجع nncf.quantize لكل منها.
فئة transformers.exporters.NNCFWeightCompressionConfig
< source >( mode: Any = Noneratio: float | None = Nonegroup_size: int | None = Noneignored_scope: Any = Noneall_layers: bool | None = Nonesensitivity_metric: Any = Nonesubset_size: int | None = Noneawq: bool | None = Nonescale_estimation: bool | None = Nonegptq: bool | None = Nonelora_correction: bool | None = Nonebackup_mode: Any = Nonecompression_format: Any = Noneadvanced_parameters: Any = None )
حجج nncf.compress_weights: int8 أو int4 للأوزان فقط، مع استخدام طرق واعية بالبيانات (AWQ، تقدير المقياس، GPTQ) في أوضاع int4. أوضاع int8 لا تتطلب بيانات؛ أما الأوضاع الأخرى فتُعاير على calibration_dataset الخاص بالمُكمِّم. gptq وlora_correction متاحة فقط في OpenVINO. أي حقل يُترك على None يحافظ على القيمة الافتراضية لـ NNCF. راجع nncf.compress_weights لكل حقل على حدة.
أدوات
دوال على مستوى أدنى تدعم export_for_generation، وهي مفيدة عندما تحتاج إلى التدخّل بين تفكيك النموذج وتصدير كل مكوّن على حدة.
transformers.exporters.utils.get_leaf_tensors
< source >( obj: Any ) → dict[str, torch.Tensor]
استرجاع جميع الموترات الورقية بشكل تكراري من بنية قد تكون متداخلة.
transformers.exporters.utils.prepare_for_export
< source >( model: PreTrainedModel | torch.nn.Moduleinputs: MutableMapping[str, Any] )
اضبط النموذج والمدخلات للتصدير. يعدّل كلًا من model وinputs في مكانهما،
معيدًا (model, inputs, output_flags) حيث يحتوي output_flags على القيم المستخرجة
من inputs الخاصة بـuse_cache وreturn_dict وما إلى ذلك (لتُطبَّق بشكل قابل للعكس على model.config بواسطة patch_model_config أثناء التتبع).
- يُزيل مدخلات التسميات (
labels،future_values) — لا يُدعم حساب الخسارة. - يستخرج أعلام المخرجات (
use_cache،return_dict، …) منinputsحتى لا تظهر كحجج اختيارية مُتبعة؛ وتُعاد القيم إلى كتلة التتبع لتطبيقها علىmodel.config. - يحسب مسبقًا معاملات الرؤية/الصوت المعتمدة على البيانات والمسجلة عبر
@register_export_input_preparerويكتبها فيinputs. - يحوّل تينسورات الإدخال لتطابق
dtype/deviceالخاص بالنموذج.
transformers.exporters.utils.decompose_prefill_decode
< source >( model: PreTrainedModelinputs: dict[str, Any]generation_config: Any = Nonemulti_token_decode: bool = False ) → dict[str, tuple[torch.nn.Module, dict]]
يعيد
dict[str, tuple[torch.nn.Module, dict]]
{"prefill": (model, prefill_inputs), "decode": (model, decode_inputs)}.
شغّل model.generate() وقُم بالتقاط مدخلات prefill و decode.
يعيد استخدام آلية التوليد الكاملة بحيث تحصل كل بنية (فكّ الترميز فقط، SSM، ترميز-فكّ ترميز، متعددة الوسائط، ...) على مدخلات صحيحة دون الحاجة إلى إعادة تنفيذ الحلقة.
يُمرَّر generation_config إلى generate() (وافتراضيًا يُستخدم الخاص بالنموذج نفسه)، لذا فإن المدخلات المُلتقطة تستخدم أي كاش يبنيه generate(). مرِّر كائنًا يحتوي على cache_implementation="static" وmax_cache_len=N لالتقاط كاش بحجم ثابت في مدخلات فك الترميز — وهو الأساس لتصدير كاش ثابت. يحدد max_cache_len حجم الكاش بشكل مستقل عن الالتقاط، لذا فإن فك الترميز المُصدَّر يتعامل مع كاش بحجم ثابت [..., N, ...] بدلاً من كاش متزايد.
عند تفعيل multi_token_decode، يُلتقط مكوّن decode كـ فك ترميز متعدد الرموز — وهو دمج لخطوتين متتاليتين من فك الترميز (انظر _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— إذا لم يتم العثور على أي وحدات فرعية متعددة الوسائط معروفة في النموذج.
التقاط المدخلات لكل وحدة فرعية متعددة الوسائط عبر تمريرة أمامية واحدة.
يكتشف جميع الوحدات الفرعية متعددة الوسائط المعروفة من خلال اسم الخاصية (برج الرؤية، المُشغِّل، نموذج اللغة، lm_head، ...) ويلتقط معاملات استدعاء الأمامي الخاصة بها أثناء استدعاء واحد لـmodel(**inputs).
يُعاد كل وحدة فرعية كعنصر مستقل بصيغة name: (module, inputs) من أجل التصدير المستقل. وقد تم استبعاد خطوة دمج الرموز (مثل masked_scatter في النماذج متعددة الوسائط) عمدًا من الرسوم البيانية المُصدَّرة — إذ تقع على عاتق المستدعي مسؤولية تجميع inputs_embeds من مخرجات المُشفِّر قبل تشغيل المُفكِّك.
transformers.exporters.utils.decompose_for_generation
< source >( model: PreTrainedModelinputs: dict[str, Any]generation_config: Any = Nonemulti_token_decode: bool = False ) → `{component_name
المعاملات
- model — نموذج توليدي. يجب أن يدعم
model.generate(**inputs). - inputs — معاملات Generate — ما ستمرره إلى
model.generate(**inputs). - generation_config —
GenerationConfigاختياري يُمرَّر إلىgenerate()أثناء الالتقاط. مرِّر كائنًا يحتوي علىcache_implementation="static"+max_cache_len=Nللتصدير مقابل ذاكرة مؤقتة بحجم ثابت (انظرdecompose_prefill_decode). - multi_token_decode — عند تعيين
True، يتم التقاط مكوّنdecodeكإفكوك متعدد الرموز (محور تسلسل الاستعلام الديناميكي: عدة رموز في آنٍ واحد — إما استكمال من الماضي، أو تعبئة مسبقة عادية إذا كان المخزن المؤقت فارغًا)؛ ولا يمكن للإفكوك أحادي الرمز أن يبقى ديناميكيًا (انظر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 لالتقاط معاملات استدعاءات المرحلة الأمامية الخاصة بمرحلتَي prefill وdecode من استدعاء حقيقي لـmodel.generate(**inputs, max_new_tokens=2). إذا كانت مرحلة prefill متعددة الوسائط (وفقًا لـis_multimodal)،
فإنها تقسمها إلى عنصر واحد لكل وحدة فرعية (مشفر الرؤية/الصوت، المُشغِّل، نموذج اللغة، lm_head) عبر decompose_multimodal.
يعيد True إذا كان النموذج متعدد الوسائط مع مشفّرات الوسائط ونموذج لغوي.
النموذج الذي ليس PreTrainedModel (مثل nn.Module عادي) لا يحتوي على مُوجِّهات get_encoder/get_decoder قياسية، وهو ليس متعدد الوسائط بوضوح، لذلك يُرجع False مباشرة.