piegu / language-models

pre-trained Language Models
287 stars 98 forks source link

AttributeError: 'method-wrapper' object has no attribute '__code__' lors du fine-tuning du Forward LM français #3

Closed wil2210 closed 5 years ago

wil2210 commented 5 years ago

Bonjour, j'essaie de faire tourner votre notebook lm3-french-classifier-amazon avec les poids pré entrainés du LM configuration Multifit que j'ai téléchargé puis placé dans frwiki/models comme attendu. Cependant il est impossible de créer le learner avec des poids préentrainés sans que cela plante avec cette erreur. Est-ce que vous aviez rencontré cette erreur ou avez une idée de comment la résoudre ? J

learn_lm = language_model_learner(data_lm, AWD_LSTM, config=config, pretrained_fnames=lm_fns3, drop_mult=0.3, metrics=[error_rate, accuracy, perplexity]).to_fp16()

AttributeError Traceback (most recent call last) /home/shared/anaconda3/envs/callcenter/lib/python3.7/site-packages/IPython/core/formatters.py in call(self, obj) 700 type_pprinters=self.type_printers, 701 deferred_pprinters=self.deferred_printers) --> 702 printer.pretty(obj) 703 printer.flush() 704 return stream.getvalue()

/home/shared/anaconda3/envs/callcenter/lib/python3.7/site-packages/IPython/lib/pretty.py in pretty(self, obj) 400 if cls is not object \ 401 and callable(cls.dict.get('repr')): --> 402 return _repr_pprint(obj, self, cycle) 403 404 return _default_pprint(obj, self, cycle)

/home/shared/anaconda3/envs/callcenter/lib/python3.7/site-packages/IPython/lib/pretty.py in _reprpprint(obj, p, cycle) 695 """A pprint that just redirects to the normal repr function.""" 696 # Find newlines and replace them with p.break() --> 697 output = repr(obj) 698 for idx,output_line in enumerate(output.splitlines()): 699 if idx:

/home/shared/anaconda3/envs/callcenter/lib/python3.7/dataclasses.py in wrapper(self) 355 repr_running.add(key) 356 try: --> 357 result = user_function(self) 358 finally: 359 repr_running.discard(key)

/home/shared/anaconda3/envs/callcenter/lib/python3.7/dataclasses.py in repr(self)

/home/shared/anaconda3/envs/callcenter/lib/python3.7/site-packages/fastai/callback.py in repr(self) 201 202 def repr(self): --> 203 attrs = func_args(self.init) 204 to_remove = getattr(self, 'exclude', []) 205 list_repr = [self.class.name] + [f'{k}: {getattr(self, k)}' for k in attrs if k != 'self' and k not in to_remove]

/home/shared/anaconda3/envs/callcenter/lib/python3.7/site-packages/fastai/core.py in func_args(func) 278 def func_args(func)->bool: 279 "Return the arguments of func." --> 280 code = func.code 281 return code.co_varnames[:code.co_argcount] 282

AttributeError: 'method-wrapper' object has no attribute 'code'

Je vous indique l'output du show_install() de fastai si ça peut aider. Merci bcp de votre aide.

=== Software === 
python        : 3.7.3
fastai        : 1.0.58
fastprogress  : 0.1.21
torch         : 1.1.0
nvidia driver : 410.104
torch cuda    : 9.0.176 / is available
torch cudnn   : 7501 / is enabled

=== Hardware === 
nvidia gpus   : 2
torch devices : 2
  - gpu0      : 11441MB | Tesla K80
  - gpu1      : 11441MB | Tesla K80

=== Environment === 
platform      : Linux-4.9.0-9-amd64-x86_64-with-debian-9.9
distro        : Debian GNU/Linux 9 stretch
conda env     : callcenter
python        : /home/shared/anaconda3/envs/callcenter/bin/python
sys.path      : /home/shared/libs/language-models
/home/shared/anaconda3/envs/callcenter/lib/python37.zip
/home/shared/anaconda3/envs/callcenter/lib/python3.7
/home/shared/anaconda3/envs/callcenter/lib/python3.7/lib-dynload

/home/shared/anaconda3/envs/callcenter/lib/python3.7/site-packages
/home/shared/libs/nautilus_nlp
/home/shared/anaconda3/envs/callcenter/lib/python3.7/site-packages/IPython/extensions
/root/.ipython

Please make sure to include opening/closing ``` when you paste into forums/github to make the reports appear formatted as code sections.

piegu commented 5 years ago

Bonjour,

je suis entrain de retester le notebook sur GCP avec l'installation suivante et je n'ai pas de problème à ce stade.

show_install() de fastai:

=== Software === 
python        : 3.7.4
fastai        : 1.0.58
fastprogress  : 0.1.21
torch         : 1.2.0
nvidia driver : 410.104
torch cuda    : 10.0.130 / is available
torch cudnn   : 7602 / is enabled

=== Hardware === 
nvidia gpus   : 1
torch devices : 1
  - gpu0      : 15079MB | Tesla T4

=== Environment === 
platform      : Linux-4.9.0-9-amd64-x86_64-with-debian-9.9
distro        : #1 SMP Debian 4.9.168-1+deb9u5 (2019-08-11)
conda env     : base
python        : /opt/anaconda3/bin/python
sys.path      : /home/jupyter/tutorials/fastai/course-nlp
/opt/anaconda3/lib/python37.zip
/opt/anaconda3/lib/python3.7
/opt/anaconda3/lib/python3.7/lib-dynload
/opt/anaconda3/lib/python3.7/site-packages
/opt/anaconda3/lib/python3.7/site-packages/IPython/extensions

Vous avez regardé les problèmes similaires indexés sur Google? https://www.google.com/search?q=fastai+AttributeError%3A+%27method-wrapper%27+object+has+no+attribute+%27code%27&oq=fastai+AttributeError%3A+%27method-wrapper%27+object+has+no+attribute+%27code%27&aqs=chrome..69i57.1169j0j7&sourceid=chrome&ie=UTF-8

Autre point: j'entraîne de nouveau mon notebook lm3-french-classifier-amazon.ipynb car dans la version actuelle je ne réutilise pas le model SentencePiece entraîné dans le notebook lm3_french.ipynb quand je crée les databunchs du LM et du classifier, ce qui est une erreur.

J'actualiserai le notebook lm3-french-classifier-amazon.ipynb aujourd'hui ou demain (j'ai déjà actualisé le fichier de téléchargement des poids préentraînés avec les 2 fichiers SentencePiece (model et vocab) dans mon répertoire models.

wil2210 commented 5 years ago

Merci de votre réponse. J'ai regardé tous les problèmes similaires sur google qui mentionnent une erreur dans la fonction load_learner qui se corrigerait avec un ";" à la suite du loading. Cependant l'issue se présente au niveau de la création du learner là impossible à contourner. D'après l'erreur c'est vraiment lié au code source...

En effet pour SentencePiece, le temps de fine-tuning devra encore se réduire. Pourtant, vous l'utilisez lors de la création du databunch ici: data_lm = (TextList.from_df(df_trn_val, path, cols='review_body', processor=[OpenFileProcessor(), SPProcessor(max_vocab_sz=15000)]) Cela ne suffit pas ? On obtient un mismatch de taille de data avec les nouveaux poids: RuntimeError: storage has wrong size: expected 4538962426343737990 got 6000000

piegu commented 5 years ago

Bonjour, Je viens de mettre en ligne le notebook lm3-french-classifier-amazon.ipynb actualisé (explications données au début du notebook sur comment réutiliser le modèle SentencePiece entraîné dans le databunch du LM général dans le databunch du LM spécialisé, puis dans celui du classificateur). Le code à utiliser ne correspond pas à celui que vous avez indiqué dans votre dernier commentaire (cf code que j'ai rappeler en haut du notebook actualisé). J'espère que cela vous permettra d'éliminer les erreurs lors de l'entraînement de votre notebook.

wil2210 commented 5 years ago

Merci de vos réponses, le problème venait de la métrique Perplexity.

piegu commented 5 years ago

Content que vous ayez résolu votre problème.