大模型面试题(四)

文章探讨了文本生成领域的大模型预训练模型,重点关注SupervisedFine-Tuning(SFT)的关键因素,包括数据质量、任务相关性、资源管理和策略(如分次微调)。同时介绍了DeepSpeed的Zero优化器及其在大模型训练中的作用,以及最新的扩展特性如ZeRO-Offload和PipelineParallelism。
摘要由CSDN通过智能技术生成

1.文本生成的几大预训练模型?

encoder-only/decoder-only/encoder-decoder

2.有关SFT的问题汇总

硕士校招生进入大模型领域工作,选预训练还是SFT? - 知乎

首先看看这个知乎的问题,大部分回答说建议SFT,大概意思是开源大模型出现的越来越多愿意做预训练的公司比较少,并且应届生做预训练大概率是与数据处理相关

(1)大模型SFT最重要的是什么,分次SFT会发生什么?

----from初创公司NLP(好像进入大模型的领域,还是有研究NLP算法经历的比较多呢)

在大模型的监督式微调(Supervised Fine-Tuning,简称SFT)中,最重要的几个方面包括:
●高质量的训练数据:对于SFT来说, 拥有高质量、代表性强的训练数据是至关重要的。这些数据应该能够覆盖模型将要处理的各种情况,以便模型能够学习到有效的特征和模式。
●任务相关的微调:微调应该针对特定的任务进行,这意味着微调的数据集应该与实际应用场景紧密相关。这样可以确保模型在特定任务上的性能得到显著提升。
●避免过拟合:在微调大型模型时,过拟合是常见的问题。为了防止过拟合,可以采用正则化技术、数据增强或使用早停(early stopping)策略。
●资源和计算效率:大模型的微调通常需要大量的计算资源,需要优化微调过程以提高资源和计算效率,涉及到批处理大小(batch size)的选择、学习率等。
●模型的泛化能力:微调后的模型应保持良好的泛化能力,这意味着它不仅在训练数据上表现良
好,也能在新的、未见过的数据上做出准确的预测。

ps:针对模型的泛化能力,曾见过有论文中的做法是在新的未见过的数据上再次训练
分次SFT (逐步微调)可能会带来以下影响:
●逐步改进:分次微调允许模型逐步学习,每一步都在前一步的基础上进行改进。这种方法可以帮助模型更好地适应复杂的任务,逐步解决可能出现的问题。(有点儿类似于CoT思维链的思想)
●灵活性和控制:分次微调提供了更多的灵活性,允许研究人员根据中间结果调整策略。例如,如果在第一次微调后性能没有显著提升,可以分析原因并调整后续微调的策略。
●风险降低:与一次性微调整个模型相比,分次微调可以降低失败的风险。如果在某个阶段出现问
题,可以更容易地诊断和修复,而不会影响整个模型。
●资源管理:分次微调可以根据可用资源进行计划和调度,使得资源利用更加高效。例如,可以先
对模型的一部分进行微调,然后在资源允许的情况下再进行其他部分的微调。
●细粒度的优化:分次微调允许对模型的不同部分进行细粒度的优化。这对于那些模型结构复杂、
任务需求多样化的情况特别有用。

(2)大模型supervised fine-tuning ( SFT )的方法主要分为哪些?

----from新能源汽车 NLP算法

●全参数微调:使用特定任务的标注数据集对预训练模型的所有参数进行微调。这通常在模型需要对特定任务进行深度定制时使用,但由于需要大量的标注数据和计算资源,在资源有限的情况下可能不切实际。
●迁移学习:在迁移学习中,通常会固定预训练模型的一部分参数,只对模型的最后几层进行微调。这种方法可以利用预训练模型在大规模数据集上学到的通用知识,同时通过微调来适应特定任务。
●层次微调: 与迁移学习类似,层次微调也是只更新模型的一部分参数,但是它更加灵活,可以选择性地微调模型的某些层。这种方法可以根据任务的复杂性和数据集的大小来调整微调的深度。
●多任务学习:模型会在多个相关任务上同时进行训练,目的是让模型学会在不同任务之间共享知识。这种方法可以提高模型的泛化能力,并可能提高在特定任务上的性能。
●知识蒸馏:知识蒸馏是一种模型压缩技术,其中一个大型的、复杂的教师模型的知识被转移到一个小型的、更高效的学生模型中。在SFT中,可以使用知识蒸馏来微调一个小型模型,使其性能接近于大型模型。
●强化学习微调(RLHF) : RLHF微调方法,它结合了强化学习和人类反馈。在这种
方法中,模型通过与人类交互来学习任务特定的知
识,而不是依赖于大量的标注数据。

(3)为什么SFT之后感觉LLM性能下降了?SFT 指令微调数据如何构建?
  • 数据分布偏差:在 SFT 过程中,采用的微调数据集可能与模型在预训练期间所接触的数据存在较大差异,可能会削弱模型的表现
  • 标注异常:在微调数据集中可能存在标注错误或标签不精确的情况(即使质量较低的数据集很少也会对模型产生负面影响)
  • 过度拟合现象:如果用于微调的数据集规模较小,或者模型的参数量过于庞大,可能会导致模型对微调数据集过拟合,从而使得模型在新样本上的表现力下降。
  • 数据集多样性不足:用于微调的数据集可能没有足够的多样性,未能覆盖模型在执行新任务时可能遇到的各种输入类型。

构建指令微调数据集的步骤:

  • 原始数据采集:收集与目标任务相关的原始数据。涵盖从对话实例、分类项到生成任务的数据样本,具体依据目标任务而定。通常需要训练模型的对话能力,因此也要考虑多收集单轮对话和多轮对话的数据集。
  • 数据标注:对于原始数据,给予每一个数据样本恰当的标签。标签的形式基于具体任务而定,可能包括分类标签、文本生成内容或是对话反应等。
  • 数据集分割:对已打标的数据执行分割,以便区分出训练集、验证集和测试集。
  • 数据预处理:针对任务需求对数据进行必要的预处理步骤。这可能包括文本清理、分词处理、去除无用词汇等操作。确保最终的数据格式满足模型输入的规范, 同时将数据转换成适合模型训练的格式。

实战项目推荐:对ChatGLM3/Llama2微调一个同时具有NLU和问答能力的对话机器人https://github.com/agiclass/fine-tuning-lab/tree/v3

3.DeepSpeed中的Zero-1、Zero-2和Zero-3分别起到什么作用?

DeepSpeed是一个由微软开发的深度学习优化库,旨在提高大模型训练的效率和速度。
在DeepSpeed中,Zero优化器是一系列用于提高训练效率的技术,主要包括Zero-1、Zero-2 和Zero-3,通过优化内存使用来允许训练更大的模型。

●Zero-1: Zero-1 是ZeRO优化的第一个阶段。 优化器状态(例如Adam优化器的权重和一阶、二阶矩估计)被分区到不同的进程中,使得每个进程只更新自己的分区。
●Zero-2: Zero-2是ZeRO优化的第二个阶段。在这个阶段,用于更新模型权重的梯度也被分区,使得每个进程只保留与其优化器状态分区相对应的梯度。Zero-2进一步增加了可以使用数据并行训练的模型大小。
●Zero-3: Zero-3是ZeRO优化的第三个阶段。在这个阶段,模型参数被分区到不同的进程中。Zero-3会在前向和后向传递过程中自动收集和分区这些参数。Zero-3还引入了Infinity Offload Engine,可以将模型状态( 包括权重、梯度和优化器状态)加载到CPU和NVMe内存中,从而实现更大规模的内存节省。

总结:Zero-1优化器状态被分区;Zero-2梯度被分区;Zero-3模型参数被分区
实战:DeepSpeed/examples at master · microsoft/DeepSpeed · GitHub

4. DeepSpeed最新的特性?(注意看本文记录日期,框架在更新迭代)

●ZeRO-Offload: 这是ZeRO优化器的一个扩展,它允许将优化器状态卸载到CPU或GPU之外的存储设备,如硬盘或网络存储,从而减少GPU内存占用并允许训练更大的模型。
●Pipeline Parallelism: DeepSpeed支持流水线并行化,将模型的不同层分布到不同的GPU上,以便同时进行前向和反向传播计算,从而提高训练效率。
●DeepSpeed稀疏性优化:包括对稀疏性的支持,可以减少模型中不必要的计算和存储,提高训练和推理的效率。
●多任务学习支持: 允许同时训练模型以执行多个相关任务,这可以提高模型的泛化能力。
 

  • 30
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值