winglian commited on
Commit
0cfdb2c
1 Parent(s): 3765747

support for DoRA w/ PEFT (#1363)

Browse files
requirements.txt CHANGED
@@ -1,7 +1,7 @@
1
  --extra-index-url https://huggingface.github.io/autogptq-index/whl/cu118/
2
  packaging==23.2
3
- peft @ git+https://github.com/huggingface/peft.git
4
- transformers @ git+https://github.com/huggingface/transformers.git@ae49b218c3d718df90d8e4a109016450fb8f0632
5
  tokenizers==0.15.0
6
  bitsandbytes>=0.41.1
7
  accelerate==0.26.1
 
1
  --extra-index-url https://huggingface.github.io/autogptq-index/whl/cu118/
2
  packaging==23.2
3
+ peft==0.9.0
4
+ transformers==4.38.2
5
  tokenizers==0.15.0
6
  bitsandbytes>=0.41.1
7
  accelerate==0.26.1
src/axolotl/utils/config/models/input/v0_4_1/__init__.py CHANGED
@@ -178,6 +178,7 @@ class LoraConfig(BaseModel):
178
  lora_dropout: Optional[float] = None
179
  peft_layers_to_transform: Optional[List[int]] = None
180
  peft: Optional[PeftConfig] = None
 
181
 
182
  lora_on_cpu: Optional[bool] = None
183
  gptq: Optional[bool] = None
@@ -233,6 +234,17 @@ class LoraConfig(BaseModel):
233
  raise ValueError("Require cfg.load_in_4bit to be True for qlora")
234
  return self
235
 
 
 
 
 
 
 
 
 
 
 
 
236
 
237
  class ReLoRAConfig(BaseModel):
238
  """ReLoRA configuration subset"""
 
178
  lora_dropout: Optional[float] = None
179
  peft_layers_to_transform: Optional[List[int]] = None
180
  peft: Optional[PeftConfig] = None
181
+ peft_use_dora: Optional[bool] = None
182
 
183
  lora_on_cpu: Optional[bool] = None
184
  gptq: Optional[bool] = None
 
234
  raise ValueError("Require cfg.load_in_4bit to be True for qlora")
235
  return self
236
 
237
+ @model_validator(mode="before")
238
+ @classmethod
239
+ def validate_quantized_dora(cls, data):
240
+ if data.get("peft_use_dora") and (
241
+ data.get("load_in_8bit") or data.get("load_in_4bit")
242
+ ):
243
+ raise ValueError(
244
+ "`peft_use_dora` is not currently compatible with quantized weights."
245
+ )
246
+ return data
247
+
248
 
249
  class ReLoRAConfig(BaseModel):
250
  """ReLoRA configuration subset"""
src/axolotl/utils/models.py CHANGED
@@ -830,6 +830,8 @@ def load_lora(model, cfg, inference=False, config_only=False):
830
  if loftq_bits:
831
  lora_config_kwargs["loftq_config"] = LoftQConfig(loftq_bits=loftq_bits)
832
  lora_config_kwargs["init_lora_weights"] = "loftq"
 
 
833
 
834
  lora_config = LoraConfig(
835
  r=cfg.lora_r,
 
830
  if loftq_bits:
831
  lora_config_kwargs["loftq_config"] = LoftQConfig(loftq_bits=loftq_bits)
832
  lora_config_kwargs["init_lora_weights"] = "loftq"
833
+ if cfg.peft_use_dora:
834
+ lora_config_kwargs["use_dora"] = cfg.peft_use_dora
835
 
836
  lora_config = LoraConfig(
837
  r=cfg.lora_r,