dataforgoodfr / batch7_rse

A search engine for French corporate societal and environnemental commitments and actions.
http://dataforgood.fr/batch7_rse/
MIT License
5 stars 2 forks source link

Initialisation du modèle en production #13

Closed CharlesGaydon closed 4 years ago

CharlesGaydon commented 4 years ago

J'ouvre une issue pour régler le problème du démarrage de docker durant lequel on a la trace suivante:

Initialization from scratch. [force_creation is set to 'True']
Initializing weighted vectorizer.

### PREMIERE CREATION ###
Scorer not found and thus created (at address: ./polls/rse_model/data/model/vectorizer_component/words_scorer.pckl)
Indexing from 23874 sentences with bm25 as method
Saving scorer.
Saving Spacy vectorizer component to folder polls/rse_model/data/model/vectorizer_component/words_scorer.pckl.
-0.32976007
0.90686303

### PREMIER CHARGEMENT ###
Loading weighted vectorizer.
Loading scorer from folder polls/rse_model/data/model/vectorizer_component/words_scorer.pckl.
Loaded.

### DEUXIEME CREATION ###
Initialization from scratch. [force_creation is set to 'True']
Initializing weighted vectorizer.
Scorer not found and thus created (at address: ./polls/rse_model/data/model/vectorizer_component/words_scorer.pckl)
Indexing from 23874 sentences with bm25 as method
Saving scorer.
Saving Spacy vectorizer component to folder polls/rse_model/data/model/vectorizer_component/words_scorer.pckl.
-0.32976007
0.90686303

### DEUXIEME CHARGEMENT ###
Loading weighted vectorizer.
Loading scorer from folder polls/rse_model/data/model/vectorizer_component/words_scorer.pckl.
Loaded.
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
May 07, 2020 - 18:18:09
Django version 3.0.5, using settings 'batch7rse.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

Il y a en fait deux problème distincts:

Pour le premier point, c'est un comportement de test : j'exige que le modèle soit créer "from scratch" pour vérifier que tout fonctionne sans soucis: https://github.com/dataforgoodfr/batch7_rse/blob/65c757e37cfe44061e8c37cfda72842dc5c8139b/webapp/polls/rse_model/rse_watch/indexer.py#L109 Ca fonctionne ainsi : create_from scratch = True -> je supprime le modèle -> je laisse load_weight_vectorizer le recréer.

Je vais commenter ces quelques lignes pour que tu n'ai pas ce soucis.

Pour le second point, je pense que c'est du au fait que la ligne https://github.com/dataforgoodfr/batch7_rse/blob/65c757e37cfe44061e8c37cfda72842dc5c8139b/webapp/polls/rse_model/rse_watch/indexer.py#L117 qui est celle où le modèle est chargé, et crée si il n'existait pas, n'est pas dans un main, et est donc appelée à chaque fois que indexer est importé.

Solution: je vais mettre le tout dans un main, pour ne pas que la ligne soit lancée à l'import. Depuis un autre script, l'usage sera alors quelque chose comme:

import [...].indexer as indexer
import [...].conf as conf
nlp = indexer.load_weighted_vectorizer(conf.Config)
CharlesGaydon commented 4 years ago

J'ai corrigé une typo à ce pull request dans https://github.com/dataforgoodfr/batch7_rse/commit/df56fca6e3cf38388893725e6dfda3a9b8d5ebae

Renaud-D-Harreville commented 4 years ago

Ok, merci :)

Par contre du coup ça me crée une autre erreur lors du lancement du serveur (branche version_brouillon):

    from polls.rse_model.rse_watch.indexer import nlp
ImportError: cannot import name 'nlp' from 'polls.rse_model.rse_watch.indexer' (/home/renaud/projects/batch7_rse/webapp/polls/rse_model/rse_watch/indexer.py)

Comme la variable nlp est dans le main, on y a plus accès en faisant l'import !

Sais tu comment on pourrait résoudre ce problème ?

Désolé ^^ j'ai l'impression qu'on passe de problème en problème :p mais je sens qu'on va finir par y arriver !! :)

Renaud-D-Harreville commented 4 years ago

Autre chose, comme tu peux le voir, les imports partent de webapp (exemple :

from polls.rse_model.rse_watch.indexer import nlp

), car c'est de là qu'est lancée l'aplication par python manage.py runserver

Si tu veux, je peux ouvrir une issue pour cela ?

Renaud-D-Harreville commented 4 years ago

Je réouvre l'issue du coup

CharlesGaydon commented 4 years ago

Oui, car l'objet nlp est à créer, cf. les dernières lignes de mon premier message:

import [...].indexer as indexer
import [...].conf as conf
nlp = indexer.load_weighted_vectorizer(conf.Config)