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鈥檒l occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dataclass error while importing Fairseq in Python 3.11 #5012

Open
usaraj opened this issue Mar 7, 2023 · 29 comments 路 May be fixed by #5359
Open

Dataclass error while importing Fairseq in Python 3.11 #5012

usaraj opened this issue Mar 7, 2023 · 29 comments 路 May be fixed by #5359

Comments

@usaraj
Copy link

usaraj commented Mar 7, 2023

馃悰 Bug

FaValueError: mutable default <class 'fairseq.dataclass.configs.CommonConfig'> for field common is not allowed: use default_factory

To Reproduce

Steps to reproduce the behavior (always include the command you ran):
1, pip install fairseq==0.12.2
2. from fairseq import *

Trace:

Traceback (most recent call last):
File "", line 1, in
File "/home/a1bharat/fairseq/fairseq/init.py", line 20, in
from fairseq.distributed import utils as distributed_utils
File "/home/a1bharat/fairseq/fairseq/distributed/init.py", line 7, in
from .legacy_distributed_data_parallel import LegacyDistributedDataParallel
File "/home/a1bharat/fairseq/fairseq/distributed/legacy_distributed_data_parallel.py", line 23, in
from fairseq.distributed import utils
File "/home/a1bharat/fairseq/fairseq/distributed/utils.py", line 22, in
from fairseq.dataclass.configs import DistributedTrainingConfig, FairseqConfig
File "/home/a1bharat/fairseq/fairseq/dataclass/init.py", line 6, in
from .configs import FairseqDataclass
File "/home/a1bharat/fairseq/fairseq/dataclass/configs.py", line 906, in
@DataClass
^^^^^^^^^
File "/usr/lib/python3.11/dataclasses.py", line 1220, in dataclass
return wrap(cls)
^^^^^^^^^
File "/usr/lib/python3.11/dataclasses.py", line 1210, in wrap
return _process_class(cls, init, repr, eq, order, unsafe_hash,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/dataclasses.py", line 958, in _process_class
cls_fields.append(_get_field(cls, name, type, kw_only))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/dataclasses.py", line 815, in _get_field
raise ValueError(f'mutable default {type(f.default)} for field '
ValueError: mutable default <class 'fairseq.dataclass.configs.CommonConfig'> for field common is not allowed: use default_factory

Code sample

Environment

  • fairseq Version ( main):
  • PyTorch Version (e.g., 1.0): 1.13.1
  • OS (e.g., Linux): Ubuntu
  • How you installed fairseq (pip, source): pip install successful
  • Build command you used (if compiling from source): git clone followed by pip install ./
  • Python version: 3.11
  • CUDA/cuDNN version: 11.6
  • GPU models and configuration: NVIDIA
  • Any other relevant information:

Additional context

@VarunGumma
Copy link

Is Pytorch supporting python 3.11?

@EmreOzkose
Copy link

Hi, is there any progress on this issue?

@EmreOzkose
Copy link

I created another conda environment with python 3.9, and didn't face with this error.

@VarunGumma
Copy link

@EmreOzkose Yes, Pytorch2.0 supports Python 3.11

@Birch-san
Copy link

common: CommonConfig = CommonConfig()

I assume it wants something like this:

@dataclass
class FairseqConfig(FairseqDataclass):
-     common: CommonConfig = CommonConfig()
+     common: CommonConfig = field(default_factory=CommonConfig)

@conan1024hao
Copy link

same problem

Medoalmasry added a commit to Medoalmasry/fairseq that referenced this issue Apr 7, 2023
@ashesfall
Copy link

Experiencing this with 3.11.2.

@Muskan19577
Copy link

Muskan19577 commented May 1, 2023

I am also facing the same issue. any way to resolve this?

@ashesfall
Copy link

@Muskan19577 I had to move back to python 3.9

@thyripian
Copy link

I have this same issue running Python 3.11.3, and the config.py modifications suggested did not resolve the issue. Looks like the issues migrated to the hydra module, based on the traceback. Please advise. Traceback below.

fairseq_error_traceback

@bit-scientist
Copy link

getting the same ValeError iwth Python 3.11.4. Any suggestions?

@One-sixth
Copy link

The official fix is too slow, I made a fix version myself.
You can install it using the following command.
v0.12.3.
I conducted a simple test and found no abnormalities.

pip install git+https://github.com/One-sixth/fairseq.git

@kabyanil
Copy link

This issue still exists on the official release. I'm using Python 3.11.

@zhiqu22
Copy link

zhiqu22 commented Oct 5, 2023

This issue still exists on the official release. I'm using Python 3.11.

Same error with Python 3.11.5

@MrGutarLed
Copy link

Same error with Python 3.11

@JingThree3
Copy link

Same error with Python 3.11.6 馃槬

@aikow
Copy link

aikow commented Oct 18, 2023

The changes to dataclasses are an official change that was introduced in python 3.11, meaning all 3.11.x and higher won't work. This will need to get changed in fairseq's codebase, and isnt dependent on the exact python 3.11.x version

@Y-H-Joe
Copy link

Y-H-Joe commented Nov 24, 2023

Python 3.11.4 (main, Jul  5 2023, 14:15:25) [GCC 11.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import fairseq
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/users/nus/zyh/anaconda3/lib/python3.11/site-packages/fairseq/__init__.py", line 20, in <module>
    from fairseq.distributed import utils as distributed_utils
  File "/home/users/nus/zyh/anaconda3/lib/python3.11/site-packages/fairseq/distributed/__init__.py", line 7, in <module>
    from .fully_sharded_data_parallel import (
  File "/home/users/nus/zyh/anaconda3/lib/python3.11/site-packages/fairseq/distributed/fully_sharded_data_parallel.py", line 10, in <module>
    from fairseq.dataclass.configs import DistributedTrainingConfig
  File "/home/users/nus/zyh/anaconda3/lib/python3.11/site-packages/fairseq/dataclass/__init__.py", line 6, in <module>
    from .configs import FairseqDataclass
  File "/home/users/nus/zyh/anaconda3/lib/python3.11/site-packages/fairseq/dataclass/configs.py", line 1104, in <module>
    @dataclass
     ^^^^^^^^^
  File "/home/users/nus/zyh/anaconda3/lib/python3.11/dataclasses.py", line 1230, in dataclass
    return wrap(cls)
           ^^^^^^^^^
  File "/home/users/nus/zyh/anaconda3/lib/python3.11/dataclasses.py", line 1220, in wrap
    return _process_class(cls, init, repr, eq, order, unsafe_hash,
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/users/nus/zyh/anaconda3/lib/python3.11/dataclasses.py", line 958, in _process_class
    cls_fields.append(_get_field(cls, name, type, kw_only))
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/users/nus/zyh/anaconda3/lib/python3.11/dataclasses.py", line 815, in _get_field
    raise ValueError(f'mutable default {type(f.default)} for field '
ValueError: mutable default <class 'fairseq.dataclass.configs.CommonConfig'> for field common is not allowed: use default_factory

@CircuitCM
Copy link

I'm confused. Why is this still not fixed? Will it break backwards compatibility?

@liyaodev
Copy link

liyaodev commented Jan 10, 2024

I have encountered these problems, and here is my solution:
Windows11 environment

pip install git+https://github.com/liyaodev/fairseq.git

or, download fairseq-0.12.3.1-cp311-cp311-linux_x86_64.whl

pip install./fairseq-0.12.3.1-cp311-cp311-linux_x86_64.whl

WSL2(Ubuntu22.04) environment(my local use)

pip install git+https://github.com/liyaodev/fairseq.git

or, download fairseq-0.12.3.1-cp311-cp311-linux_x86_64.whl

pip install./fairseq-0.12.3.1-cp311-cp311-linux_x86_64.whl

there's a little tip, best use hydra-core==1.3.2 omegaconf==2.3.0

@VarunGumma
Copy link

Alternately, you can use my fork of fairseq which supports Python 3.11, Knowledge Distillation, Adapters a few more interesting fixes.

@vxnuaj
Copy link

vxnuaj commented Feb 18, 2024

!!! this issue needs attention.

Can't use python 3.11.2,

ValueError: mutable default <class 'fairseq.dataclass.configs.CommonConfig'> for field common is not allowed: use default_factory

@4ka0
Copy link

4ka0 commented Feb 23, 2024

This same error is being output with Python 3.12.0.

@Fmstrat
Copy link

Fmstrat commented Apr 13, 2024

Figured since it's April now, I'd throw in my two cents. Still not working.

@yjyuanjin
Copy link

yjyuanjin commented Apr 15, 2024

common: CommonConfig = CommonConfig()

I assume it wants something like this:

@dataclass
class FairseqConfig(FairseqDataclass):
-     common: CommonConfig = CommonConfig()
+     common: CommonConfig = field(default_factory=CommonConfig)

Thanks, it work for me. I change all the error place like your suggestion.

@last-fisherman
Copy link

@liyaodev, could you please tell me what the exact name of the package you mentioned would be for Windows?

@liyaodev
Copy link

@liyaodev, could you please tell me what the exact name of the package you mentioned would be for Windows?

Windows 11 Professional

@snoop2head
Copy link

Not working in CentOS, Python 3.11

@tavyscrolls
Copy link

So uh, still not working in Python 3.12 馃槄 Compile from source fixes tho

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

Successfully merging a pull request may close this issue.