使用Google免费GPU进行BERT模型fine-tuning
原地址:https://leowood.github.io/2018/11/16/BERT-fine-tuning-01/
字数统计: 927 | 阅读时长 ≈ 4
使用Google Colab中自带的免费GPU进行BERT fine-tuning。
前期准备
首先,需要申请一个谷歌账号。
打开谷歌云端硬盘,新建一个文件夹,例如:BERT。将代码和数据上传到该文件里。这里的代码应该是已经修改好的代码,具体方法参照上一篇博客,博客最后也有提到,谷歌Colab可以在运行的时候设定参数,因此这里代码里的参数可以保持为默认参数,方便在每次运行的时候修改。
在云盘任意位置新建-更多,选择Colaboratory:
如果在更多栏里没有发现Colaboratory,选择关联更多应用,搜索Colaboratory,选择关联。
创建完成后,会生成一个jupyter笔记本。
选择 修改-笔记本设置,将硬件加速器设置为GPU。
到这里,Google Colab已经配置完成,相当于一个远程的终端,我们可以在上面运行一些linux命令以及python代码,但是要调用谷歌云盘上面的数据和代码,还需要更多的配置。
程序运行
每次重新打开笔记本运行程序时,都要进行以下几步:
-
安装相关库以及授权:
该步骤是为了建立笔记本与谷歌云盘的关联,具体来说就是给这个笔记本授权,使其能够访问你的谷歌云盘上面的文件。
1 2 3 4 5 6 7 8 9 10 11 12 |
!apt-get install -y -qq software-properties-common python-software-properties module-init-tools !add-apt-repository -y ppa:alessandro-strada/ppa 2>&1 > /dev/null !apt-get update -qq 2>&1 > /dev/null !apt-get -y install -qq google-drive-ocamlfuse fuse from google.colab import auth auth.authenticate_user() from oauth2client.client import GoogleCredentials creds = GoogleCredentials.get_application_default() import getpass !google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret} < /dev/null 2>&1 | grep URL vcode = getpass.getpass() !echo {vcode} | google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret} |
运行后,会出现链接,点开链接,选择自己的谷歌账号,将得到的代码输入链接下面的框中即可。
- 挂载谷歌云端硬盘
1 2 |
!mkdir -p drive !google-drive-ocamlfuse drive -o nonempty |
每次修改了云盘中的文件以后都最好运行一次,运行了没有任何提示便成功了。
- 设置工作路径
1 2 |
import os os.chdir('drive/BERT') |
将笔记本的工作路径设置到BERT代码的文件夹下。
可以用ls命令查看是否成功:
-
运行run_classifier.py
使用命令直接运行位于云盘中的py文件,注意不要丢掉前面的感叹号。
这里的\表示换行,如果py文件里面已经设置好了相关参数,下面参数可以不要。一旦选择用如下的方式进行参数设置,py文件中的FLAG参数设置必须都是默认参数,否则可能引起报错。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
!python run_classifier.py \ --task_name=bert_move \ --do_train=true \ --do_eval=true \ --data_dir=data \ --vocab_file=gs://cloud-tpu-checkpoints/bert/uncased_L-24_H-1024_A-16/vocab.txt \ --bert_config_file=gs://cloud-tpu-checkpoints/bert/uncased_L-24_H-1024_A-16/bert_config.json \ --init_checkpoint=gs://cloud-tpu-checkpoints/bert/uncased_L-24_H-1024_A-16/bert_model.ckpt \ --max_seq_length=128 \ --train_batch_size=4 \ --learning_rate=2e-5 \ --num_train_epochs=3.0 \ --output_dir=output \ |
其中gs://cloud-tpu-checkpoints/bert/uncased_L-12_H-768_A-12,是谷歌云中保存的bert预训练模型,我们无需自己上传,目前一共有:
可以根据相关名称调用不同的模型,这里我们选择的是不区分大小写的基础模型,而大型模型uncased_L-24_H-1024_A-16,使用GPU暂无法运行。
另外,因为前面已经设置了工作路径,因此这里data和output都是位于BERT文件目录下。output可以由程序自动创建,data文件夹需提前将train.tsv等文件上传进去。