Skip to content

Commit 0da3f93

Browse files
wj-Mcatsijunhe
andauthored
Add config testing (#4041)
* complete config testing * add bert-testing * update modeling comon * fix testing issue * update testing * upate hf-config testing * update test bert common * Update test_modeling_common.py * Update test_modeling_common.py Co-authored-by: Sijun He <[email protected]>
1 parent ba9f280 commit 0da3f93

File tree

5 files changed

+53
-17
lines changed

5 files changed

+53
-17
lines changed

paddlenlp/transformers/configuration_utils.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -843,6 +843,9 @@ def from_dict(cls, config_dict: Dict[str, Any], **kwargs) -> "PretrainedConfig":
843843
# Those arguments may be passed along for our internal telemetry.
844844
# We remove them so they don't appear in `return_unused_kwargs`.
845845

846+
# convert local config to legacy config
847+
config_dict = convert_to_legacy_config(cls.standard_config_map, config_dict)
848+
846849
config = cls(**config_dict)
847850

848851
if hasattr(config, "pruned_heads"):

paddlenlp/transformers/model_utils.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
download_check,
4949
get_path_from_url_with_filelock,
5050
)
51-
from paddlenlp.utils.env import HF_CACHE_HOME, MODEL_HOME
51+
from paddlenlp.utils.env import HF_CACHE_HOME, LEGACY_CONFIG_NAME, MODEL_HOME
5252
from paddlenlp.utils.log import logger
5353

5454
from .configuration_utils import PretrainedConfig
@@ -200,7 +200,10 @@ class is a pretrained model class adding layers on top of the base model,
200200
by which subclasses can track arguments for initialization automatically.
201201
"""
202202

203-
model_config_file = "model_config.json"
203+
# Deprecated(wj-Mcat): after 2.6.* version
204+
# save the old-school `LEGACY_CONFIG_NAME`, and will be changed to `CONFIG_NAME` after 2.6.* version
205+
model_config_file = LEGACY_CONFIG_NAME
206+
204207
pretrained_init_configuration = {}
205208
# TODO: more flexible resource handle, namedtuple with fields as:
206209
# resource_name, saved_file, handle_name_for_load(None for used as __init__
@@ -1128,7 +1131,7 @@ def _find_mismatched_keys(
11281131
return model_to_load, missing_keys, unexpected_keys, mismatched_keys
11291132

11301133
@classmethod
1131-
def from_pretrained_v2(cls, pretrained_model_name_or_path, *args, **kwargs):
1134+
def from_pretrained_v2(cls, pretrained_model_name_or_path, from_hf_hub: bool = False, *args, **kwargs):
11321135
"""
11331136
Creates an instance of `PretrainedModel`. Model weights are loaded
11341137
by specifying name of a built-in pretrained model, a pretrained model from HF Hub, a community contributed model,
@@ -1143,6 +1146,7 @@ def from_pretrained_v2(cls, pretrained_model_name_or_path, *args, **kwargs):
11431146
- Name of a community-contributed pretrained model.
11441147
- Local directory path which contains model weights file("model_state.pdparams")
11451148
and model config file ("model_config.json").
1149+
from_hf_hub (bool): load model from huggingface hub. Default to `False`.
11461150
*args (tuple): Position arguments for model `__init__`. If provided,
11471151
use these as position argument values for model initialization.
11481152
**kwargs (dict): Keyword arguments for model `__init__`. If provided,
@@ -1182,7 +1186,6 @@ def from_pretrained_v2(cls, pretrained_model_name_or_path, *args, **kwargs):
11821186
load_state_as_np = kwargs.pop("load_state_as_np", False)
11831187
config = kwargs.pop("config", None)
11841188
force_download = kwargs.pop("force_download", False)
1185-
from_hf_hub = kwargs.pop("from_hf_hub", False)
11861189
ignore_mismatched_sizes = kwargs.pop("ignore_mismatched_sizes", None)
11871190
dtype = kwargs.pop("dtype", None)
11881191
cache_dir = kwargs.pop("cache_dir", None)

paddlenlp/transformers/pegasus/modeling.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,12 @@
1313
# See the License for the specific language governing permissions and
1414
# limitations under the License.
1515

16-
from functools import partial
1716
import math
18-
import numpy as np
1917

18+
import numpy as np
2019
import paddle
2120
import paddle.nn as nn
22-
import paddle.nn.functional as F
23-
import paddle.tensor as tensor
24-
from paddle.nn import Layer, Embedding
21+
from paddle.nn import Embedding
2522

2623
from .. import PretrainedModel, register_base_model
2724

tests/transformers/bert/test_modeling.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,19 @@
3434
BertForSequenceClassification,
3535
BertForTokenClassification,
3636
BertModel,
37-
BertPretrainedModel,
3837
)
3938
from paddlenlp.transformers.bert.configuration import BertConfig
4039
from paddlenlp.transformers.model_utils import PretrainedModel
4140
from paddlenlp.utils import install_package, uninstall_package
4241

4342
from ...testing_utils import slow
4443
from ..test_configuration_common import ConfigTester
45-
from ..test_modeling_common import ModelTesterMixin, ModelTesterPretrainedMixin, ids_tensor, random_attention_mask
44+
from ..test_modeling_common import (
45+
ModelTesterMixin,
46+
ModelTesterPretrainedMixin,
47+
ids_tensor,
48+
random_attention_mask,
49+
)
4650

4751

4852
class BertModelTester:

tests/transformers/test_modeling_common.py

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,14 @@
2020
import shutil
2121
import tempfile
2222
import unittest
23+
from typing import Optional, Tuple, Type
2324

2425
import numpy as np
2526
import paddle
2627

2728
from paddlenlp.transformers.configuration_utils import PretrainedConfig
2829
from paddlenlp.transformers.model_utils import PretrainedModel
29-
from paddlenlp.utils.env import MODEL_HOME
30+
from paddlenlp.utils.env import CONFIG_NAME, LEGACY_CONFIG_NAME, MODEL_HOME
3031

3132
from ..testing_utils import slow
3233

@@ -59,8 +60,8 @@ def check_two_model_parameter(first_model: PretrainedModel, second_model: Pretra
5960

6061
class ModelTesterMixin:
6162
model_tester = None
62-
base_model_class = None
63-
all_model_classes = ()
63+
base_model_class: Optional[Type[PretrainedModel]] = None
64+
all_model_classes: Tuple[Type[PretrainedModel]] = ()
6465
all_generative_model_classes = ()
6566
test_resize_embeddings = True
6667
test_resize_position_embeddings = False
@@ -493,20 +494,50 @@ def test_model_name_list(self):
493494
model = self.base_model_class(**config)
494495
self.assertTrue(len(model.model_name_list) != 0)
495496

497+
def test_pretrained_config_save_load(self):
498+
499+
if self.base_model_class is None or not self.base_model_class.constructed_from_pretrained_config():
500+
return
501+
502+
config_class = self.base_model_class.config_class
503+
with tempfile.TemporaryDirectory() as tempdir:
504+
config = config_class()
505+
506+
config.save_pretrained(tempdir)
507+
508+
# check the file exist
509+
self.assertFalse(os.path.exists(os.path.join(tempdir, LEGACY_CONFIG_NAME)))
510+
self.assertTrue(os.path.exists(os.path.join(tempdir, CONFIG_NAME)))
511+
512+
# rename the CONFIG_NAME
513+
shutil.move(os.path.join(tempdir, CONFIG_NAME), os.path.join(tempdir, LEGACY_CONFIG_NAME))
514+
515+
loaded_config = config.__class__.from_pretrained(tempdir)
516+
self.assertEqual(config.hidden_size, loaded_config.hidden_size)
517+
518+
def random_choice_pretrained_config_field(self) -> Optional[str]:
519+
520+
if self.base_model_class is None or not self.base_model_class.constructed_from_pretrained_config():
521+
return None
522+
523+
config = self.base_model_class.config_class()
524+
fields = [key for key, value in config.to_dict() if value]
525+
return random.choice(fields)
526+
496527

497528
class ModelTesterPretrainedMixin:
498529
base_model_class: PretrainedModel = None
499530
hf_remote_test_model_path: str = None
500531
paddlehub_remote_test_model_path: str = None
501532

533+
# Download from HF doesn't work in CI yet
502534
@slow
503535
def test_model_from_pretrained_hf_hub(self):
504536
if self.hf_remote_test_model_path is None or self.base_model_class is None:
505537
return
506538
model = self.base_model_class.from_pretrained(self.hf_remote_test_model_path, from_hf_hub=True)
507539
self.assertIsNotNone(model)
508540

509-
@slow
510541
def test_model_from_pretrained_paddle_hub(self):
511542
if self.paddlehub_remote_test_model_path is None or self.base_model_class is None:
512543
return
@@ -553,8 +584,6 @@ def test_pretrained_save_and_load(self):
553584
os.path.join(MODEL_HOME, model_name),
554585
tempdirname,
555586
)
556-
files = os.listdir(tempdirname)
557-
558587
saved_model_state_file = os.path.join(
559588
tempdirname, self.base_model_class.resource_files_names["model_state"]
560589
)

0 commit comments

Comments
 (0)