Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

model_config = model.config.to_dict() - AttributeError: 'dict' object has no attribute 'to_dict' #498

Open
4 tasks
oObelix opened this issue Mar 1, 2024 · 11 comments · Fixed by huggingface/transformers#30021

Comments

@oObelix
Copy link

oObelix commented Mar 1, 2024

System Info

- `transformers` version: 4.38.2
- Platform: Linux-6.4.16-linuxkit-x86_64-with-glibc2.36
- Python version: 3.11.8
- Huggingface_hub version: 0.21.3
- Safetensors version: 0.4.2
- Accelerate version: 0.23.0
- Accelerate config:    not found
- PyTorch version (GPU?): 2.2.1+cu121 (False)
- Tensorflow version (GPU?): not installed (NA)
- Flax version (CPU?/GPU?/TPU?): not installed (NA)
- Jax version: not installed
- JaxLib version: not installed
- Using GPU in script?: <fill in>
- Using distributed or parallel set-up in script?: <fill in>

Python 3.11.8

accelerate==0.23.0
aiohttp==3.9.3
aiosignal==1.3.1
alembic==1.13.1
amqp==5.2.0
annotated-types==0.6.0
anyio==4.3.0
asyncpg==0.28.0
ats-ml-tools==0.7.18
attrs==23.2.0
beautifulsoup4==4.12.3
billiard==4.2.0
blinker==1.7.0
boto3==1.28.85
botocore==1.31.85
celery==5.3.4
certifi==2024.2.2
cffi==1.16.0
charset-normalizer==3.3.2
click==8.1.7
click-didyoumean==0.3.0
click-plugins==1.1.1
click-repl==0.3.0
cloudpickle==3.0.0
contourpy==1.2.0
cryptography==42.0.5
cycler==0.12.1
databricks-cli==0.18.0
datasets==2.14.7
datasphere==0.6.8
DAWG-Python==0.7.2
dill==0.3.7
docker==6.1.3
docopt-ng==0.9.0
docutils==0.20.1
entrypoints==0.4
envzy==0.2.3
et-xmlfile==1.1.0
evaluate==0.4.1
fastapi==0.109.2
filelock==3.13.1
Flask==3.0.2
flower==2.0.1
fonttools==4.49.0
frozenlist==1.4.1
fsspec==2023.10.0
funcy==2.0
gitdb==4.0.11
GitPython==3.1.42
googleapis-common-protos==1.62.0
greenlet==2.0.2
grpcio==1.62.0
gunicorn==21.2.0
h11==0.14.0
httpcore==1.0.4
httpx==0.26.0
huggingface-hub==0.21.3
humanize==4.9.0
idna==3.6
importlib-metadata==6.11.0
iniconfig==2.0.0
itsdangerous==2.1.2
jaraco.classes==3.3.1
jeepney==0.8.0
Jinja2==3.1.3
jmespath==1.0.1
joblib==1.3.2
keyring==24.3.1
kiwisolver==1.4.5
kombu==5.3.5
mailbits==0.2.1
Mako==1.3.2
Markdown==3.5.2
markdown-it-py==3.0.0
MarkupSafe==2.1.5
matplotlib==3.8.3
mdurl==0.1.2
mlflow==2.9.2
more-itertools==10.2.0
mpmath==1.3.0
multidict==6.0.5
multiprocess==0.70.15
networkx==3.2.1
nh3==0.2.15
nltk==3.8.1
numpy==1.26.4
nvidia-cublas-cu12==12.1.3.1
nvidia-cuda-cupti-cu12==12.1.105
nvidia-cuda-nvrtc-cu12==12.1.105
nvidia-cuda-runtime-cu12==12.1.105
nvidia-cudnn-cu12==8.9.2.26
nvidia-cufft-cu12==11.0.2.54
nvidia-curand-cu12==10.3.2.106
nvidia-cusolver-cu12==11.4.5.107
nvidia-cusparse-cu12==12.1.0.106
nvidia-nccl-cu12==2.19.3
nvidia-nvjitlink-cu12==12.3.101
nvidia-nvtx-cu12==12.1.105
oauthlib==3.2.2
openpyxl==3.1.2
orjson==3.9.7
packaging==23.2
pandas==2.0.3
pillow==10.2.0
pkginfo==1.9.6
pluggy==1.4.0
prometheus_client==0.20.0
prompt-toolkit==3.0.43
protobuf==4.25.3
psutil==5.9.8
psycopg2-binary==2.9.8
pyarrow==14.0.2
pyarrow-hotfix==0.6
pycparser==2.21
pydantic==2.6.1
pydantic-settings==2.1.0
pydantic_core==2.16.2
Pygments==2.17.2
PyJWT==2.8.0
pymorphy3==1.2.1
pymorphy3-dicts-ru==2.4.417150.4580142
pyparsing==3.1.1
pypi-simple==1.5.0
pytest==7.4.4
python-dateutil==2.9.0
python-dotenv==1.0.1
python-multipart==0.0.6
pytz==2023.4
PyYAML==6.0.1
querystring-parser==1.2.4
readme_renderer==43.0
redis==5.0.1
regex==2023.12.25
requests==2.31.0
requests-toolbelt==1.0.0
responses==0.18.0
rfc3986==2.0.0
rich==13.7.1
s3transfer==0.7.0
safetensors==0.4.2
scikit-learn==1.4.0
scipy==1.12.0
SecretStorage==3.3.3
sentence-transformers==2.2.2
sentencepiece==0.2.0
setfit==1.0.3
six==1.16.0
smmap==5.0.1
sniffio==1.3.1
soupsieve==2.5
SQLAlchemy==2.0.23
sqlparse==0.4.4
starlette==0.36.3
sympy==1.12
tabulate==0.9.0
threadpoolctl==3.3.0
tokenizers==0.15.2
torch==2.2.1
torchvision==0.17.1
tornado==6.4
tqdm==4.66.2
transformers==4.38.2
triton==2.2.0
twine==4.0.2
typing_extensions==4.10.0
tzdata==2024.1
urllib3==2.0.7
uvicorn==0.23.2
vine==5.1.0
wcwidth==0.2.13
websocket-client==1.7.0
Werkzeug==3.0.1
xxhash==3.4.1
yarl==1.9.4
zipp==3.17.0

Who can help?

No response

Information

  • The official example scripts
  • My own modified scripts

Tasks

  • An officially supported task in the examples folder (such as GLUE/SQuAD, ...)
  • My own task or dataset (give details below)

Reproduction

    pretrained_model = 'cointegrated/rubert-tiny-sentiment-balanced'
    model = SetFitModel.from_pretrained(
        pretrained_model,
        cache_dir = tempfile.gettempdir()
    )
    trainer = SetFitTrainer(
        model=model,
        train_dataset=train_dataset,
        eval_dataset=test_dataset,
        loss_class=CosineSimilarityLoss,
        metric="accuracy",
        batch_size=16,
        num_iterations=20,
        num_epochs=2,
    )
 Traceback (most recent call last):
   File "/usr/local/lib/python3.11/site-packages/setfit/trainer.py", line 410, in train
     self.train_embeddings(*full_parameters, args=args)
   File "/usr/local/lib/python3.11/site-packages/setfit/trainer.py", line 462, in train_embeddings
     self._train_sentence_transformer(
   File "/usr/local/lib/python3.11/site-packages/setfit/trainer.py", line 570, in _train_sentence_transformer
     self.control = self.callback_handler.on_train_begin(args, self.state, self.control)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/usr/local/lib/python3.11/site-packages/transformers/trainer_callback.py", line 370, in on_train_begin
     return self.call_event("on_train_begin", args, state, control)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/usr/local/lib/python3.11/site-packages/transformers/trainer_callback.py", line 414, in call_event
     result = getattr(callback, event)(
              ^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/usr/local/lib/python3.11/site-packages/transformers/integrations/integration_utils.py", line 1035, in on_train_begin
     self.setup(args, state, model)
   File "/usr/local/lib/python3.11/site-packages/transformers/integrations/integration_utils.py", line 1009, in setup
     model_config = model.config.to_dict()
                    ^^^^^^^^^^^^^^^^^^^^
 AttributeError: 'dict' object has no attribute 'to_dict'

Expected behavior

Hello!
How to pass this error? In my case all work locally on macOs, but didn't work on same data in Docker container..
Didn't work in container FROM --platform=linux/amd64 python:3.11-slim (Linux 027a6910b09d 6.4.16-linuxkit huggingface/transformers#1 SMP PREEMPT Sat Sep 23 13:36:48 UTC 2023 x86_64 GNU/Linux) but work on debian-buster-slim (Linux 12-slim 6.4.16-linuxkit huggingface/transformers#1 SMP PREEMPT Sat Sep 23 13:36:48 UTC 2023 aarch64 GNU/Linux).

@RaidenE1
Copy link

RaidenE1 commented Mar 6, 2024

I found this error on my macOS

@ArthurZucker
Copy link

cc @tomaarsen

@tomaarsen tomaarsen transferred this issue from huggingface/transformers Mar 7, 2024
@davhin
Copy link

davhin commented Mar 17, 2024

gonna piggy back off this, I had a very similar error that was also about the model.config

File "/opt/conda/lib/python3.10/runpy.py", line 187, in _run_module_as_main mod_name, mod_spec, code = _get_module_details(mod_name, _Error) File "/opt/conda/lib/python3.10/runpy.py", line 110, in _get_module_details __import__(pkg_name) File "/home/jupyter/setfit_test.py", line 39, in <module> trainer.train() File "/opt/conda/lib/python3.10/site-packages/setfit/trainer.py", line 410, in train self.train_embeddings(*full_parameters, args=args) File "/opt/conda/lib/python3.10/site-packages/setfit/trainer.py", line 462, in train_embeddings self._train_sentence_transformer( File "/opt/conda/lib/python3.10/site-packages/setfit/trainer.py", line 570, in _train_sentence_transformer self.control = self.callback_handler.on_train_begin(args, self.state, self.control) File "/opt/conda/lib/python3.10/site-packages/transformers/trainer_callback.py", line 370, in on_train_begin return self.call_event("on_train_begin", args, state, control) File "/opt/conda/lib/python3.10/site-packages/transformers/trainer_callback.py", line 414, in call_event result = getattr(callback, event)( File "/opt/conda/lib/python3.10/site-packages/transformers/integrations/integration_utils.py", line 635, in on_train_begin model_config_json = model.config.to_json_string() AttributeError: 'dict' object has no attribute 'to_json_string'

when I tried to run the setfit example. What seems to have fixed this for me is to downgrade huggingface hub pip install huggingface_hub==0.20.3

with this version it is working both on my Mac with cpu as well as on google cloud with cuda. Hope that helps :)

@Ulipenitz
Copy link

Ulipenitz commented Mar 21, 2024

I had the same issue with the NeptuneCallback. Worked locally, but got the error in a Docker container on the cloud.

It seems pretty weird to me, because there is no model passed to the on_train_begin here and the model is set to None by default in the callback here, so I think you can just overwrite the class method and delete these lines here.
Or maybe you can catch the AttributeError like this:

if hasattr(model, "config") and model.config is not None:
    try:
        model_config = model.config.to_dict()
    except AttributeError:
        model_config = model.config
    combined_dict = {**model_config, **combined_dict}

This solved my case, because somehow there really was a dict with the model.config, but I could not see why this happened.
I also had to rewrite the on_init_end and on_save methods of the NeptuneCallback, because of conflicts like these.

@timothepearce
Copy link

timothepearce commented Apr 3, 2024

In my case, this error popped up after enabling wandb logging.

@timothepearce
Copy link

@tomaarsen I submitted a draft PR on the transformers repository. I wonder if that is the best place to fix the issue.

@louis-king99
Copy link

Getting the same issue as @davhin when running in a vertexAI notebook (google cloud), but not when run locally

@rodigu
Copy link

rodigu commented Apr 17, 2024

Same issue on Windows 10, Python 3.10.13

@hermda02
Copy link

hermda02 commented Apr 23, 2024

Same issue on Ubunutu 22.04 and Pop!_OS 22.04.

  • transformers version: 4.38.2
  • Python version: 3.10.12
  • Huggingface_hub version: 0.21.4
  • Safetensors version: 0.4.2
  • PyTorch version (GPU?): 2.2.1 (True)

Issue arose following the SetFit quickstart guide. Crash on step 4:

trainer.train()
***** Running training *****
  Num unique pairs = 144
  Batch size = 32
  Num epochs = 10
  Total optimization steps = 50
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
Cell In[17], line 1
----> 1 trainer.train()

File ~/projects/NLP/intentionclassification/.venv/lib/python3.10/site-packages/setfit/trainer.py:410, in Trainer.train(self, args, trial, **kwargs)
    405 train_parameters = self.dataset_to_parameters(self.train_dataset)
    406 full_parameters = (
    407     train_parameters + self.dataset_to_parameters(self.eval_dataset) if self.eval_dataset else train_parameters
    408 )
--> 410 self.train_embeddings(*full_parameters, args=args)
    411 self.train_classifier(*train_parameters, args=args)

File ~/projects/NLP/intentionclassification/.venv/lib/python3.10/site-packages/setfit/trainer.py:462, in Trainer.train_embeddings(self, x_train, y_train, x_eval, y_eval, args)
    459 logger.info(f"  Total optimization steps = {total_train_steps}")
    461 warmup_steps = math.ceil(total_train_steps * args.warmup_proportion)
--> 462 self._train_sentence_transformer(
    463     self.model.model_body,
    464     train_dataloader=train_dataloader,
    465     eval_dataloader=eval_dataloader,
    466     args=args,
    467     loss_func=loss_func,
    468     warmup_steps=warmup_steps,
    469 )

File ~/projects/NLP/intentionclassification/.venv/lib/python3.10/site-packages/setfit/trainer.py:570, in Trainer._train_sentence_transformer(self, model_body, train_dataloader, eval_dataloader, args, loss_func, warmup_steps)
    568 else:
    569     self.state.max_steps = len(train_dataloader) * args.embedding_num_epochs
--> 570 self.control = self.callback_handler.on_train_begin(args, self.state, self.control)
    571 steps_per_epoch = len(train_dataloader)
    573 if args.use_amp:

File ~/projects/NLP/intentionclassification/.venv/lib/python3.10/site-packages/transformers/trainer_callback.py:370, in CallbackHandler.on_train_begin(self, args, state, control)
    368 def on_train_begin(self, args: TrainingArguments, state: TrainerState, control: TrainerControl):
    369     control.should_training_stop = False
--> 370     return self.call_event("on_train_begin", args, state, control)

File ~/projects/NLP/intentionclassification/.venv/lib/python3.10/site-packages/transformers/trainer_callback.py:414, in CallbackHandler.call_event(self, event, args, state, control, **kwargs)
    412 def call_event(self, event, args, state, control, **kwargs):
    413     for callback in self.callbacks:
--> 414         result = getattr(callback, event)(
    415             args,
    416             state,
    417             control,
    418             model=self.model,
    419             tokenizer=self.tokenizer,
    420             optimizer=self.optimizer,
    421             lr_scheduler=self.lr_scheduler,
    422             train_dataloader=self.train_dataloader,
    423             eval_dataloader=self.eval_dataloader,
    424             **kwargs,
    425         )
    426         # A Callback can skip the return of `control` if it doesn't change it.
    427         if result is not None:

File ~/projects/NLP/intentionclassification/.venv/lib/python3.10/site-packages/transformers/integrations/integration_utils.py:1035, in MLflowCallback.on_train_begin(self, args, state, control, model, **kwargs)
   1033 def on_train_begin(self, args, state, control, model=None, **kwargs):
   1034     if not self._initialized:
-> 1035         self.setup(args, state, model)

File ~/projects/NLP/intentionclassification/.venv/lib/python3.10/site-packages/transformers/integrations/integration_utils.py:1009, in MLflowCallback.setup(self, args, state, model)
   1007 combined_dict = args.to_dict()
   1008 if hasattr(model, "config") and model.config is not None:
-> 1009     model_config = model.config.to_dict()
   1010     combined_dict = {**model_config, **combined_dict}
   1011 combined_dict = flatten_dict(combined_dict) if self._flatten_params else combined_dict

AttributeError: 'dict' object has no attribute 'to_dict'```



@mylesgoose
Copy link

remove duplicate keys from your config.json

@amew0
Copy link

amew0 commented Oct 28, 2024

I had the same problem but after a full 2 hour debugging noticed I have upgraded my transformers from 4.37.2 which the model was initially trained to 4.41. I reverted back the transformers to its initial version (You can find it in the model config.json) and the error was resolved.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.