Transformers documentation
エクスポート
エクスポート
HfExporter をサブクラス化することで、Transformers に新しいエクスポートバックエンドを追加できます。
Exportersガイドで、組み込みエクスポート機能の使用方法を学びましょう。
AutoHfExporter
ExportConfigに基づいて、適切なHfExporterに自動的にインスタンス化を行うAuto-HFエクスポートクラスです。
エクスポート設定を同梱した事前学習済みモデル/チェックポイントから、エクスポートアインスタンスを読み込みます。
未実装 — 第一級「エクスポートレシピ」ワークフローのプレースホルダーです。
アイデア: モデルのオーナーは、Hub 上の重みファイルとともに export_config.json(または config.json 内の export_config フィールド)を公開します。このファイルには、オーナーがそのアーキテクチャに対してすでに検証済みの設定が記録されます。具体的には、ターゲット形式(dynamo / onnx / executorch)、正確な動的形状の仕様(例: text_ids は 4096 まで動的、画像タイルは 448 に固定、エッジデプロイメント向けに batch=1)、strict フラグ、ONNX opset、prefill と decode のレイアウト、ExecuTorch バックエンドの選択、そして現在 README やプライベートなノートブックに属人的な知識として存在するその他のすべての設定項目です。
その後、コンシューマーは1回の呼び出しで、オーナーが検証済みのエクスポートを取得します。
exporter = AutoHfExporter.from_pretrained("org/model-name")
program = exporter.export(model, inputs)[register_export_input_preparer] レジストリと組み合わせます。オーナーは export_config.json 経由で形状仕様を供給し、transformers はそのアーキテクチャに対してデータ依存の事前計算(cu_seqlens、ビジョンの位置 ID、ウィンドウインデックスなど)を供給します。これにより、新モデルのエクスポートにおける 2 つの困難な部分、すなわち正しい形状契約の把握と正しい入力の準備がカバーされるため、下流のユーザーはどちらについてもゼロから再導出する必要がなく(誤った実装により本番環境で破綻することもない)、安全に利用できます。
export_format が、設定クラスとエクスポートークラスの両方が登録されている形式を記述している場合は True を返します。形式が完全に欠落している、不明である、または片方だけが登録されている場合、対応可能なメッセージで警告を発します。
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などのモーダリティ入力)。ステージごとの forward 引数は内部で取得されます。 - config (
ExportConfigMixinまたはdict[str, ExportConfigMixin]) — バックエンド固有の設定です。すべてのコンポーネントに適用する場合は単一の設定を、コンポーネント名をキーとするdict(例:"image_encoder"、"language_model"、"lm_head"、"decode")を渡すことでコンポーネントごとに上書きできます。dict にはすべてのコンポーネント名が含まれている必要があります。 - generation_config (GenerationConfig、任意) —
generate()のキャプチャに転送されます(デフォルトではモデル自身の設定が使用されます)。固定サイズのStaticCacheに対してエクスポートするには、cache_implementation="static"を指定したオブジェクトを渡してください。 - multi_token_decode (
bool、任意、デフォルトはFalse) —decodeコンポーネントが複数のクエリトークンを一度に処理するかどうかを示します。動的なクエリ軸(空のキャッシュでの prefill、それ以外は past からの継続)を使用するか、従来の単一トークンステップ(decompose_for_generation() を参照)を使用するかの選択です。動的な形状のエクスポート(config.dynamic=True)下でのみ、動的な状態を維持します。
戻り値
dict[str, Any]
{component_name: backend_specific_artifact} — decompose_for_generation() と同じキーを持ちます。値は、具体的なバックエンド(ExportedProgram、ONNXProgram、ExecutorchProgramManager)に対して ~HfExporter.export が返すものです。
生成モデルを分解し、各コンポーネントを独立してエクスポートします。
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 のエクスポートツールです。
例:
>>> 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をONNXのONNXProgramに変換するエクスポートツールです。
例:
>>> 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 を 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")エクスポート
< 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 で厳格モードを有効にするかどうか。完全なシンボリックトレースを実行し、より多くのエラーを検出できますが、処理が遅く、複雑なモデルでは失敗する可能性が高くなります。
- dynamic_shapes (dict[str, Any]、任意) — torch.export に渡す、入力ごとの明示的な動的形状の指定です。dynamic より優先されます。
- prefer_deferred_runtime_asserts_over_guards (bool、optional、デフォルトは False) —
True の場合、エクスポートされたグラフ内で、ガードがシンボリックな形状の全範囲にわたって成立しない場合にトレース時にエクスポートを失敗させる代わりに、データ依存の形状ガードがランタイムアサートとして出力されます。細粒度の
Dim(min=, max=)境界を使用する場合は、ほとんどの Transformer LLM でこれを True に設定する必要があります。dynamic=True/Dim.AUTOを使用する場合、torch.exportがユーザーが指定した境界に対して検証するのではなく、形状の関係を推論するため、この設定は不要です。 - quantizer ([~exporters.quantizers.ExportQuantizer], optional) — エクスポート時に適用されるポストトレーニング量子化: すべてのバックエンドで 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
class 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、任意、デフォルトは 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) のすべてのフィールドを継承します。
量子化
class transformers.exporters.ExportQuantizer
< source >( calibration_dataset: Iterable[dict[str, Any]] | None = None )
エクスポート時に適用されるポストトレーニング量子化器の基底クラスです。
Quantizer は、エクスポート形式のサポート状況と、必要なパッケージ(exporter と同様に、テストで検証したバージョンを含む)を宣言します。また、torch.export FX グラフを、変換を行う前に量子化するか(その場合、すべてのバックエンドが結果を受け取ります)、それともバックエンドが変換したモデル(onnx_ir.Model、openvino.Model)を量子化するかを指定します。exporter は、エクスポートに対して事前に検証を行い、その後、そのモデルとエクスポートのサンプル入力引数を引数として ~ExportQuantizer.quantize を呼び出します。新しい量子化手法を追加するには、このクラスをサブクラス化し、quantize を実装します。CalibrationSet は、キャリブレーションサンプルをモデル自身の入力引数にマッピングします。
model(quantizes_fx_graph が真の場合は FX グラフ、それ以外の場合はバックエンドモデル)を量子化し、calibration_dataset でキャリブレーションした結果を返します。calibration_dataset が指定されていない場合は、エクスポートの sample_inputs を用いてキャリブレーションします。
この量子化器がexport_formatのエクスポートで実行できない場合、または必要なパッケージが欠落しているかバージョンが古すぎる場合は例外を発生させ、テストされたバージョンと異なる場合は警告を発します。
calibration_datasetでキャリブレーションを行う、このクオンタイザーのコピー。
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は、各パスにおいて1サンプルずつ遅延評価で、各フォワード引数のサンプルを、クオンタイズ済みモデルが受け取る形式(トレースされた引数、ONNXのフィード、OpenVINOのポートフィード)に変換します。
class transformers.exporters.PT2EQuantizer
< source >( quantizer: Anycalibration_dataset: Iterable[dict[str, Any]] | None = None )
パラメータ
- quantizer (
torchao.quantization.pt2e.quantizer.Quantizer) — グラフにアノテーションを付与する PT2E クアンタイザーです。その quantize/dequantize 演算子は、ターゲットバックエンドがサポートしているものでなければなりません: inductor にはX86InductorQuantizer、ONNX (QDQ) または OpenVINO、ExecuTorch にはXNNPACKQuantizer。 - calibration_dataset (
Iterable[dict], 省略可) — 観測器がキャリブレーションに使用する入力 dict(ExportQuantizerを参照)です。1 回の forward ごとに 1 つの dict を渡します。バッチでキャリブレーションを行う場合は、単一のサンプルのリストではなく、サンプルをバッチ化された入力 dict にまとめるDataLoaderを渡してください。
PyTorch 2 Export (PT2E) 量子化で FX グラフを量子化します: 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))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 を参照してください。
class 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 )
torch.export FX グラフを、NNCF の TorchFX バックエンドを通じて量子化します: nncf.quantize に NNCFQuantizationConfig を渡す(デフォルトの quantize/dequantize オペレーションを使用)か、nncf.compress_weights に NNCFWeightCompressionConfig を渡します。PT2EQuantizer と同様に、変換の実行前に処理されるため、すべてのバックエンドがその結果を受け取ります。ExecuTorch は、weight-only の結果のみをローワーします。XNNPACK は quantize/dequantize オペレーションを委譲せず、ExecuTorch にはそれらのカーネルが存在しないためです。
class 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 の引数: クォンタイザーの calibration_dataset でキャリブレーションされた int8 アクティベーションと重み。
None のままのフィールドは NNCF のデフォルトが維持されますが、model_type はデフォルトが nncf.ModelType.TRANSFORMER です。
各引数については nncf.quantize を参照してください。
class 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、スケール推定、GPTQ) を用いた weight-only の int8 または 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 などの値がポップされたものが格納されます(トレース中に patch_model_config によって model.config に可逆的に適用されます)。
- ラベル入力(
labels、future_values)を除去します。損失の計算はサポートされていません。 inputsから出力フラグ(use_cache、return_dictなど)を取り除き、トレースされた kwargs として表示されないようにします。値は返され、トレースブロックによってmodel.configに適用されます。@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、マルチモーダルなど)が、ループを再実装することなく正しい入力を受け取ります。
generation_config は generate() に転送されます(デフォルトではモデル自身の設定が使用されます)。そのため、キャプチャされる入力には、generate() が構築するキャッシュがそのまま使用されます。cache_implementation="static" と max_cache_len=N を指定して渡すことで、デコード入力に静的にサイズ指定されたキャッシュをキャプチャできます。これが static-cache エクスポートの基盤となります。max_cache_len はキャプチャとは独立してキャッシュのサイズを決定するため、エクスポートされたデコードは増加するキャッシュではなく、固定の [..., N, ...] キャッシュを使用します。
multi_token_decode が設定されている場合、decode コンポーネントはマルチトークンデコードとしてキャプチャされます。これは2つの連続するデコードステップをマージしたものです(_merge_decode_calls を参照)。これにより、クエリシーケンス軸がシンボリックな状態(単一トークンのデコードでは、この軸が 1 に特殊化されてしまうため)に保たれます。その後、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]]
検出されたサブモジュール(画像/音声エンコーダー、プロジェクター、言語モデル、lm_head)ごとに1つのname: (module, inputs)エントリ。
例外
ValueError
ValueError— モデル上で既知のマルチモーダルサブモジュールが見つからない場合。
単一の forward passで、各マルチモーダルサブモジュールへの入力をキャプチャします。
アトリビュート名(ビジョンタワー、プロジェクター、言語モデル、lm_head など)から既知のマルチモーダルサブモジュールをすべて検出し、model(**inputs) の呼び出し 1 回でそれらの 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)ごとに1エントリずつに分割します。
モデルがマルチモーダルであり、モーダルエンコーダーと言語モデルを備えている場合はTrueを返します。
PreTrainedModel ではないモデル(例:素の nn.Module)には、正規の get_encoder/get_decoder アクセサーが存在せず、マルチモーダルではないことは自明であるため、False にショートサーキットします。