更新时间:2024-09-04
背景信息
LoRA 微调(Low-Rank Adaptation)是一种参数高效的微调技术,用于解决在微调大型语言模型或其他深度学习模型时面临的计算成本高、资源消耗大等问题。
以下是一些可能需要进行 LoRA 微调的场景:
- 特定领域的应用:当预训练模型需要在特定领域(如医疗、金融、法律等)中进行更精准的任务时,例如构建金融领域的智能助手或医疗文本分析系统,通过 LoRA 微调可以使模型更好地理解和处理该领域的专业术语和特定模式。
- 数据分布差异:如果实际应用中的数据分布与预训练模型所使用的数据分布有较大差异,LoRA 微调可以帮助模型适应新的数据特征,提高在目标数据上的性能。
- 个性化需求:例如为智能家居系统或特定用户群体定制个性化的语言模型,使其更符合用户的习惯和需求。
- 有限计算资源:在计算资源有限的情况下,如只有少量显卡,LoRA 微调能够以较低的计算成本对大模型进行优化,而无需进行全参数微调。
- 新任务或新数据集:当面临新的任务或使用新的数据集时,利用 LoRA 微调可以在保留预训练模型大部分知识的基础上,快速适应新任务的要求。
- 提高模型性能:即使预训练模型在某些任务上已经表现不错,但通过 LoRA 微调仍有可能进一步提高模型的准确性、召回率等性能指标。
- 多语言场景:针对特定语言的文本处理任务,对预训练的多语言模型进行 LoRA 微调,以更好地适应该语言的语法、语义等特点。
- 快速迭代和实验:能够快速尝试不同的微调设置和参数组合,加速模型的优化和改进过程。
操作步骤
步骤1 、使用浏览器,用SCP的管理员或SCP租户登录SCP控制台
管理员场景登录地址:https:// SCP的访问地址:4430。例如https://192.168.200.100:4430/
租户场景登录地址:https:// SCP的访问地址。例如https://192.168.200.100
步骤2 、 在导航栏左上角单击 ,选择人工智能模块,选择“AI算力平台 ”,进
入AICP控制台页面
步骤3 、 单击左侧导航栏的“模型训练”,进入模型训练管理页面
步骤4 、在模型训练页面,单击“创建训练任务”,进入训练任务创建页面
步骤5 、在页面右上角,勾选【微调训练】以及展开【更多参数配置】勾选【LoRA】,即为LoRA微调
步骤6 、在训练创建页面,进行训练的模型、数据集及算力选择
参数 |
解释 |
推荐样例 |
选择基础模型 |
|
NA |
选择数据集-我的数据集 |
预训练或者微调训练使用的垂域训练数据集/主数据集,支持数据集多选,支持选择数据集的某个版本 |
NA |
选择数据集-配比数据集 |
仅用单一领域数据进行模型训练,模型很容易出现灾难性遗忘现象,其他领域的能力出现下降。在领域训练过程中加入通用数据进行混合训练,在增强用户垂类场景能力的同时,保持其原本的通用能力。 模型灾难性遗忘是指在机器学习和深度学习中,当模型持续学习新的任务或数据时,出现对之前已经学习到的知识和技能严重遗忘或性能显著下降的现象。 这种遗忘可能导致模型在处理旧任务时的表现急剧变差。例如,一个已经训练好能够准确分析语句情感的分类模型,当继续用新的数据进行训练后,可能会突然无法准确识别原来语句的情感。 |
自动 |
步骤7 、选择好基础的模型、数据集和算力池后,如对训练任务有更细的要求,可设置任务的学习率、迭代次数等。单击【更多参数配置】,可展开进行设置
参数 |
解释 |
推荐样例 |
训练方式 |
全量更新 在训练过程中对大模型的全部参数进行更新,相比 LoRA,全量更新的效果更优。 LoRA 在保留自注意力模块中原始权重矩阵的基础上,对权重矩阵进行低秩分解,训练过程中只更新低秩部分的参数。 |
请按实际需求和算力资源选择全量/LoRA |
资源配置 |
单实例算力 承载任务所需的资源单位,以单节的资源规格进行拆分 实例数 实例数对应训练任务承载的POD数,用于当某个训练任务需要多个节点的GPU资源并行分析时,以实例数来自定义需要多少节点参与。 当一个节点的资源能应对时建议选择单实例,通过扩大单实例规格来满足,因为GPU卡跨实例通信相比单实例内通信时延会增长 调度策略 自动调度 训练任务自动调度到算力池中执行,调度规则由节点亲和性决定 手动指定 手动选择执行的裸金属节点,可以选择多个节点 |
请按实际需求和算力资源进行配置 |
迭代次数 |
epoch,控制训练过程中的迭代轮数。 可根据实际需求和计算资源的限制,通过设置合适的迭代次数来平衡训练效果和时间成本。 如果资源有限或对训练速度有要求,可以减少迭代次数;若追求更高的精度和性能,则可以增加迭代次数。 通过尝试不同的迭代次数,可以找到在特定任务和数据集上使模型性能最优的设置。 过少的迭代次数可能导致模型欠拟合,无法充分学习数据;过多的迭代次数则可能导致过拟合,使模型对训练数据过度拟合而在新数据上表现不佳。自定义迭代次数有助于找到一个恰当的平衡点。 |
3-5 可以先从少量的epoch入手,观测loss收敛情况再决定是否需要调整迭代次数。 。 |
批处理大小 |
batchsize,表示在每次训练迭代中单卡使用的样本数。 较大的批处理大小可以充分利用硬件的并行计算能力,提高计算效率,但会占用更多内存; 较小的批处理大小则内存需求较低,但计算效率可能相对较低。通过自定义,可以根据硬件资源和任务需求来找到最佳平衡。 通常,较大的批处理大小能提供更稳定的梯度估计,有助于模型更稳定地收敛。但过小的批处理大小可能引入较大的方差,导致训练不稳定。自定义批处理大小可以根据数据特点和模型架构来调整收敛速度和稳定性 |
8-32 通常,较大的批处理大小能提供更稳定的梯度估计,有助于模型更稳定地收敛。但过小的批处理大小可能引入较大的方差,导致训练不稳定。 自定义批处理大小可以根据数据特点和模型架构来调整收敛速度和稳定性。 举例来说,如果硬件内存有限,可能需要选择较小的批处理大小,如 2 或 4;而在拥有强大 GPU 且数据量巨大的情况下,可以将批处理大小设置为 64 甚至更大,以加快训练速度。 |
学习率 |
learning_rate,在梯度下降的过程中更新权重时的超参数,过高会导致模型难以收敛,过低则会导致模型收敛速度过慢,平台已给出默认推荐值,可根据经验调整。 通过自定义学习率,可以根据任务的特点和数据的性质,找到既能保证一定收敛速度又能避免不稳定的合适值。 通过自定义学习率,可以根据任务的特点和数据的性质,找到既能保证一定收敛速度又能避免不稳定的合适值。 在训练早期,可以使用较大的学习率来快速探索参数空间;随着训练的进行,逐渐减小学习率,进行更精细的调整,以接近最优解 |
全量 2e-5 LoRA 1e-4 对于较为简单的模型和小规模数据集: 初始学习率可以在 0.1 到 0.01 之间尝试。 对于复杂的深度学习模型和大规模数据集: 初始学习率常见的范围是 0.001 到 0.0001。 在实际应用中,通常会通过试验不同的学习率来找到最适合特定任务和模型的取值。常见的做法是使用一个较小的范围,如 [0.0001, 0.001, 0.01] 进行试验,观察模型的训练损失和性能指标,从而确定最优的学习率。 |
自定义系统 prompt |
自定义的系统提示词,自定义系统 prompt 为用户提供了一种灵活且有力的方式,来塑造和优化 AI 模型的输出,以满足各种多样化和个性化的需求。 通过精心设计的 prompt,可以引导模型生成符合特定需求、主题或风格的内容。比如,如果希望模型生成一篇科技评论文章,那么自定义的 prompt 可以是对某个科技产品的介绍和一些关键问题的提出。 |
例如在一个智能客服的应用中,自定义 prompt 可以包含常见问题的类型、回答的格式要求以及对客户语气的模拟,从而使模型生成的回答更贴合客服场景的需求。 |
checkpoint 保存频率 |
训练时按此频率保存 checkpoint。单个训练任务的总 steps =(epoch * 数据量)/(并行总卡数 * 批处理大小)。 自定义 checkpoint 保存频率可以根据具体的训练需求、资源状况和任务特点,灵活地管理训练过程中的数据保存,以提高训练效率和模型质量。 |
2000 如果训练环境不太稳定,可能会将保存频率设置得较高,比如每 200个step保存一次;而如果存储空间有限且训练相对稳定,可能会设置为每 5000 个迭代保存一次。 |
checkpoint 保存策略 |
最大保留的checkpoint数量。 全部保存策略的优点在于: 提供了完整的训练历史记录,可以追溯到训练过程中的任何一个点。这对于深入分析模型的训练轨迹、进行详细的实验对比以及应对可能出现的复杂问题非常有用。 保持最近 N 个策略的优势在于: 节省存储空间,避免大量旧的 checkpoint 占用过多资源。 通常在实际应用中,较近的 checkpoint 更有可能被用于恢复训练或进行后续的优化调整,因为它们代表了模型更接近最终状态的性能。 例如,如果您正在进行一个长期的、大规模的训练任务,存储空间较为紧张,但您只关心最近几次训练的结果以便快速调整和恢复训练,那么选择保持最近 5 个或 10 个 checkpoint 可能就足够了。但如果这是一个关键的研究项目,需要对每一个阶段的模型都进行深入研究,那么全部保存会更合适 |
如果您的计算资源充足,尤其是存储空间不是问题,并且您可能需要对训练过程进行非常详细的回溯和分析,那么全部保存可能是更好的选择。 然而,如果存储空间有限,或者您主要关注模型的近期表现和较新的训练状态,那么保持最近 N 个的策略更为合适。 |