language-modeling finetuning
本文基于最新的transformers v4.3.3
https://github.com/huggingface/transformers/tree/master/examples#important-note
第一步非常重要,如上面官方链接讲的,需要正确安装transformers。单纯的pip install会报错
第二步,多GPU进行分布式训练,同样如上面官方链接,
在运行run_mlm.py的时候在前面加上一句:
python -m torch.distributed.launch \
--nproc_per_node 8
就是会自动使用多GPU了。
另外就是,运行上面这句之前,如果要指定GPU,那么需要在命令行加一句
export CUDA_VISIBLE_DEVICES=1,2,3,4
如果出现显存爆掉的情况,比如下面,
RuntimeError: CUDA out of memory. Tried to allocate 786.00 MiB (GPU 0; 11.91 GiB total capacity; 10.57 GiB already allocated; 470.56 MiB free; 10.72 GiB reserved in total by PyTorch)
要么用更多GPU,使用更大显存,要么减小max_sequence_length(文本被切分成这么长的句子),或者batch_size
transformers的每个device上的batch_size一开始默认为8,使用8个GPU的话,总的batch_size就是64。在GPU个数有限的情况下,减小batch_size到2,总的batch_size变成了16.这时,显存大大降低,不再报错,但是训练时间会变长。这样子是牺牲空间换时间。但是batch_size并不是越大越好,据某个大牛讲,batch_size设置为2~32,也就是mini-batch的情况下,甚至会使得网络达到鞍点,也就是局部最优点。这是大batch_size可能找不到的。
另外,就加速训练而言,transformers添加了混合精度训练(mixed precision)的方法,也就是在python run_mlm.py的最后加上一句,--fp16。
一般而言,训练数据的精度是32位,64位甚至128位,这里改成16位,是牺牲训练精度换取时间。
952

被折叠的 条评论
为什么被折叠?



