Transformers documentation
エクスポート
エクスポート
HfExporter をサブクラス化し、register_backend() で登録することで、Transformers に新しいエクスポートバックエンドを追加できます。
Exportersガイドで、組み込みエクスポート機能の使用方法を学びましょう。
AutoHfExporter
ExportConfigに基づいて、適切なHfExporterに自動的にインスタンス化を行うAuto-HFエクスポートクラスです。
AutoExportConfig
辞書に保存されたエクスポート設定に基づいて、正しいエクスポート設定へ自動的にディスパッチする処理を担当するAuto-HFエクスポート設定クラスです。
register_backend
transformers.exporters.register_backend
< source >( exporter: type[HfExporter]runner: type[ModelRunner] | None = None )
config_class を持つエクスポートアを、その export_format 配下およびエクスポートを実行するランナーとともに登録し、auto クラスがそれらを発見できるようにします。
HfExporter
すべての Transformers エクスポート用の抽象基底クラス。
バックエンドを追加するには、~HfExporter.export_program を実装して1つのグラフをトレースし、~HfExporter.save_program / ~HfExporter.load_program を実装して書き出しと読み戻しを行うようにサブクラスを作成します。パブリックな ~HfExporter.export と ~HfExporter.export_for_generation は、これらを基にして ExportedModel を構築します。
エクスポート
< source >( model: PreTrainedModelsample_inputs: MutableMapping[str, torch.Tensor | Cache]config: ExportConfigMixin | dict[str, Any] ) → ExportedModel
戻り値
ExportedModel
単一の"model"コンポーネント。バックエンドのプログラムは.programであり、save_pretrainedはメタデータとモデル設定とともにこれを保存します。
モデルを1つのグラフとしてエクスポートします。
~HfExporter.export_program と同じ forward の kwargs を受け取ります。
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 ) → ExportedModel
パラメータ
- 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)下でのみ、動的な状態を維持します。
戻り値
ExportedModel
ステージごとに1つのExportedComponentがあり、decompose_for_generation()と同じキーを持ちます。
生成モデルを分解し、各コンポーネントを独立してエクスポートします。
Thin wrapper around decompose_for_generation() that calls ~HfExporter.export_program 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.
export_program
< source >( model: PreTrainedModelsample_inputs: MutableMapping[str, torch.Tensor | Cache]config: ExportConfigMixin ) → tuple[Any, ExportMetadata]
パラメータ
- 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) — バックエンド固有の設定です。
戻り値
tuple[Any, ExportMetadata]
バックエンドのプログラムオブジェクト(ExportedProgram、onnx_ir.Model、
ExecutorchProgramManager、openvino.Model)と、トレース中に記録されたメタデータ
(build_export_metadata())は、一部のフォーマットのみがメタデータを保持できるため、
それぞれ別々に返されます。
1つのグラフをトレースします。~HfExporter.save_programと組み合わされたバックエンドの拡張ポイントです。
~HfExporter.save_program で書き出されたプログラムを読み戻します。~HfExporter.export_program が返したものと異なる場合があります。ExecuTorch 用のランタイム Program であり、その ExecutorchProgramManager はファイルから再構築できません。
~HfExporter.save_program が filename として保存されたプログラムに対して書き出すファイルは、ファイル本体と、そのフォーマットがファイルの隣に保持するもの(重み、外部データ)です。
~HfExporter.export_program が返す 1 つのプログラムを、バックエンドのファイル形式で path に書き出します。
required_packages がインストールされていることを確認し、tested_versions とのバージョンの乖離がある場合は警告を発します。
ExportedModel
クラス transformers.exporters.ExportedModel
< source >( components: dict[str, ExportedComponent]export_format: ExportFormat | strconfig: PreTrainedConfig | None = Nonegeneration_config: GenerationConfig | None = None )
エクスポートされたモデル: そのグラフ(components、{name: ExportedComponent})と、それらがトレースされた設定。呼び出し方は、そのモデルが由来する元のモデルを呼び出すのと同じです。
~HfExporter.export は単一の"model"コンポーネントを生成し、そのプログラムは.programです。~HfExporter.export_for_generation は、生成ステージごとに1つのコンポーネントを生成します。
>>> exported = OnnxExporter().export(model, inputs, OnnxConfig(dynamic=True))
>>> exported.save_pretrained("exported")
>>> outputs = ExportedModel.from_pretrained("exported", device="cuda")(**inputs)
>>> outputs.last_hidden_state単一グラフのエクスポートを実行し、ソースモデルが返すものを返します。エクスポート時にトレースされなかったKwargは破棄されるため、プロセッサの出力全体を渡すことができます。share_inputsとshare_outputsはランナーに渡されます(ModelRunner.__call__を参照):share_outputsを指定すると、出力は次の呼び出しまで有効です。
単一グラフのエクスポートにおけるバックエンド独自のプログラム。
device(None の場合はバックエンドのデフォルト)上のバックエンドのランタイムにプログラムを読み込みます。runner_kwargs はバックエンドのランナーに渡されます。ONNX Runtime には providers と session_options、OpenVINO には config(コンパイルプロパティ)と torch_threads(モデルの周りで torch の処理と CPU を分割)を指定します。
save_pretrained
< source >( save_directory: str | Pathpush_to_hub: bool = False**kwargs )
コンポーネント(1つにつき1ファイル)、設定ファイル、および各コンポーネントのファイル名とトレース時に記録されたメタデータを示すマニフェストを作成します。~ExportedModel.from_pretrainedがこれらを再読み込みします。
from_pretrained
< source >( pretrained_model_name_or_path: str | Pathdevice = Nonecache_dir: str | os.PathLike | None = Noneforce_download: bool = Falselocal_files_only: bool = Falsetoken: str | bool | None = Nonerevision: str = 'main'subfolder: str = ''trust_remote_code: bool = False**runner_kwargs )
パラメータ
- pretrained_model_name_or_path (
strまたはPath) — ローカルディレクトリ、または Hub のリポジトリ ID。Hub からダウンロードされるのは、マニフェストに名前が記載されているファイルのみです。そのため、エクスポートはモデル自身の重みファイルの隣に配置できます。 - device (
strまたはtorch.device、省略可) — 実行先(Noneの場合はバックエンドのデフォルト)。 - cache_dir (
Union[str, os.PathLike], 任意) — 標準のキャッシュを使用しない場合、ダウンロードした事前学習済みモデルの構成をキャッシュするディレクトリのパス。 - force_download (
bool、任意、デフォルトはFalse) — モデルの重みと設定ファイルを(再)ダウンロードを強制するかどうか。キャッシュされたバージョンが存在する場合でも、それを上書きします。 - local_files_only (
bool、任意、デフォルトはFalse) — ローカルファイルのみを対象とするかどうか(つまり、モデルのダウンロードを試みないかどうか)。 - token (
strまたはbool、省略可) — リモートファイルの HTTP ベアラ認証に使用するトークンです。Trueの場合、または指定されていない場合は、hf auth loginを実行した際に生成されたトークン(~/.huggingfaceに保存)が使用されます。 - revision (
str, 省略可, デフォルトは"main") — 使用する特定のモデルのバージョンです。huggingface.co ではモデルやその他の成果物を保存するために git ベースのシステムを使用しているため、ブランチ名、タグ名、またはコミット ID を指定できます。したがって、revisionには git で許可される任意の識別子を指定できます。Hub で作成した pull request をテストするには、
revision="refs/pr/<pr_number>"を渡すことができます。 - subfolder (
str、任意、デフォルトは"") — huggingface.co 上のモデルリポジトリのサブフォルダ内に該当するファイルが配置されている場合、ここにフォルダ名を指定できます。 - trust_remote_code (
bool、任意、デフォルトはFalse) — from_pretrained() と同様に、コードがリポジトリに存在するモデルの設定を読み込むかどうかを指定します。 - runner_kwargs (任意) —
~ExportedModel.toと同様に、バックエンドのランナーオプションです。ONNX Runtime にはprovidersとsession_options、OpenVINO にはconfigとtorch_threadsを指定します。
~ExportedModel.save_pretrained が書き込んだ内容をロードします。各コンポーネントは、そのバックエンドの ~HfExporter.load_program を通じて、メタデータおよび隣接して保存された設定ファイルとともに読み込まれます。プログラムは、そのバックエンドのランタイム上で即座にロードされ、実行可能な状態になります。
ExportedComponent
エクスポートされたグラフは1つ: バックエンドのプログラムと、エクスポートツールがそれについて記録した情報です。
ExportMetadata
クラス transformers.exporters.ExportMetadata
< source >( architecture: str | None = Nonepackages: dict[str, str] = <factory>export_config: dict[str, Any] = <factory>export_dtype: str | None = Noneexport_device: str | None = Nonekwargs: dict[str, dict] = <factory>in_spec: str | None = Noneout_spec: str | None = Nonein_constants: dict[str, Any] = <factory>out_constants: list = <factory> )
エクスポートが1つのグラフについて記録した内容(build_export_metadata())。
dictからメタデータを構築し、このクラスに存在しないフィールド(新しいバージョンで追加されたもの)はスキップします。
ModelRunner
バックエンドでエクスポートされたプログラムを1つ実行します: runner(**kwargs) は、ソースモデルが返すものを返します。
~HfExporter.load_program がプログラムをエクスポートとして実行するランナーとして返すか、読み戻す場合、device(None の場合はバックエンドのデフォルト)で実行されます。
…
DynamoExporter
ExportedProgram に変換する PreTrainedModel のエクスポートツールです。
例:
>>> from transformers.exporters.exporter_dynamo import DynamoExporter, DynamoConfig
>>> exporter = DynamoExporter()
>>> exported = exporter.export(model, inputs, config=DynamoConfig(dynamic=True))
>>> outputs = exported(**inputs)
>>> exported.save_pretrained("exported") # `model.pt2`, its metadata and the model configエクスポート
< source >( model: PreTrainedModelsample_inputs: MutableMapping[str, torch.Tensor | Cache]config: ExportConfigMixin | dict[str, Any] ) → ExportedModel
戻り値
ExportedModel
単一の"model"コンポーネント。バックエンドのプログラムは.programであり、save_pretrainedはメタデータとモデル設定とともにこれを保存します。
モデルを1つのグラフとしてエクスポートします。
~HfExporter.export_program と同じ forward の kwargs を受け取ります。
OnnxExporter
onnx_ir.Model(ONNXグラフ)へPreTrainedModelを変換するエクスポートツール。
例:
>>> from transformers.exporters.exporter_onnx import OnnxExporter, OnnxConfig
>>> exporter = OnnxExporter()
>>> exported = exporter.export(model, inputs, config=OnnxConfig(dynamic=True))
>>> outputs = exported(**inputs) # on ONNX Runtime
>>> onnx_model = exported.program # an `onnx_ir.Model`
>>> exported.save_pretrained("exported") # `model.onnx`, its metadata and the model configエクスポート
< source >( model: PreTrainedModelsample_inputs: MutableMapping[str, torch.Tensor | Cache]config: ExportConfigMixin | dict[str, Any] ) → ExportedModel
戻り値
ExportedModel
単一の"model"コンポーネント。バックエンドのプログラムは.programであり、save_pretrainedはメタデータとモデル設定とともにこれを保存します。
モデルを1つのグラフとしてエクスポートします。
~HfExporter.export_program と同じ forward の kwargs を受け取ります。
ExecutorchExporter
PreTrainedModel を ExecuTorch の ExecutorchProgramManager に変換する Exporter です。
例:
>>> from transformers.exporters.exporter_executorch import ExecutorchExporter, ExecutorchConfig
>>> exporter = ExecutorchExporter()
>>> exported = exporter.export(model, inputs, config=ExecutorchConfig(backend="xnnpack"))
>>> outputs = exported(**inputs) # on the ExecuTorch runtime
>>> exported.save_pretrained("exported") # `model.pte`, its metadata and the model configエクスポート
< source >( model: PreTrainedModelsample_inputs: MutableMapping[str, torch.Tensor | Cache]config: ExportConfigMixin | dict[str, Any] ) → ExportedModel
戻り値
ExportedModel
単一の"model"コンポーネント。バックエンドのプログラムは.programであり、save_pretrainedはメタデータとモデル設定とともにこれを保存します。
モデルを1つのグラフとしてエクスポートします。
~HfExporter.export_program と同じ forward の kwargs を受け取ります。
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 = Noneopset_version: int | None = Noneoptimize: bool = Trueort_fusions: Literal['cpu', 'cuda', 'webgpu', 'dml'] | None = None )
パラメータ
- opset_version (
int, 任意) — ターゲットとする ONNX opset バージョンです。デフォルトでは、インストールされているonnxscriptバージョンがサポートする最新の opset が使用されます。 - optimize (
bool、省略可、デフォルトはTrue) — エクスポートされたグラフに対してonnxscriptの最適化パス(定数畳み込み、デッドコードエリミネーションなど)を実行します。アップストリームのonnxscriptオプティマイザのバグに遭遇するモデルでは、無効にしてください。 - ort_fusions (
str, 省略可) — 実行プロバイダーで動作する ONNX Runtime のオペレーターにグラフを融合します:"cpu"、"cuda"、"webgpu"または"dml"。融合されたグラフは ONNX Runtime でのみ実行できます。optimize=Trueが必要です。
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 = Nonecompress_to_fp16: bool = Falsestateful: bool = True )
パラメータ
- compress_to_fp16 (bool、optional、デフォルトは False) — 変換後のモデルの float32 重みを float16 に圧縮し、サイズを半分にします。範囲が狭くなるため、デフォルトでは無効です。
- 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 を用いてキャリブレーションします。
FXグラフ量子化器用の、トレースされたkwargsとしてのキャリブレーションサンプル。
この量子化器が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”<modality>_encoder”/“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 にショートサーキットします。