wav2ec 训练心得
本文记录了跑Fairseq的wav2ec的主要过程,希望对诸君有用。
基本结论
- 代码经过修改是可以跑起来的,这与2020年12月的尝试结果不同。
- “预训练"这个词具有歧义,Fairseq向导里给的预训练模型是经过finetune的模型而不是原始的audiopretraing的模型,直接使用将导致循环加载,无法使用,这是两次尝试失败的核心原因。
- 大厂的代码质量也是靠不住的。
以下是基本过程.
1. 预训练例子
1.1 数据准备
#原始命令
$ python examples/wav2vec/wav2vec_manifest.py /path/to/waves --dest /manifest/path --ext $ext --valid-percent $valid
#魔改之后可以使用模块的写法
python -m fairseq.examples.wav2vec.wav2vec_manifest /data/Corpus/BostenAI/BSTPlan0 --dest ~/Documents/Projects/Fairseq/Corpus/BSTPlan0 --ext wav --valid-percent 0.1
Tips 1:魔改支持模块
要使用这种模块模式的话,需要给wav2ec增加一个 _init_.py文件。由于官方向导是–editable 安装,需要卸载,去掉–editable 再装一次
#关于pip install --editable ./的作用是创建一个链接,这个技巧真好用,居然没有直接安装,而是进行连接
~/anaconda3/envs/lSrv09/lib/python3.9/site-packages/fairseq.egg-link
#内容是:
~/Documents/workspace/fairseq
.
#一个可以用的例子
python ~/Documents/workspace/fairseq/examples/wav2vec/wav2vec_manifest.py \
/data/Corpus/BostenAI/BSTPlan0 \
--dest ~/Documents/Projects/Fairseq/Corpus/BSTPlan0 \
--ext wav --valid-percent 0.1
Tips 2 : 魔改支持多进程加载数据
很难想象,这个wav2vec_manifest居然是单进程的程序,这个忍不了,自己写了并行版本,但是发现硬盘是主要瓶颈,就不贴代码了,丑!
居然把HDD搞出坏道了!
1.2 初始训练
#安装之后有fairseq-hydra-train
fairseq-hydra-train \
task.data=/data/Temp/SLR12/ \
--config-dir ~/Documents/workspace/fairseq/examples/wav2vec/config/pretraining \
--config-name d1 \
--restore_file checkpoint_last.pt \
--tensorboard_logdir outputs --save_dir
Tips 3: 断掉了也不用怕,可以继续训练
fairseq-hydra-train task.data=/data/Temp/SLR12/ checkpoint.finetune_from_model=~/Documents/Projects/Fairseq/outputs/2021-03-03/18-48-53/checkpoints/checkpoint_last.pt common.tensorboard_logdir=~/Documents/Projects/Fairseq/tensorboard --config-dir ~/Documents/workspace/fairseq/examples/wav2vec/config/pretraining --config-name d1
Notes 关键参数说明:
- 1.覆盖参数必须写在配置文件的前面;
- 2.加载历史文件是checkpoint.finetune_from_model
- 3.打开TensorBoard是 common.tensorboard_logdir
执行之后的结果:
2021-03-04 15:54:23 | INFO | fairseq.checkpoint_utils | loading pretrained model from ~/Documents/Projects/Fairseq/outputs/2021-03-03/18-48-53/checkpoints/checkpoint_last.pt: optimizer, lr scheduler, meters, dataloader will be reset
2021-03-04 15:55:03 | INFO | fairseq.trainer | loaded checkpoint ~/Documents/Projects/Fairseq/outputs/2021-03-03/18-48-53/checkpoints/checkpoint_last.pt (epoch 103 @ 0 updates)
2021-03-04 15:55:03 | INFO | fairseq.optim.adam | using FusedAdam
2021-03-04 15:55:04 | INFO | fairseq.trainer | loading train data for epoch 1
2021-03-04 15:55:04 | INFO | fairseq.data.audio.raw_audio_dataset | loaded 28219, skipped 24 samples
2021-03-04 15:55:04 | WARNING | fairseq.logging.progress_bar | tensorboard not found, please install with: pip install tensorboardX
2021-03-04 15:55:04 | INFO | fairseq.trainer | begin training epoch 1
2021-03-04 15:55:27 | INFO | fairseq.trainer | NOTE: overflow detected, setting loss scale to: 64.0
2021-03-04 15:55:40 | INFO | fairseq.trainer | NOTE: overflow detected, setting loss scale to: 32.0
2021-03-04 15:55:52