
# 构建微调训练任务
#### 创建微调训练任务
创建NLP大模型微调任务步骤如下：
1. 登录ModelArts Studio平台，在"我的空间"模块，单击进入所需空间。
2. 在左侧导航栏中选择"模型开发 \> 模型训练"，单击界面右上角"创建训练任务"。
3. 在"选择模型"页面，选择"模型广场 \> 大语言模型 \> 模型"，单击"确定"进入"创建训练任务"页面。
4. 在"创建训练任务"页面，参考[表1]完成训练参数设置，参数默认值在创建训练任务的时候会带出。
    表1NLP大模型微调参数说明 
   | 参数分类                                                        | 训练参数           | 参数说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
   |:---|:---|:---|
   | 训练配置                                                        | 选择模型           | 可以修改如下信息： - 来源：选择"模型广场"。  - 类型：选择"大语言模型"，并选择训练所用的基础模型和版本，如：Pangu-NLP-N1-32K \| V3.2.36.1。                                                                                                                                                                                                                                                                                                                                                 |
   | 训练配置                                                        | 训练类型           | 选择"微调"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
   | 训练配置                                                        | 训练目标           | 选择"全量微调" - 全量微调：在模型有监督微调过程中，对大模型的全部参数进行更新。这种方法通常会带来最优的模型性能，但需要大量的计算资源和时间，计算开销较高。  - LoRA微调：在模型微调过程中，只对特定的层或模块的参数进行更新，而其余参数保持冻结状态。这种方法可以显著减少计算资源和时间消耗，同时在很多情况下，依然能够保持较好的模型性能。                                                                                                                                                                                                                                                                       |
   | 训练配置                                                        | 高级设置           | checkpoints：在模型训练过程中，用于保存模型权重和状态的机制，详细配置参见[断点续训配置]。 开启断点续训后对于未训练完成的模型，可以通过单击训练任务名称，进入"训练结果"页签，通过"编辑训练"入口选中需要进行断点续训的checkpoints进行续训。 - 关闭：关闭后不保存checkpoints，无法基于checkpoints执行续训操作。  - 自动：自动保存训练过程中的所有checkpoints。  - 自定义：根据设置保存指定数量的checkpoints。                                                      |
   | 训练参数                                                        | 热身比例           | 本案例中设置为**0.01**。 热身比例是指在模型训练过程中逐渐增加学习率的过程。在训练的初始阶段，模型的权重通常是随机初始化的，此时模型的预测能力较弱。如果直接使用较大的学习率进行训练，可能会导致模型在初始阶段更新过快，从而影响模型的收敛。 为了解决这个问题，可以在训练的初始阶段使用较小的学习率，然后逐渐增加学习率，直到达到预设的最大学习率。这个过程就叫做热身比例。通过使用热身比例，可以避免模型在初始阶段更新过快，从而有助于模型更好地收敛。                                                                                                                                                                                                                                                                                                                                                                   |
   | 训练参数                                                        | 序列长度           | 本案例中设置为**32768**。 sequence_length，训练单条数据的最大长度，超过该长度的数据在训练时将被截断。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
   | 训练参数                                                        | 数据批量大小         | 本案例中设置为**8**。 数据集进行分批读取训练，设定每个批次数据的大小。 通常情况下，较大的数据批量可以使梯度更加稳定，从而有利于模型的收敛。然而，较大的数据批量也会占用更多的显存资源，这可能导致显存不足，并且会延长每次训练的时长。                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
   | 训练参数                                                        | 学习率衰减比率        | 本案例中设置为**0.1**。 学习率衰减后的比率，用于控制训练过程中学习率的下降幅度。经过衰减后，学习率的最低值由初始学习率和衰减比率决定。其计算公式为：最低学习率 = 初始学习率 \* 学习率衰减比率。也就是说，学习率在每次衰减后不会低于这个计算出来的最低值。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
   | 训练参数                                                        | 权重衰减系数         | 本案例中设置为**0.1**。 通过在损失函数中增加一个与模型权重大小相关的惩罚项，来鼓励模型保持权重较小，从而防止模型过于复杂或过拟合训练数据。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
   | 训练参数                                                        | 优化器            | 本案例中设置为**adamw**。 优化器参数指的是用于更新模型权重的优化算法的相关参数，可以选择adamw。 - adamw是一种改进的Adam优化器，它在原有的基础上加入了权重衰减（weight decay）的机制，可以有效地防止过拟合（overfitting）的问题。                                                                                                                                                                                                                                                                                                                                                  |
   | 训练参数                                                        | 学习率            | 本案例中设置为**0.00002**。 学习率决定了每次训练时模型参数更新的幅度。选择合适的学习率非常重要：如果学习率太大，模型可能会无法收敛；如果学习率太小，模型的收敛速度会变得非常慢。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
   | 训练参数                                                        | 训练轮数           | 本案例中设置为**3**。 指完成全部训练数据集训练的次数。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
   | 训练参数                                                        | 模型保存策略         | 本案例中设置为**save_checkpoint_steps**。 保存训练中间产物策略，支持按照步数或按照训练epoch保存。按需设置，如果设置为save_checkpoint_steps，会使用save_checkpoint_steps参数的设置。如果设置为save_checkpoint_epoch，会使用save_checkpoint_epoch参数的设置。                                                                                                                                                                                                                                                                                                                                                                                                                                         |
   | 训练参数                                                        | Checkpoint保存间隔 | 本案例中设置为**100**。 save_checkpoint_steps，训练过程中每隔多少个训练步长保存一次模型Checkpoint文件。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
   | 训练参数                                                        | Checkpoint保存轮数 | 本案例中设置为**1**。 训练多少epoch的数据保存一份中间训练产物，可以和save_checkpoint_steps同时设置，根据checkpoint_save_strategy判断是否启用。 eg：2表示每训练2个epoch的数据保存一份中间产物                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
   | 训练参数                                                        | 模型保存步数         | 本案例中设置为**100**。 指每训练一定数量的步骤（或批次）后，模型的状态就会被保存下来。 可以通过token_num = step \* batch_size \* sequence公式进行预估。其中： - token_num：已训练的数据量。  - step：已完成的训练步数。  - batch_size：每个训练步骤中使用的样本数据量。  - sequence：每个数据样本中的Token数量。   数据量以Token为单位。 |
   | 训练参数                                                        | 旋转位置编码         | 本案例中设置为**1000000**。 rotary_base，位置编码的基底值，增强模型对序列中位置信息的捕捉能力，数值越大，模型能够处理的序列长度更长，泛化能力更好，建议使用默认值。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
   | 训练参数                                                        | Agent微调        | 本案例中设置为关闭。 训练Agent模型时，可以开启此参数。通过调整训练数据中的Prompt来引导模型在特定领域或任务上，生成更符合预期的回答。 使用此参数前，请先联系盘古NLP模型工程师调整Prompt和训练数据。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
   | 训练数据配置               | 训练集            | 选择训练模型所需的数据集。要求数据集经过发布操作，操作方法请参见[构建微调训练任务数据集](https://support.huaweicloud.com/bestpractice-pangulm/pangulm_04_0132.html)。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
   | 训练数据配置               | 验证集            | - 若选择"分割训练集"，则需进一步配置数据拆分比例。  - 若选择"选择数据集"，则需选择导入的数据集。                                                                                                                                                                                                                                                                                                                                                                                                                                    |
   | 资源配置    | 计费模式           | 选择训练当前任务的计费模式。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
   | 资源配置    | 训练单元           | 选择训练单元数。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
   | 资源配置    | 单实例训练单元数       | 选择单实例训练单元数。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
   | 资源配置    | 实例数            | 选择实例数。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
   | 订阅提醒                                                        | 订阅提醒           | 该功能开启后，系统将在任务状态更新时，通过短信或邮件将提醒发送给用户。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
   | 发布模型                                                        | 开启自动发布         | 开启自动发布后，模型训练完成的最终产物会自动发布为空间资产，以便对模型进行压缩、部署、评测等操作或共享给其他空间。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
   | 基本信息                                                        | 名称             | 训练任务名称。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
   | 基本信息                                                        | 描述             | 训练任务描述。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
      
   ![](https://support.huaweicloud.com/bestpractice-pangulm/public_sys-resources/note_3.0-zh-cn.png)
   表格中展示了本案例所需的微调训练参数，不同模型训练参数存在一定差异，请以前端页面展示为准。
   
5. 参数填写完成后，单击"立即创建"。
6. 创建好训练任务后，页面将返回"模型训练"页面，可随时查看当前任务的状态。
 
 #### 断点续训配置
断点续训练是指因为某些原因（例如容错重启、资源抢占、作业卡死等）导致训练作业还未完成就被中断，下一次训练可以在上一次的训练基础上继续进行。这种方式对于需要长时间训练的模型而言比较友好。
- 断点续训练是通过checkpoint机制实现。 checkpoint的机制：在模型训练的过程中，不断地保存训练结果（包括但不限于EPOCH、模型权重、优化器状态、调度器状态）。即便模型训练中断，也可以基于checkpoint接续训练。
  
- 当需要从训练中断的位置接续训练，只需要加载checkpoint，并用checkpoint信息初始化训练状态即可。
  图1checkpoint续训配置   
  ![](https://support.huaweicloud.com/bestpractice-pangulm/zh-cn_image_0000002511165110.png) 
- 模型训练过程中点开训练详情页面，会展示所有保存的checkpoint信息，选择需要恢复的checkpoint，可以看到三种续训方式，区别如[表2]所示。
   表2checkpoint续训方式清单 
  | 序号 | 续训方式                    | 说明                                                                                       |
  |:---|:---|:---|
  | 1  | 从所选checkpoint创建新训练      | 创建新的训练任务，可以重新选择数据集，只会使用checkpoint中权重的信息，其余的如优化器状态、调度器状态不会读取。                             |
  | 2  | 从所选checkpoint继续训练       | 继续原有的任务，会读取模型权重、优化器状态、调度器状态并用于初始化，主要解决由于硬件、网络相关的故障导致训练的中断。                               |
  | 3  | 从所选checkpoint跳过step继续训练 | 继续原有的任务，会读取模型权重、优化器状态、调度器状态并用于初始化，但会跳过该checkpoint之后的部分数据（用户可配置），用于解决由于数据质量差导致的loss不收敛问题。 |
     
  ![](https://support.huaweicloud.com/bestpractice-pangulm/public_sys-resources/note_3.0-zh-cn.png)
  训练详情页的checkpoint输出发布成资产之后，与正常训练结束的模型产物一致，可以支持增量微调，LoRA微调，部署等功能。
  
 
#### 查看训练任务详情
模型启动训练后，可以在模型训练列表中查看训练任务的状态，单击任务名称可以进入详情页查看训练结果、训练任务详情和训练日志等。
- **查看训练结果：** 一个正常Loss曲线示例如[图2]，通过观察Loss曲线，其随着迭代步数的增加呈下降趋势直至稳定，证明整个训练状态是正常的。若Loss曲线呈现轻微阶梯式下降，为正常现象。
  图2训练损失值
  ![](https://support.huaweicloud.com/bestpractice-pangulm/zh-cn_image_0000002542645053.png)
  图3验证损失值
  ![](https://support.huaweicloud.com/bestpractice-pangulm/zh-cn_image_0000002542765077.png)
  
- **查看任务详情：** 如[图4]，您可以看到任务的所有配置信息。
  图4训练任务配置信息   
  ![](https://support.huaweicloud.com/bestpractice-pangulm/zh-cn_image_0000002511165142.png) 
- **查看日志：** 如[图5]，您可以看到全部的训练过程日志，可以帮助您更好地分析训练过程。
  图5训练日志信息
  ![](https://support.huaweicloud.com/bestpractice-pangulm/zh-cn_image_0000002511325126.png)
  
 
