这段文字详细描述了Geneformer模型的预训练和性能优化策略。预训练是一种常用的机器学习技术,特别是在处理大规模数据集时。以下是对这段描述的详细解释:
预训练方法
- 使用掩蔽学习目标:
- 预训练采用了掩蔽学习目标(masked learning objective),这是一种在其他信息领域已证明能提高模型泛化能力的方法。在这种设置中,15%的基因在每个转录组中被随机掩蔽(masked),模型需预测每个掩蔽位置应该是哪个基因,使用剩余未掩蔽基因的上下文信息来进行预测。
- 自监督学习:
- 该方法完全基于自监督学习,可以在完全未标记的数据上进行。这允许使用大量的训练数据,不受需要伴随标签的样本的限制。
性能优化
-
优化超参数:
- 超参数被优化到最终值,包括最大学习率为1 × 10^-3,学习调度器采用线性增温(linear with warmup),优化器为Adam,带权重衰减修正,增温步骤为10,000,权重衰减为0.001,批量大小为12。
-
使用Tensorboard追踪实验:
- Tensorboard被用来追踪实验过程,模型被预训练了三个周期。
-
针对大规模预训练的效率优化:
- 由于模型的输入大小(2,048)相对于完全密集的自注意力模型(如BERT的输入大小为512)较大,且变换器(transformers)的内存和时间复杂度为输入大小的二次方,实施了多种措施来优化大规模预训练的效率。
- 使用了Huggingface Transformers库中的trainer进行预训练,并用自定义的tokenizer实现动态、按长度分组的填充(padding),这种方法最小化了对填充的计算,并在预训练中实现了29.4倍的加速。
- 这个过程通过取一个随机采样的大批次(megabatch),然后按长度降序排列小批次(minibatches),确保任何内存限制都尽早遇到。然后,小批次被动态填充,由于长度分组,最小化了在填充上的无用计算。
-
分布式GPU训练:
- 实施了分布式GPU训练的最新进展,使用Deepspeed进行高效的大规模数据集预训练。Deepspeed能将参数、梯度和优化器状态分布在可用的GPU上,并尽可能将处理/内存卸载到中央处理器(CPUs),以便更多内容适配在GPU上,并通过确保长期和短期内存分配不混合来减少内存碎片。
总结
整体而言,Geneformer的预训练在大约3天的时间内完成,使用了三个节点,每个节点配备四个Nvidia V100 32GB GPU(总计12个GPU)。这种高效的预训练方法不仅加速了训练过程,还通过多种技术创新确保了模型的高性能和泛化能力。