Tutorial: puesta en marcha de un servidor MTUOC a partir de un entrenamiento con Marian - mtuoc/tutorials GitHub Wiki

1. Introducción

En este tutorial se explica el procedimiento para poner en marcha un servidor MTUOC a partir de un entrenamiento realizado con Marian y considerando que el preprocesamiento del corpus se ha realizado con MTUOC-corpus-preprocessing utilizando [SentencePiece]. Para otras configuraciones el procedimiento será similar y se tendrán que ajustar algunos detalles.

2. Archivos necesarios

En el tutorial proporcionamos los enlaces a todos los archivos necesarios de un entrenamiento español-inglés, a partir del corpus NTEU. También proporcionamos algunos archivos intermedios por si alguien desea replicar todos los pasos de entrenamiento. Concretamente hemos utilizado los siguientes dos corpus:

Estos corpus se han convertido de TMX a texto tabulado, se han concatenado y se han eliminado las repeticiones, obteniendo el corpus NTEU-uniq-eng-spa.txt, de 18.759.269 segmentos. Este corpus se ha pasado por un proceso de rescoring utilizando MTUOC-PCorpus-rescorer-txt.py y MTUOC-PCorpus-selector-txt.py y utilizando un índice de 0.75 para todos los parámetros, hemos obtenido el corpus NTEU-rescored-075075075-eng-spa.txt de 14.484.106 segmentos.

Para el corpus de validación se ha utilizado Flores+. Hemos hecho un paste de dev.eng_Latn y dev.spa_Latn para obtener el conjunto de valiación val-eng-spa.txt.

En la siguiente carpeta comprimida: preprocessing-NTEU-eng-spa.zip podemos obtener los archivos necesarios procedentes del preprocesamiento.

En la siguiente carpeta comprimida podemos obtener los archivos resultantes del entrenamiento, con la excepción que hemos eliminado la mayoría de los modelos intermedios y los corpus de entrenamiento, para reducir el tamaño resultante: training-NTEU-spa-eng.zip

3. Archivos importantes resultantes del entrenamiento

Una vez realizado en entrenamiento tendremos una serie de archivos muy importantes para poder poner en marcha el servidor:

  • Vocabularios: vocab-es.yml y vocab-en.yml
  • Modelos resultantes de los diferentes checkpoints: model.iterXXXXX.npz (donde XXXXX indica el paso del checkpoint).
  • Modelos finales: model.npz y dado que hemos utilizado dos métricas de validación, los mejores modelos según estas métricas, en nuestro caso model.npz.best-bleu-detok.npz y model.npz.best-cross-entropy.npz.

Es habitual recuperar un número de modelos.iter, como por ejemplo 3, los que tengan mejores valores de una determinada métrica de validación, para evaluar un motor que utilice un ensemble de estos modelos.

Esto se puede hacer con el programa getBestCheckpoint.py, de la siguiente manera:

python3 getBestCheckpoint.py valid.log bleu-detok 3

Que nos devuelve los tres modelos con mejor bleu-detok:

1290000 32.636
1270000 32.4479
1310000 32.4363
model.iter1290000.npz model.iter1270000.npz model.iter1310000.npz

En los archivos del entrenamiento ya encontraréis únicamente estos modelos, junto con los finales.

4. Archivos necesarios del preprocesamiento

Para poder poner en marcha el servidor necesitaremos los siguientes archivos resultantes del preprocesamiento (y que podéis descargar del enlace indicado en la introducción):

  • spmodel.model
  • tc.es

5. Montaje del servidor

Ahora, para montar el servidor es necesario obtener la última versión disponible de MTUOC-server, haciendo:

git clone https://github.com/mtuoc/MTUOC-server.git

Se creará una carpeta MTUOC-server que podemo renombrara para darle un nombre que indique de qué motor se trata. En nuestro caso por ejemplo MTUOC-NTEU-spa-eng.

Entramos en el directorio y copiamos alli los archivos: model.npz, model.iter1290000.npz, model.iter1270000.npz, model.iter1310000.npz, vocab-es.yml, vocab-en.yml, spmodel.model, tc.es

También necesitaremos los tokenizadores MTUOC-tokenizer-spa.py y MTUOC-tokenizer-eng.py](https://raw.githubusercontent.com/mtuoc/MTUOC-tokenizers/refs/heads/main/MTUOC_tokenizer_eng.py), pero casualmente estos ya están incluídos en la distribución de MTUOC-server.

Ahora tenemos que editar el archivo config-server.yaml y cambiar las líneas que indicamos:

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

Ahora por último necesitaremos marian compilado para nuestra GPU, si tenemos, o bien una versión CPU que se puede descargar de lpg.uoc.edu/marian-server-v1.11.0/marian-server-CPU. No olvides darle permisos de ejecución:

chmod +x marian-server-CPU

Ahora ya podremos poner en marcha el servidor:

python3 MTUOC-server.py

ATENCIÓN: antes se tendrán que instalar lo requisitos del archivo requirements.txt

Una vez puesto en marcha aparecerá el siguiente mensaje:

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

Ahora ya podemos utilizar el Motor.

También podemos configurar el motor para que utilice una combinación de los tres mejores modelos, editando la línea:

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 &"

Recuerda parar el motor antes de volverlo a poner en marcha:

python3 MTUOC-stop-server.py

Y volverlo a poner en marcha con:

python3 MTUOC-server.py