Prima di iniziare, la nuova immagine base Docker di Deepspeech necessita di nvidia-docker.
Nel README della repository di NVIDIA trovate le istruzioni a seconda del vostro sistema.
Durante il processo di training la cartella $HOME/data
occuperá diverse decine di GB di spazio sul disco. Se si vuole usare un'altra cartella (es. su un'altra partizione) sostituire in tutti i comandi successivi $HOME/data
con il path della nuova cartella.
- Scaricare il dataset CommonVoice italiano in
$HOME/data
cd $HOME
mkdir -p data/sources
chmod a+rwx -R data
mv it.tar.gz data/sources # versione 3 di common voice
chmod a+r data/sources/it.tar.gz
cd $HOME
git clone MozillaItalia/DeepSpeech-Italian-Model.git
cd DeepSpeech-Italian-Model/DeepSpeech
chmod +x generate_base_dockerfile.sh
./generate_base_dockerfile.sh
# build base
docker build . -f Dockerfile.train -t deepspeech/base:0.9.3
# build italiana
docker build . -f Dockerfile_it.train -t deepspeech/it
- Avviando l'immagine verrà eseguita la routine di addestramento con i valori già preimpostati nel Dockerfile:
docker run --rm --gpus all --mount type=bind,src=$HOME/data,dst=/mnt -it deepspeech/it
-
ATTENZIONE Lo Step di addestramento vero e proprio potrà essere eseguito solamente con l'interazione dell'utente (
Press a button to continue..
) permettendo un check finale dei parametri che verranno passati a DeepSpeech -
Terminata l'esecuzione nella directory
$HOME/data
o nella directory/mnt
nel container Docker, verranno creati i files:it-it.zip
contenente il modello TFlitemode_tensorflow_it.tar.xz
contenente il modello memory mappedcheckpoint_it.tar.xz
contenente l'ultimo checkpoint dal validation set
È possibile fare override dell'istruzione entrypoint
di Docker per utilizzare la shell del container. In questo modo possono essere avviati singolarmente i vari script per poter sperimentare.
Per maggiori informazioni sul ruolo dei vari script si rimanda al relativo README
docker run --rm --gpus all --mount type=bind,src=$HOME/data,dst=/mnt --entrypoint /bin/bash -it deepspeech/it
È possibile modificare i parametri impostati nel Dockerfile_it.train
utilizzando il flag -e
seguito dal nome della variabile e il suo nuovo valore.
docker run -e "TRANSFER_LEARNING=1" -e "DROP_SOURCE_LAYERS=3" --rm --gpus all --mount type=bind,src=$HOME/data,dst=/mnt -it deepspeech/it
In combinazione al flag -e
è possibile modificare i parametri del Dockerfile con un file .env
contenente la lista dei parametri da passare.
Alcuni .env
files di esempio sono presenti nella cartella DeepSpeech/env_files
e possono essere passati tramite il flag --env-file
al run
di Docker.
fast_dev.env
: ogni passaggio dell'addestramento di DeepSpeech verrà eseguito velocemente per testare ogni step.
cat fast_dev.env
BATCH_SIZE=2
EPOCHS=2
FAST_TRAIN=1
docker run --env-file env_files/fast_dev.env --rm --gpus all --mount type=bind,src=$HOME/data,dst=/mnt -it deepspeech/it
-
do_transfer_learning.env
: viene aggiunto il flagDROP_SOURCE_LAYERS=1
e verrà utilizzato il checkpoint del modello inglese di DeepSpeech. -
only_export.env
: se presente un checkpoint di una precedente iterazione, viene saltata la fase di addestramento e si procede alla creazione dei vari files binari del modello -
run_lm_optimizer.env
: viene aggiornato il flagLM_EVALUATE_RANGE=5,5,600
per avviare lo scriptlm_optimizer.py
su 600 iterazioni per cercare i migliori valori diALPHA
eBETA
su un range[5,5]
Per approfondire il significato dei flag e parametri seguenti, sono presenti maggiori dettagli QUI
PARAMETRO | VALORE | note |
---|---|---|
BATCH_SIZE |
64 |
|
EPOCHS |
30 |
numero di iterazioni |
LEARNING_RATE |
0.0001 |
|
N_HIDDEN |
2048 |
|
EARLY_STOP |
1 |
se 1 , dopo ES_STOP iterazioni il valore loss del modello non migliora, l'addestramento si ferma |
ES_STOP |
10 |
Default in DeepSpeech inglese: 25 |
MAX_TO_KEEP |
2 |
quanti checkpoints salvare. Default in DeepSpeech inglese: 5 |
DROPOUT |
0.4 |
|
LM_ALPHA |
0 |
|
LM_BETA |
0 |
|
LM_EVALUATE_RANGE |
- | tripletta di valori MAX_ALPHA,MAX_BETA,N_TRIALS da assegnare allo script lm_optimizer.py (es 5,5,600 ) |
AMP |
1 |
se TRANSFER_LEARNING abilitato, questo parametro viene disabilitato. Maggiori informazioni QUI |
TRANSFER_LEARNING |
0 |
se 1 , DROP_SOURCE_LAYERS viene impostato a 1 e si avvia l'apprendimento dal checkpoint di DeepSpeech inglese scartando l'ultimo layer della rete (maggiori info QUI) |
FAST_TRAIN |
0 | se 1 si avvia un addestramento rapido solamente per controllare che tutti gli step vadano a buon fine |