summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYurenHao0426 <Blackhao0426@gmail.com>2026-04-05 16:20:20 -0500
committerYurenHao0426 <Blackhao0426@gmail.com>2026-04-05 16:20:20 -0500
commit6139a848c3b9d5d6c1322cf8acadf2baacee9e8a (patch)
treedbfb02f4682d31881148c12246329049cd9f2d60
parentea4a8f837e81b5e5fab6086cb3014c711c5e58e9 (diff)
Add Prompt Tuning and Prefix Tuning baselines
- peft_baseline.py: Add PromptTuningConfig (L=5,10,20) and PrefixTuningConfig (L=5,10) - run_all_methods.py: Add 5 new methods to dispatch (prompt_tuning_5/10/20, prefix_tuning_5/10) with per-method directory output structure Prompt Tuning: params = L * H (e.g. 10*1536 = 15360 params = 30KB) Prefix Tuning: params = L * num_layers * 2 * H (much larger) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
-rw-r--r--baselines/peft_baseline.py30
-rw-r--r--scripts/run_all_methods.py8
2 files changed, 36 insertions, 2 deletions
diff --git a/baselines/peft_baseline.py b/baselines/peft_baseline.py
index 442ba60..246385f 100644
--- a/baselines/peft_baseline.py
+++ b/baselines/peft_baseline.py
@@ -1,4 +1,4 @@
-"""PEFT baselines: LoRA, Tiny LoRA, and VeRA.
+"""PEFT baselines: LoRA, Tiny LoRA, VeRA, Prompt Tuning, Prefix Tuning.
Per-user adaptation on K support examples, then standard generation.
Uses a class-based API to avoid repeated model wrapping/unwrapping.
@@ -11,7 +11,10 @@ Usage:
"""
import torch
-from peft import LoraConfig, VeraConfig, get_peft_model, TaskType
+from peft import (
+ LoraConfig, VeraConfig, PromptTuningConfig, PrefixTuningConfig,
+ get_peft_model, TaskType, PromptTuningInit,
+)
TARGET_MODULES = ["q_proj", "v_proj"]
@@ -43,6 +46,21 @@ def _make_vera_config(rank, target_modules=None):
)
+def _make_prompt_tuning_config(num_virtual_tokens):
+ return PromptTuningConfig(
+ task_type=TaskType.CAUSAL_LM,
+ num_virtual_tokens=num_virtual_tokens,
+ prompt_tuning_init=PromptTuningInit.RANDOM,
+ )
+
+
+def _make_prefix_tuning_config(num_virtual_tokens):
+ return PrefixTuningConfig(
+ task_type=TaskType.CAUSAL_LM,
+ num_virtual_tokens=num_virtual_tokens,
+ )
+
+
def get_lora_config(rank=8):
return _make_lora_config(rank=rank)
@@ -55,6 +73,14 @@ def get_vera_config(rank=256):
return _make_vera_config(rank=rank)
+def get_prompt_tuning_config(num_tokens=10):
+ return _make_prompt_tuning_config(num_virtual_tokens=num_tokens)
+
+
+def get_prefix_tuning_config(num_tokens=10):
+ return _make_prefix_tuning_config(num_virtual_tokens=num_tokens)
+
+
class PEFTBaseline:
"""Manages a PEFT-wrapped model for repeated per-user adaptation."""
diff --git a/scripts/run_all_methods.py b/scripts/run_all_methods.py
index c5eb523..1502ff3 100644
--- a/scripts/run_all_methods.py
+++ b/scripts/run_all_methods.py
@@ -27,6 +27,7 @@ from adapt.cache_hidden import cache_support_hidden_states
from adapt.fit_theta import fit_theta
from baselines.peft_baseline import (
PEFTBaseline, get_lora_config, get_tiny_lora_config, get_vera_config,
+ get_prompt_tuning_config, get_prefix_tuning_config,
)
from baselines.bm25_top1 import bm25_select_top1
from baselines.dense_retrieval import DenseRetriever
@@ -38,6 +39,8 @@ ALL_METHODS = [
'base', 'uph',
'prompt_all_k', 'bm25_top1', 'dense_top1', 'profile_based',
'lora', 'tiny_lora', 'vera',
+ 'prompt_tuning_5', 'prompt_tuning_10', 'prompt_tuning_20',
+ 'prefix_tuning_5', 'prefix_tuning_10',
]
@@ -97,6 +100,11 @@ class MethodRunner:
'lora': lambda *a: self._run_peft(*a, config=get_lora_config(rank=8), lr=1e-4, desc='LoRA r=8'),
'tiny_lora': lambda *a: self._run_peft(*a, config=get_tiny_lora_config(rank=1), lr=1e-4, desc='Tiny LoRA r=1'),
'vera': lambda *a: self._run_peft(*a, config=get_vera_config(rank=256), lr=1e-3, desc='VeRA r=256'),
+ 'prompt_tuning_5': lambda *a: self._run_peft(*a, config=get_prompt_tuning_config(5), lr=3e-1, desc='PromptTuning L=5'),
+ 'prompt_tuning_10': lambda *a: self._run_peft(*a, config=get_prompt_tuning_config(10), lr=3e-1, desc='PromptTuning L=10'),
+ 'prompt_tuning_20': lambda *a: self._run_peft(*a, config=get_prompt_tuning_config(20), lr=3e-1, desc='PromptTuning L=20'),
+ 'prefix_tuning_5': lambda *a: self._run_peft(*a, config=get_prefix_tuning_config(5), lr=1e-2, desc='PrefixTuning L=5'),
+ 'prefix_tuning_10': lambda *a: self._run_peft(*a, config=get_prefix_tuning_config(10), lr=1e-2, desc='PrefixTuning L=10'),
}
if method_name not in dispatch: