PEFT documentation
PEFT統合用の関数
PEFT統合用の関数
PeftModel 以外のモデル、例えば Transformers や Diffusers の統合に役立つ可能性のある関数のコレクション
ここで提供されている関数はPEFTの「パブリックAPI」とみなすことができ、PEFT統合を提供するパッケージから安全に使用できます。
アダプター重みのdtypeをキャストします
peft.tuners.tuners_utils.cast_adapter_dtype
< source >( model: nn.Moduleadapter_name: strautocast_adapter_dtype: bool = True )
アダプター重みを正しいdtypeにキャストするためのヘルパーメソッドです。アダプターレイヤーに新しいパラメータを再割り当てしますが、古いパラメータを参照しているオブジェクトがある場合、それらは更新されません。
現在、これは float dtype を float32 にのみアップキャストします。
モデルからPEFTアダプターを削除する
peft.tuners.tuners_utils.delete_adapter
< source >( model: nn.Moduleadapter_name: strprefix: strlayer_cls: type[BaseTunerLayer] = <class 'peft.tuners.tuners_utils.BaseTunerLayer'> ) → new_adapter (list[str] | None)
パラメータ
- model (
nn.Module) — アダプターを削除する対象のモデル。 - adapter_name (str) — 削除するアダプターの名前。
- prefix (str) — PEFTメソッドのプレフィックスです。LoRAの場合は“lora_”などです。
- layer_cls (型、任意) —
アダプタレイヤーのクラスです。デフォルトは
BaseTunerLayerです。
戻り値
new_adapter (list[str] | None)
削除後の残りのアダプターの名前、またはアクティブなアダプターがもう存在しない場合はNone。必要に応じて、モデルの新しいアクティブなアダプターを設定するために使用します。
既存のPEFTアダプターを削除します。
注: この関数は、モデルにPEFT設定が存在する場合でも削除しません。また、最後のPEFTアダプターを削除しても、PEFTレイヤーを完全に除去しません。PEFTモデルインスタンスを使用している場合はmodel.unload()の使用を検討するか、ベースモデルを再読み込みしてください。
PEFTアダプターのステートディクトを取得します
peft.get_peft_model_state_dict
< source >( modelstate_dict = Noneadapter_name: str = 'default'unwrap_compiled: bool = Falsesave_embedding_layers: bool | Literal['auto'] = 'auto' )
パラメータ
- model (PeftModel) — Peftモデルです。torch.nn.DistributedDataParallel、DeepSpeed、FSDPを使用する場合は、モデルは基盤モデル/アンラップされたモデル(つまり model.module)である必要があります。
- state_dict (
dict、任意、デフォルトはNone) — モデルの state dict です。指定されない場合、渡されたモデルの state dict が使用されます。 - adapter_name (
str, 省略可能、デフォルトは"default") — 返す state dict を持つアダプタの名前。 - unwrap_compiled (
bool、省略可、デフォルトはFalse) — torch.compile が使用された場合、モデルをアンラップするかどうか。 - save_embedding_layers (
Union[bool, str], , 省略可能、デフォルトはauto) —Trueの場合、アダプター重みの他に埋め込み層も保存します。autoの場合、利用可能な場合、config のtarget_modulesに一般的な埋め込み層peft.utils.other.EMBEDDING_LAYER_NAMESが含まれているかをチェックし、その結果に基づいてブールフラグを設定します。これは 🤗 transformers のモデルでのみ機能します。
PEFTモデルの指定されたアダプターのstate dictを取得します。
これはPEFTのパラメータのみを含み、ベースモデルのパラメータは含まれません。そのため、返されるstate_dictは、通常、モデル全体サイズと比較して小さいです。完全なstate_dictを取得するには、model.state_dict()を呼び出すだけです。
アダプター名はstate_dictから削除されることに注意してください。これは、アダプターを読み込む際に変更できる任意の名前だからです。例えば、アダプター名が'default'で、元のキーが'model.q_proj.lora_A.default.weight'の場合、返されるキーは'model.q_proj.lora_A.weight'になります。重みを読み込む際にアダプター名を処理するには、この関数をset_peft_model_state_dict()と併せて使用してください。
PEFT設定に基づいて、モデルにPEFTアダプターを注入します
peft.inject_adapter_in_model
< source >( peft_config: PeftConfigmodel: torch.nn.Moduleadapter_name: str = 'default'low_cpu_mem_usage: bool = Falsestate_dict: Optional[dict[str, torch.Tensor]] = None )
パラメータ
- peft_config (
PeftConfig) — PEFTモデルのパラメータを含む設定オブジェクト。 - model (
torch.nn.Module) — アダプターを注入する対象のモデル。 - adapter_name (
str,optional, デフォルトは"default") — 注入するアダプターの名前です。指定しない場合、デフォルトのアダプター名(“default”)が使用されます。 - low_cpu_mem_usage (
bool、optional、デフォルトはFalse) — メタデバイス上に空のアダプター重みを生成します。読み込みプロセスを高速化するために有用です。 - state_dict (
dict、任意、デフォルトはNone) — ここでstate_dictが渡された場合、state_dict のエントリに基づいてアダプターが注入されます。 これは、PEFT メソッドの正確なtarget_modulesが不明な場合に有用です。例えば、チェックポイントがメタデータなしで作成された場合などが挙げられます。なお、state_dictの値は使用されず、アダプトすべき正しいレイヤーを決定するためにキーのみが使用されます。
PEFTレイヤーを作成し、モデルにインプレースで注入します。
現在、APIはプロンプト学習手法、adaption prompt、または複数のターゲット層間でアダプタの状態を共有するチューナーをサポートしていません。後者にはget_peft_model()を使用してください。
この関数はget_peft_model()に似ていますが、PeftModelのインスタンスを返しません。代わりに、渡されたモデルの元のインスタンスを変更して返します。
モデルのアクティブなPEFTアダプターを設定します
peft.tuners.tuners_utils.set_adapter
< source >( modeladapter_name: str | list[str]inference_mode: bool = Falselayer_cls: type[BaseTunerLayer] = <class 'peft.tuners.tuners_utils.BaseTunerLayer'> )
モデルのアクティブなPEFTアダプターを設定します。
アクティブアダプターとは、フォワードパスに参加するアダプターのことです。複数のPEFTアダプター間で切り替えたい場合は、この関数を使用してください。
指定されたアダプターのトレーニングモードを設定します
peft.tuners.tuners_utils.set_training
< source >( modeladapter_names: str | Sequence[str]training: bool = True )
指定されたアダプターモジュールでトレーニングモードを有効化または無効化します。
指定されたアダプターのrequires_grad属性を設定します
peft.tuners.tuners_utils.set_requires_grad
< source >( modeladapter_names: str | Sequence[str]requires_grad: bool = True )
指定されたアダプターで勾配を有効または無効にします。
PEFTステートディクトの重みをモデルに読み込みます
peft.set_peft_model_state_dict
< source >( modelpeft_model_state_dictadapter_name = 'default'ignore_mismatched_sizes: bool = Falselow_cpu_mem_usage: bool = False )
パラメータ
- model (PeftModel) — Peftモデルです。
- peft_model_state_dict (
dict) — Peft モデルの state dict です。 - adapter_name (
str, 省略可能、デフォルトは"default") — 設定する state dict を持つアダプターの名前。 - ignore_mismatched_sizes (
bool、任意、デフォルトはFalse) — state dict のサイズ不一致を無視するかどうか。 - low_cpu_mem_usage (
bool、optional、デフォルトはFalse) —modelがメタデバイス上のアダプター重みで読み込まれた場合(例えば、low_cpu_mem_usage=Trueを指定してinject_adapter_in_modelを呼び出した後など)、この引数はTrueに設定する必要があります。それ以外の場合は、Falseのままにしてください。
PEFTモデルのstate dictを設定します。
PEFTのstate_dict(get_peft_model_state_dict()によって返されるもの)が与えられた場合、重みをモデルに挿入します。モデルには、PEFTアダプターがすでに配置されている必要があります(例:inject_adapter_in_model() を使用して配置する)。
アダプター重みの設定により、アダプター名の再挿入も処理されます。この名前は、アダプターを訓練した際に最初に使用されたものとは異なる場合があります。