更新时间:2024-11-21 GMT+08:00
分享

执行训练任务

步骤一 上传训练权重文件和数据集

如果在准备代码和数据阶段已经上传权重文件、自定义数据集,可以忽略此步骤。

步骤二 修改训练yaml文件配置

LlamaFactroy配置文件为Yaml文件,启动训练前需修改Yaml配置文件,Yaml配置文件在代码目录下的{work_dir}/llm_train/LLaMAFactory/demo.yaml。修改详细步骤如下所示。

  1. 选择训练阶段类型。

    1、DPO偏好训练、Reward奖励模型训练、PPO强化学习目前仅限制支持于llama3系列

    2、PPO训练暂不支持 ZeRO-3存在通信问题,如llama3-70B使用ZeRO-3暂不支持

  2. 训练策略类型
    • 全参full,配置如下:
      finetuning_type: full
    • lora,如dpo仅支持此策略;配置如下:
      finetuning_type: lora
      lora_target: all
    • lora+,目前仅支持qwen1.5-7B指令监督微调;配置如下:
      finetuning_type: lora
      lora_target: all
      loraplus_lr_ratio: 16.0
  3. 修改yaml文件(demo.yaml)的参数如表1所示。
    表1 修改重要参数

    参数

    示例值

    参数说明

    model_name_or_path

    /home/ma-user/ws/tokenizers/Qwen2-72B

    必须修改。加载tokenizer与Hugging Face权重时存放目录绝对或相对路径。请根据实际规划修改。

    template

    qwen

    必须修改。用于指定模板。如果设置为"qwen",则使用Qwen模板进行训练,模板选择可参照表1中的template

    output_dir

    /home/ma-user/ws/Qwen2-72B/sft-4096

    必须修改。指定输出目录。训练过程中生成的模型参数和日志文件将保存在这个目录下。用户根据自己实际要求适配。

    per_device_train_batch_size

    1

    指定每个设备的训练批次大小

    gradient_accumulation_steps

    8

    可修改。指定梯度累积的步数,这可以增加批次大小而不增加内存消耗。可根据自己要求适配。取值可参考表1梯度累积值列。

    num_train_epochs

    5

    表示训练轮次,根据实际需要修改。一个Epoch是将所有训练样本训练一次的过程。可根据自己要求适配

    cutoff_len

    4096

    文本处理时的最大长度,此处为4096,用户可根据自己要求适配

    dataset

    • 指令监督微调/ppo:alpaca_en_demo
    • rm/dpo:dpo_en_demo
    • 多模态数据集(图像):mllm_demo,identity

    可选】注册在dataset_info.json文件数据集名称。如选用定义数据请参考准备数据(可选)配置dataset_info.json文件,并将数据集存放于dataset_info.json同目录下。

    dataset_dir

    /home/ma-user/ws/LLaMAFactory/LLaMA-Factory/data

    可选】dataset_info.json配置文件所属的绝对路径;如使用自定义数据集,yaml配置文件需添加此参数。

  4. 是否选择加速深度学习训练框架Deepspeed,可参考表1选择不同的框架。
    • 是,选用ZeRO (Zero Redundancy Optimizer)优化器。
      • ZeRO-0,配置以下参数
        deepspeed: examples/deepspeed/ds_z0_config.json
      • ZeRO-1,配置以下参数,并复制ds_z1_config.json样例模板至工作目录/home/ma-user/LLaMAFactory/LLaMA-Factory/examples/deepspeed
        deepspeed: examples/deepspeed/ds_z1_config.json
      • ZeRO-2,配置以下参数
        deepspeed: examples/deepspeed/ds_z2_config.json
      • ZeRO-2-Offload,配置以下参数
        deepspeed: examples/deepspeed/ds_z2_offload_config.json
      • ZeRO-3,配置以下参数
        deepspeed: examples/deepspeed/ds_z3_config.json
      • ZeRO-3-Offload,配置以下参数
        deepspeed: examples/deepspeed/ds_z3_offload_config.json
    • 否,默认选用Accelerate加速深度学习训练框架,注释掉deepspeed参数。
  5. 是否开启NPU FlashAttention融合算子,具体约束详见NPU_Flash_Attn融合算子约束
    • 是,配置以下参数。
      flash_attn: sdpa
    • 否,配置以下参数关闭。
      flash_attn: disabled
  6. 是否使用固定句长。
    • 是,配置以下参数
      packing: true
    • 否,默认使用动态句长,注释掉packing参数。
  7. 选用数据精度格式bf16或fp16二者选一,两者区别可查看BF16和FP16说明
    • bf16,配置以下参数。
      bf16: true
    • fp16,相比bf16还需配置loss scale参数,配置如下。
      • 设置fp16为True。
        fp16: true
      • 修改deepspeed的"loss_scale"参数,配置如下。
        • 修改ZeRO优化器配置文件,如ZeRO2命令如下。
          cd /home/ma-user/LLaMAFactory/LLaMA-Factory/examples/deepspeed
          vim ds_z2_config.json
        • 使用fp16容易出现数值溢出,因此配置loss scale建议配置4096或4096以上:
          "loss_scale": 4096,
  8. 是否使用自定义数据集。
    • 是,参考准备数据(可选),以指令监督微调数据集为例,配置以下参数:参考表1dataset_dir和dataset参数说明;如alpaca_gpt4_data.json数据集前缀则为alpaca_gpt4_data。
      dataset: alpaca_gpt4_data
      dataset_dir: /home/ma-user/ws/llm_train/LLaMAFactory/LLaMA-Factory/data 
    • 否,使用代码包自带数据集,注释掉dataset_dir参数,配置参数如下。
      • 指令监督微调/PPO数据集
        dataset: identity,alpaca_en_demo
      • 多模态数据集,如qwen2_vl系列模型
        dataset: mllm_demo,identity
      • RM/DPO,目前仅支持llama3系列模型
        dataset: dpo_en_demo
  9. 是否使用falcon-11b、qwen2_vl系列、glm4-9b模型。
    • 是,更新配置或命令。
      • falcon-11b,参考falcon-11B模型替换文件。
      • glm4-9b,参考glm4-9b模型修改文件内容。
      • qwen2_vl系列,数据集为多模态数据集,若前面步骤已配置请忽略。具体配置如下:
        数据集dataset配置:
        dataset: mllm_demo,identity
    • 否,忽略此步骤,执行下一步。
  10. 如需其他配置参数,可参考表1按照实际需求修改。

步骤三 启动训练脚本

修改完yaml配置文件后,启动训练脚本。模型不同最少NPU卡数不同,NPU卡数建议值可参考表1

  1. 修改启动脚本demo.sh

    进入代码目录{work_dir}/llm_train/LLaMAFactory下修改启动脚本,其中{work_dir}为容器挂载路径

    ①是否为PPO强化训练;

    • 是,demo.sh添加变量;
      export PYTORCH_NPU_ALLOC_CONF = expandable_segments:False
    • 否,忽略此步骤,执行下一步;

    ②修改yaml文件路径:修改demo.sh最后一行代码,将demo.yaml配置文件路径修改为自己实际绝对路径:{work_dir}/llm_train/LLaMAFactory/demo.yaml,例如将以下命令

    • 修改前
    FORCE_TORCHRUN=1 llamafactory-cli train /data/openllm_gy1/user/lmz/poc_package/LLaMAFactory/demo.yaml
    • 修改后:
    FORCE_TORCHRUN=1 llamafactory-cli train  /home/ma-user/ws/llm_train/LLaMAFactory/demo.yaml
  2. 执行多机启动命令(可选)

    多台机器执行训练启动命令如下。

    多机执行命令为:sh demo.sh <MASTER_ADDR=xx.xx.xx.xx> <NNODES=4> <NODE_RANK=0>
    示例:
    #第一台节点
    sh demo.sh  xx.xx.xx.xx  4  0
    # 第二台节点 
    sh demo.sh  xx.xx.xx.xx  4  1
    # 第三台节点 
    sh demo.sh  xx.xx.xx.xx  4  2
    # 第四台节点 
    sh demo.sh  xx.xx.xx.xx  4  3

    以上命令多台机器执行时,只有${NODE_RANK}的节点ID值不同,其他参数都保持一致。其中MASTER_ADDR、 NODE_RANK、 NODE_RANK为必填。

  3. 执行单机启动命令(可选)

    一般小于等于14B模型可选择单机启动,操作过程与多机启动相同,只需修改对应参数即可,可以选用单机启动。

    进入代码目录/home/ma-user/ws/llm_train/LLaMAFactory下执行启动脚本,先修改以下命令中的参数,再复制执行。

    # 单机执行命令为:sh  demo.sh <MASTER_ADDR=localhost> <NNODES=1> <NODE_RANK=0>
    sh demo.sh localhost 1 0

    单机如需指定训练卡数训练可使用ASCEND_RT_VISIBLE_DEVICES变量指定挂载到容器里面的卡的索引,使用执行命令如下:

    ASCEND_RT_VISIBLE_DEVICES=0,1,2,3 sh demo.sh localhost 1 0

    其中ASCEND_RT_VISIBLE_DEVICES=0,1,2,3指使用0-3卡执行训练任务。

训练成功标志

***** train metrics *****”关键字打印

训练完成后,请参考查看日志和性能章节查看指令微调的日志和性能。

1、如训练过程中遇到“NPU out of memory”“Permission denied” 问题可参考 附录:训练常见问题解决。

2、训练中遇到"ImportError: This modeling file requires the following packages that were not found in your environment: flash_attn. Run `pip install flash_attn`"请参考附录:训练常见问题问题3小节。

3、大模型参数如(qwen2-72B、llama2-70B)等sft训练完成后多线程退出时报“torch.distributed.DistStoreError: Socket Timeout”时请参考问题4:Error waiting on exit barrier错误

4、需要开启profiling功能进行性能数据采集和解析请参考录制Profiling

5、训练过程中报"ModuleNotFoundError: No module named 'tyro'"可参考依赖包tyro错误:"ModuleNotFoundError..."

相关文档