Tutorial. Posada en marxa d'un servidor MTUOC a partir d'un entrenament amb Marian - mtuoc/tutorials GitHub Wiki
1. Introducció
En aquest tutorial s’explica el procediment per posar en marxa un servidor MTUOC a partir d’un entrenament realitzat amb Marian i considerant que el preprocessament del corpus s’ha realitzat amb MTUOC-corpus-preprocessing. Per a altres configuracions el procediment serà similar i s’hauran d’ajustar alguns detalls.
2. Arxius necessaris
En el tutorial proporcionem els enllaços a tots els arxius necessaris d'un entrenament espanyol-anglès, a partir del corpus NTEU. També proporcionem alguns arxius intermedis per si algú desitja replicar tots els passos d'entrenament. Concretament hem utilitzat els següents dos corpus:
Aquests corpus s’han convertit de TMX a text tabulat, s’han concatenat i s’han eliminat les repeticions, obtenint el corpus NTEU-uniq-eng-spa.txt, de 18.759.269 segments. Aquest corpus s'ha passat per un procés de rescoring utilitzant MTUOC-PCorpus-rescorer-txt.py y MTUOC-PCorpus-selector-txt.py i utilitzant un índex de 0.75 per a tots els paràmetres. Hem obtingut el corpus NTEU-rescored-075075075-eng-spa.txt de 14.484.106 segments.
Per al corpus de validació s'ha utilitzat Flores+. Hem fet un paste
de dev.eng_Latn i dev.spa_Latn per a obtenir el conjunt de valiació val-eng-spa.txt.
A la següent carpeta comprimida: preprocessing-NTEU-eng-spa.zip podem obtenir els arxius necessaris procedents del preprocessament.
A la següent carpeta comprimida podem obtenir els arxius resultants de l'entrenament, amb l'excepció que hem eliminat la majoria dels models intermedis i els corpus d'entrenament, per a reduir la grandària resultant: training-NTEU-spa-eng.zip
3. Arxius importants resultants de l'entrenament
Una vegada realitzat en entrenament tindrem una sèrie d'arxius molt importants per a poder posar en marxa el servidor:
-
Vocabularis: vocab-es.yml i vocab-en.yml
-
Models resultants dels diferents checkpoints: model.iterXXXXX.npz (on XXXXX indica el pas del checkpoint).
-
Models finals: model.npz i atès que hem utilitzat dues mètriques de validació, els millors models segons aquestes mètriques, en el nostre cas model.npz.best-bleu-detok.npz i model.npz.best-cross-entropy.npz.
És habitual recuperar un nombre de models.iter, com per exemple 3, els que tinguin millors valors d’una determinada mètrica de validació, per avaluar un motor que utilitzi un _ ensemble _ d’aquests models.
Això es pot fer amb el programa getBestCheckpoint.py, de la següent manera:
python3 getBestCheckpoint.py valid.log bleu-detok 3
Que ens torna els tres models amb millor bleu-detok:
1290000 32.636
1270000 32.4479
1310000 32.4363
model.iter1290000.npz model.iter1270000.npz model.iter1310000.npz
Als arxius de l’entrenament ja trobareu únicament aquests models, juntament amb els finals.
4. Arxius necessaris del preprocessament
Per a poder posar en marxa el servidor necessitarem els següents arxius resultants del preprocessament (i que podeu descarregar de l’enllaç indicat en la introducció):
-
spmodel.model
-
tc.es
5. Muntatge del servidor
Ara, per a muntar el servidor és necessari obtenir l'última versió disponible de MTUOC-server, fent:
git clone https://github.com/mtuoc/MTUOC-server.git
Es crearà una carpeta MTUOC-server que podem reanomenar per donar-li un nom que indiqui de quin motor es tracta. En el nostre cas, per exemple, MTUOC-NTEU-spa-eng.
Entrem en el directori i allà copiem els arxius: model.npz, model.iter1290000.npz, model.iter1270000.npz, model.iter1310000.npz, vocab-és.yml, vocab-en.yml, spmodel.model, tc.es
També necessitarem els tokenitzadors Mtuoc-tokenizer-spa.py i Mtuoc-tokenizer-eng.py](https://raw.githubusercontent.com/mtuoc/mtuoc-tokenizers/refs/heads/main/mtuoc_tokenizer_eng.py), però casualment aquests ja estan inclosos en la distribució de MTUOC-server.
Ara hem d'editar l'arxiu config-server.yaml i canviar les línies que indiquem:
MTEngine:
MTengine: Marian
Preprocess:
truecase: upper
#one of always, never, upper
truecaser: MTUOC
#one of MTUOC, Moses
truecaser_tokenizer: MTUOC_tokenizer_spa
#one of None, MTUOC_tokenizer_xxx, Moses
tcmodel: tc.es
srxlang: Spanish
Marian:
startMarianServer: True
startMarianCommand: "./marian-server-CPU -m model.npz -v vocab-es.yml vocab-en.yml -p 8250 --n-best --alignment hard --normalize 1 -b 20 --word-penalty 10 --max-length-factor 1.24 --quiet &"
IP: localhost
Ara, per últim, necessitarem marian compilat per al nostre GPU, si tenim, o bé una versió CPU que es pot descarregar de lpg.uoc.edu/marian-server-v1.11.0/marian-server-CPU. No oblidis donar-li permisos d'execució:
chmod +x marian-server-CPU
Ara ja podrem posar en marxa el servidor:
python3 MTUOC-server.py
ATENCIÓ: abans s’hauran d’instal·lar els requisits de l’arxiu rèquirements.txt
Una vegada posat en marxa apareixerà el següent missatge:
2025-01-03 18:03:17.150846 Connection with Marian Server created
2025-01-03 18:03:17.245553 3 MTUOC server started using MTUOC protocol
MTUOC server IP: 192.168.1.51
MTUOC server port: 8000
MTUOC server type: MTUOC
Ara ja podem utilitzar el Motor.
També podem configurar el motor perquè utilitzi una combinació dels tres millors models, editant la línia:
startMarianCommand: "./marian-server-CPU --models model.iter1290000.npz model.iter1270000.npz model.iter1310000.npz --weights 0.34 0.33 0.33 -v vocab-es.yml vocab-en.yml -p 8250 --n-best --alignment hard --normalize 1 -b 20 --word-penalty 10 --max-length-factor 1.24 --quiet &"
Recorda aturar el motor abans de tornar-lo a posar en marxa:
python3 MTUOC-stop-server.py
I tornar a posar-lo en marxa amb:
python3 MTUOC-server.py