1 引言
Transformers提供了数以千计的预训练模型,利用这些预训练模型可以对文本执行任务,如分类、信息提取、问题回答、总结、翻译、文本生成等。Transformers提供的API可以在给定的文本上使用这些预训练模型,在自己的数据集上对它们进行微调。这似乎是很激动人心的一件事情,在过去作为试验曾经做过一个Bert的训练模型《Bert模型微调---产生自己的训练数据模型》,然而现实是对于个人计算机而言,要求的硬件配置非常高,因此在有限的资源下,为了训练一个模型必须对各个方面精打细算。这个笔记描述了GeotechSet数据集在GPT2模型上的训练过程,着重强调了在目前的硬件条件下如何实现这一过程。
2 考虑的因素
如果有足够的硬件资源, 例如有多核的GPU或TPU, 有足够大的GPU内存,我们可以不必考虑一些输入参数的设置,但在目前条件下必须考虑这个问题,否则不能运行下去,最典型的错误信息就是"GPU out of memory", 即GPU的内存不够,在《全过程记录---检查PyTorch是否在使用GPU》一文中描述过目前使用的硬件设备,只有1个GPU,6G的显存,如此小的内存对机器学习来说是远远不够的,因此需要综合考虑各方面的因素。主要考虑的因素包括:
(1) 预训练模型
预训练模型是整个训练过程的基础,尽管使用大的模型可能会取得更好的结果,但预训练模型不能取得太大。这是我们首先考虑的一个因素。GPT2模型目前有四个,按尺寸排列分别是: gpt2,
gpt2-medium, gpt2-large, gpt2-xl。在本次试验中,为了安全起见,我们使用了最小的模型gpt2.
(2) 输入数据
要进行训练必须考虑输入数据(input.txt)的大小。目前GeotechSet的数据量是180M左右, 显然加载这个数据集机器是承受不了的,因此需要把大数据集分割成小数据集。事实上,小数据集的一个潜在好处是内容相对集中,这样产生的结果离散性不会太大。一个数据集只包含一个相对集中的主题。例如"离散断裂网络"数据集尽量不包括"锚杆支护"方面的内容。在本次试验中,为了保守起见,非常小心地选择了一个大约450k的数据集,这个数据集主要是关于岩桥(rock bridge)方面的内容。
(3) 参数设置
训练过程有许多参数需要设置,其中一个参数是per_device_train_batch_size,它或许影响着GPU的使用量,许多人建议这个值取得越小越好,因此干脆取了最小值1; 另一个参数是dataloader_num_workers,在初始运行时发现默认的设置值为6,有些人建议这个值取得小一些比较好,因此设置为2;最重要的一个参数是block_size,我觉得这个参数的设置影响最大,默认值为512,运行时总是出现超出内存的错误,在其它条件不变的情况下取其一半,设置为256就可以运行下去了。
3 训练过程
在多次调试,综合考虑各种因素后开始进行训练,花了大约10多分钟就完成了训练过程。这么短的训练过程诱使我要加大输入数据和使用GPT2-large模型,但目前还没有这么做,以后逐步加大输入数据,测试其承载的极限值。产生的训练模型保存在预先设置的目录下,如下图所示。
没有去仔细研究这些文件的内容,直接进入测试阶段,检查训练出来的模型是否能够正常工作。
4 测试模型
由于训练过程没有出现错误,因此理论上可以使用我们自己的模型了:
tokenizer = GPT2Tokenizer.from_pretrained('./mwu')
model = GPT2LMHeadModel.from_pretrained('./mwu')
input_ids = tokenizer.encode(sentence, return_tensors='pt')
在Transformers中,模型的名称就是模型文件的目录名称。接下来进行解码方法设置。使用了top_k和top_p联合取样:
outputs = model.generate(
input_ids,
max_length = 100,
early_stopping=True,
num_return_sequences=2,
top_k=60,
top_p = 0.90,
do_sample=True)
以"rock failure mechanism"作为引导句子进行测试,产生的结果如下:
(1) For the first time, a computational modelling approach has been adopted which simulates brittle fracture in rock mass with the objective of predicting the development of a pre-existing failure surface within a rock slope. The approach is simple but elegant considering the nature and the importance of considering fracture mechanisms in rock slopes, with several distinct modes of failure. The results of the numerical modelling of step-path failure are compared against rock slope scale simulations, highlighting the need for rigorous experimentation to simulate large scale;
(2) rock failure mechanism (Kemeny 2006; Stead et al. 2009). The strength and deformability of rock mass by jointing and jointed rock failure mechanisms are investigated in order to investigate the modelled failure mechanism of rock slopes. Three different failure mechanisms are simulated in different approaches. The main approaches (Stead et al. 2009) are presented in Figures 3.7-3.8. Five jointed rock mass failure mechanisms are assumed: (1) intact rock, (2) stepped;
测试结果成功,生成了非常连贯且有实际意义的句子,这显示我们训练出来的模型可用。
5 结束语
本文在有限的条件下使用GPT2在小的GeotechSet数据集上进行了训练,得出了我们自己的geotech数据模型。今后逐渐加大输入数据,使模型进化得更为完善。