更新时间:2024-05-20 GMT+08:00
分享

模型微调

AI Gallery支持将模型进行微调,训练后得到更优模型。

场景描述

模型微调是深度学习中的一种重要技术,它是指在预训练好的模型基础上,通过调整部分参数,使其在特定任务上达到更好的性能。 在实际应用中,预训练模型是在大规模通用数据集上训练得到的,而在特定任务上,这些模型的参数可能并不都是最优的,因此需要进行微调。

AI Gallery的模型微调,简单易用,用户只需要选择训练数据、创建微调任务,模型微调就会对数据进行训练,快速生成模型。

约束限制

  • 如果模型的“任务类型”“文本问答”“文本生成”,则支持模型微调。如果模型的“任务类型”是除“文本问答”“文本生成”之外的类型(即自定义模型),则模型文件必须满足自定义模型规范(训练)才支持模型自定义训练。
  • 当使用自定义镜像进行模型微调时,要确认镜像是否满足自定义镜像规范,否则无法成功完成自定义训练。

进入模型微调

  1. 登录AI Gallery
  2. 单击“模型”进入模型列表。
  3. 选择需要进行微调训练的模型,单击模型名称进入模型详情页。
  4. 在模型详情页,选择“训练 > 微调大师”进入微调工作流页面。

选择训练任务类型

选择模型微调的训练任务类型。

  • 当模型的“任务类型”“文本问答”“文本生成”时,“训练任务类型”默认和模型“任务类型”一致。“训练任务类型”支持修改,如果模型文件满足自定义模型规范(训练),则“训练任务类型”支持选择“自定义”
  • 当模型的“任务类型”是除“文本问答”“文本生成”之外的类型(即自定义模型)时,则“训练任务类型”默认为“自定义”,支持修改为“文本问答”“文本生成”
  • 当使用自定义镜像进行模型微调时,“训练任务类型”默认为“自定义”,且不支持修改。

准备数据

  • 本地上传数据需要确保数据已按照数据集要求完成编排。如果是自定义模型,此处的数据集要求即为模型文件“dataset_readme.md”里的内容。
  • 本地上传数据支持上传csv、json、jsonl、txt、jpg、png类型的文件。单个文件最大5GB,所有文件总大小不超过50G。
  1. 在微调工作流的“数据准备”环节选择数据集。
    • 从本地上传
      1. “从本地上传”处,单击“点击上传”,选择本地编排好的训练数据。
      2. 数据上传成功后,页面会有提示信息。

        此时AI Gallery会自动新建一个数据集,单击提示信息处的“查看”可以进入数据集详情页,也可以在“我的Gallery > 数据集 > 我创建的数据集”进入数据集详情页查看。

    • 从AI Gallery中选
      1. 单击“从AI Gallery中选择”。
      2. 在弹窗中,从“我创建的”或“我收藏的”数据集中选择所需要数据集。
      3. 选择完成后,单击“确定”。
  2. 数据准备完成后,单击“下一步”进入“作业设置”环节。

设置并启动作业

  1. 在微调工作流的“作业设置”环节配置训练作业参数。
    1. 算法配置,会显示已选模型的信息,基于已选模型选择微调方式。
      • “训练任务类型”“文本问答”“文本生成”时,AI Gallery支持的微调方式是LoRA。
      • “训练任务类型”“自定义”时,微调方式来自于模型文件“train_params.json”

      低秩适应(LoRA)是一种重参数化方法,旨在减少具有低秩表示的可训练参数的数量。权重矩阵被分解为经过训练和更新的低秩矩阵。所有预训练的模型参数保持冻结。训练后,低秩矩阵被添加回原始权重。这使得存储和训练LoRA模型更加高效,因为参数明显减少。

    2. 超参数设置,基于训练作业配置超参。超参指的是模型训练时原始数据集中实际字段和算法需要字段之间的映射关系。
      • “训练任务类型”“文本问答”“文本生成”时,则常见的超参说明请参见表1
      • “训练任务类型”“自定义”时,超参信息来自于模型文件“train_params.json” 。如果不使用可选超参,建议单击右侧的删除按钮,删除参数。
      表1 常见超参说明

      参数名称

      参数类型

      说明

      data_url

      String

      数据OBS存储路径。

      train_url

      String

      微调产物输出OBS路径。

      train_data_file

      String

      训练数据文件名。

      test_data_file

      String

      测试数据文件名。

      prompt_field

      String

      数据prompt列名。

      response_field

      String

      数据response列名。

      history_field

      String

      数据history列名。

      prefix

      String

      数据格式化时使用的前缀。

      instruction_template

      String

      数据格式化时使用的指令模板。

      response_template

      String

      数据格式化时使用的回答模板。

      lora_alpha

      int

      Lora scaling的alpha参数。

      lora_dropout

      float

      Lora dropout概率。

      lora_rank

      int

      Lora attention维度。

      per_device_train_batch_size

      int

      用于训练的每个GPU/TPU core/CPU的批处理大小。

      gradient_accumulation_steps

      int

      梯度累计步数。

      max_steps

      int

      训练最大步数,如果数据耗尽,训练将会在最大步数前停止。

      save_steps

      int

      checkpoint保存步数。

      logging_steps

      int

      日志输出步数。

      learning_rate

      float

      初始学习率。

      max_grad_norm

      float

      梯度裁剪最大范数。

      warmup_ratio

      float

      热身步数比。

      max_seq_length

      int

      数据最大序列长度。

      finetuned_model

      String

      前序微调产物OBS路径。

      bits

      int

      模型量化bit数,如4、8。

      max_eval_samples

      int

      最大测试数据数。

    3. 计算规格选择,按需选择计算规格。单击“选择”,在弹窗中选择资源规格,单击“确定”。
      • “所在区”选择计算规格所在的区域。默认显示全部区域的计算规格。
      • 选择计算规格不可用的资源会置灰。右侧“配置信息”区域会显示计算规格的详细数据,AI Gallery会基于资产和资源情况分析该任务是否支持设置“商品数量”,用户可以基于业务需要选择任务所需的资源卡数。

      如果选择付费资源,则请确认账号未欠费,且余额高于所选计算规格的收费标准,否则可能会导致AI Gallery工具链服务异常中断。AI Gallery的计算规格的计费说明请参见计算规格说明

  2. 作业参数配置完成后,单击“启动作业”。
  3. “订单信息确认”页面,确认服务信息和费用,单击“确定”提交模型训练任务。

    单击“返回模型训练”跳转到微调大师页面,可以查看训练作业状态。当“状态”“训练完成”时,表示微调任务完成。

    • 单击操作列的“查看模型”跳转到微调获得的新模型的详情页面。
    • 单击操作列的“任务详情”可以在弹窗中查看“训练信息”“训练日志”“指标效果”
    • 单击操作列的“更多 > 删除任务”,可以删除微调任务,但是微调获得的新模型不会被删除。

查看训练效果

启动模型微调任务后,在微调大师列表单击操作列的“任务详情”,在弹窗中选择“指标效果”页签,可以查看训练效果。

表2 训练效果的指标介绍

指标名称

指标说明

NPU/GPU利用率

在训练过程中,机器的NPU/GPU占用情况(横坐标时间,纵坐标占用率)。

显存利用率

在训练过程中,机器的显存占用情况(横坐标时间,纵坐标占用率)。

吞吐

在训练过程中,每卡处理tokens数量(tokens/s/p)。每种框架计算方式不一致,例如,ATB可通过“samples per second*seq_lenth/总卡数”得到tokens/s/p,输出给throughout字段,seq_lenth取值在训练脚本中可以查看。

单机8卡吞吐量一般为1650tokens/s/p,双机16卡吞吐量一般为1625tokens/s/p。

说明:

自定义训练或自定义镜像训练,需要提前在训练启动脚本(例如“train.py”)中定义好迭代次数、LOSS和吞吐数据的存放位置,以及存放格式(必须是“迭代次数|loss|吞吐”),才能在此处正常查看吞吐和“训练LOSS”曲线。

训练LOSS

训练阶段的LOSS变化,模型在日志里用LOSS关键词记录数据,按照训练迭代周期记录LOSS值。

微调产物说明

模型微调完成后,会得到一个新模型,即微调产物。

在微调大师页面,单击操作列的“查看模型”跳转到微调获得的新模型的详情页面。选择“模型文件”页签可以查看微调产物。各文件说明请参见表3

图1 微调产物示例
表3 微调产物说明

文件名

文件说明

gallery_train文件夹

自定义模型的模型训练文件,仅当使用自定义模型微调时才会有这个微调产物,内容和预训练模型里的gallery_train文件一致。

training_logs/user_params.json

微调配置参数信息,AI Gallery会自动将微调设置的参数信息记录在此文件下。

“README.md”

模型的基础信息。内容和预训练模型里“模型文件”页签的“README.md”一致。

其他文件

当使用自定义模型微调时,可能还会有一些其他微调产物,这是由自定义模型的训练脚本文件train.py决定的,如果训练脚本定义了归档其他训练产物,就会在此处呈现。

分享:

    相关文档

    相关产品