Skip to content

Commit b6cbde9

Browse files
Require peft>=0.17.0 and drop the target_parameters guards (#7640)
1 parent 2ed3e9c commit b6cbde9

14 files changed

Lines changed: 19 additions & 43 deletions

‎.github/workflows/tests.yml‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,7 @@ jobs:
248248
".[dev]" \
249249
"accelerate==1.10.1" \
250250
"datasets==4.7.0" \
251+
"peft==0.17.0" \
251252
"torch==2.6.0" \
252253
"transformers==4.56.2"
253254

‎pyproject.toml‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ openreward = [
7171
"openreward>=0.1.109",
7272
]
7373
peft = [
74-
"peft>=0.13.0"
74+
"peft>=0.17.0"
7575
]
7676
quality = [
7777
"pre-commit",
@@ -108,7 +108,7 @@ dev = [
108108
# openreward
109109
"openreward>=0.1.109",
110110
# peft
111-
"peft>=0.13.0",
111+
"peft>=0.17.0",
112112
# quality
113113
"pre-commit",
114114
"hf-doc-builder",

‎tests/test_dpo_trainer.py‎

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232
require_kernels,
3333
require_liger_kernel,
3434
require_peft,
35-
require_peft_target_parameters,
3635
require_torch_accelerator,
3736
require_vision,
3837
)
@@ -791,7 +790,7 @@ def test_train_dense_with_peft_config_lora(self):
791790
elif "base_layer" not in n: # We expect the peft params to be different (except for the base layer)
792791
assert not torch.equal(param, new_param), f"Parameter {n} has not changed."
793792

794-
@require_peft_target_parameters
793+
@require_peft
795794
def test_train_moe_with_peft_config(self):
796795
model_id = "trl-internal-testing/tiny-GptOssForCausalLM"
797796
model = AutoModelForCausalLM.from_pretrained(model_id, dtype="float32")
@@ -859,7 +858,7 @@ def test_train_peft_model(self):
859858
elif "base_layer" not in n and "ref" not in n: # and the peft params to be different (except base and ref)
860859
assert not torch.equal(param, new_param), f"Parameter {n} has not changed."
861860

862-
@require_peft_target_parameters
861+
@require_peft
863862
def test_train_moe_peft_model(self):
864863
# Regression test for https://github.com/huggingface/trl/issues/5222. Before PEFT 0.20.0, only one adapter per
865864
# model was supported when the LoRA config uses `target_parameters` (see peft#3340, fixed in peft#3350), so no

‎tests/test_grpo_trainer.py‎

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@
4343
require_bitsandbytes,
4444
require_liger_kernel,
4545
require_peft,
46-
require_peft_target_parameters,
4746
require_response_parsing,
4847
require_torch_accelerator,
4948
require_vision,
@@ -1125,7 +1124,7 @@ def test_ref_model_like_model_instance(self):
11251124
assert trainer.ref_model.dtype == torch.bfloat16
11261125
assert trainer.ref_model.config._attn_implementation == "eager"
11271126

1128-
@require_peft_target_parameters
1127+
@require_peft
11291128
def test_train_moe_peft_model(self):
11301129
# Regression test for https://github.com/huggingface/trl/issues/5222. Before PEFT 0.20.0, only one adapter per
11311130
# model was supported when the LoRA config uses `target_parameters` (see peft#3340, fixed in peft#3350), so no

‎tests/test_kto_trainer.py‎

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
require_bitsandbytes,
3434
require_liger_kernel,
3535
require_peft,
36-
require_peft_target_parameters,
3736
require_torch_accelerator,
3837
require_vision,
3938
)
@@ -881,7 +880,7 @@ def test_train_peft_model(self):
881880
elif "base_layer" not in n and "ref" not in n: # and the peft params to be different (except base and ref)
882881
assert not torch.equal(param, new_param), f"Parameter {n} has not changed."
883882

884-
@require_peft_target_parameters
883+
@require_peft
885884
def test_train_moe_peft_model(self):
886885
# Regression test for https://github.com/huggingface/trl/issues/5222. Before PEFT 0.20.0, only one adapter per
887886
# model was supported when the LoRA config uses `target_parameters` (see peft#3340, fixed in peft#3350), so no

‎tests/test_reward_trainer.py‎

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
TrlTestCase,
2929
require_bitsandbytes,
3030
require_peft,
31-
require_peft_target_parameters,
3231
require_torch_accelerator,
3332
)
3433

@@ -428,7 +427,7 @@ def test_train_peft_dora_and_quantization(self):
428427
assert param.dtype == torch.bfloat16, f"Parameter {n} is not in bfloat16."
429428
assert not torch.equal(param, new_param), f"Parameter {n} has not changed."
430429

431-
@require_peft_target_parameters
430+
@require_peft
432431
def test_train_moe_with_peft_config(self):
433432
model_id = "trl-internal-testing/tiny-GptOssForCausalLM"
434433
model = AutoModelForSequenceClassification.from_pretrained(model_id, dtype="float32")

‎tests/test_rloo_trainer.py‎

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@
3737
require_bitsandbytes,
3838
require_liger_kernel,
3939
require_peft,
40-
require_peft_target_parameters,
4140
require_torch_accelerator,
4241
require_vision,
4342
require_vllm,
@@ -784,7 +783,7 @@ def test_train_peft_model(self):
784783
elif "base_layer" not in n and "ref" not in n: # and the peft params to be different (except base and ref)
785784
assert not torch.equal(param, new_param), f"Parameter {n} has not changed."
786785

787-
@require_peft_target_parameters
786+
@require_peft
788787
def test_train_moe_peft_model(self):
789788
# Regression test for https://github.com/huggingface/trl/issues/5222. Before PEFT 0.20.0, only one adapter per
790789
# model was supported when the LoRA config uses `target_parameters` (see peft#3340, fixed in peft#3350), so no

‎tests/test_sft_trainer.py‎

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@
4141
require_kernels,
4242
require_liger_kernel,
4343
require_peft,
44-
require_peft_target_parameters,
4544
require_torch_accelerator,
4645
require_vision,
4746
)
@@ -704,7 +703,7 @@ def test_train_with_peft_config_prompt_tuning(self, peft_type):
704703
else: # We expect the peft params to be different
705704
assert not torch.equal(param, new_param), f"Parameter {n} has not changed."
706705

707-
@require_peft_target_parameters
706+
@require_peft
708707
def test_train_moe_with_peft_config(self):
709708
model_id = "trl-internal-testing/tiny-GptOssForCausalLM"
710709
model = AutoModelForCausalLM.from_pretrained(model_id, dtype="float32")

‎tests/testing_utils.py‎

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import psutil
2121
import pytest
2222
import torch
23-
from packaging.version import Version
2423
from transformers import is_bitsandbytes_available, is_comet_available, is_wandb_available
2524
from transformers.testing_utils import backend_device_count, torch_device
2625
from transformers.utils import (
@@ -47,10 +46,6 @@
4746
)
4847

4948

50-
if is_peft_available():
51-
import peft
52-
53-
5449
require_bitsandbytes = pytest.mark.skipif(not is_bitsandbytes_available(), reason="test requires bitsandbytes")
5550
require_comet = pytest.mark.skipif(not is_comet_available(), reason="test requires comet_ml")
5651
require_harbor = pytest.mark.skipif(not is_harbor_available(), reason="test requires harbor")
@@ -60,11 +55,6 @@
6055
require_mergekit = pytest.mark.skipif(not is_mergekit_available(), reason="test requires mergekit")
6156
require_openreward = pytest.mark.skipif(not is_openreward_available(), reason="test requires openreward")
6257
require_peft = pytest.mark.skipif(not is_peft_available(), reason="test requires peft")
63-
# `LoraConfig.target_parameters` was added in peft 0.17.0; on older versions the field doesn't exist at all.
64-
require_peft_target_parameters = pytest.mark.skipif(
65-
not is_peft_available() or Version(peft.__version__) < Version("0.17.0"),
66-
reason="test requires peft>=0.17.0 for `LoraConfig.target_parameters`",
67-
)
6858
require_requests = pytest.mark.skipif(not is_requests_available(), reason="test requires requests")
6959
# Response parsing needs jmespath only on transformers < 5.13, which ships the legacy `response_schema` parser; the
7060
# new-style `response_template` parser doesn't use it. See `_SUPPORTS_RESPONSE_TEMPLATE`.

‎trl/trainer/dpo_trainer.py‎

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -669,12 +669,11 @@ def __init__(
669669
# 0.20.0, only one adapter per model was supported when the LoRA config uses `target_parameters` (see
670670
# peft#3340, fixed in peft#3350), so in that case we skip the "ref" adapter and compute the reference log
671671
# probs with adapters disabled, i.e. with the base model. The fix only allows adapters targeting the same
672-
# parameters, which holds here since the "ref" adapter reuses the "default" config. `target_parameters`
673-
# itself was only added in PEFT 0.17.0, so the version check is bounded on both sides.
672+
# parameters, which holds here since the "ref" adapter reuses the "default" config.
674673
default_config = model.peft_config["default"]
675674
if (
676675
isinstance(default_config, LoraConfig)
677-
and Version("0.17.0") <= Version(peft.__version__) < Version("0.20.0")
676+
and Version(peft.__version__) < Version("0.20.0")
678677
and default_config.target_parameters
679678
):
680679
logger.warning(

0 commit comments

Comments
 (0)