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