华为云用户手册

  • 模型推荐的参数与NPU卡数设置 不同模型推荐的训练参数和计算规格要求如表2所示。规格与节点数中的1*节点 & 4*Ascend表示单机4卡,以此类推。 表2 不同模型推荐的参数与NPU卡数设置 序号 支持模型 支持模型参数量 训练策略类型 文本序列长度(SEQ_LEN) 并行参数设置 micro batch size (MBS) 规格与节点数 1 llama2 llama2-7b pretrain/sft 4096 TP(tensor model parallel size)=1 PP(pipeline model parallel size)=4 1 1*节点 & 8*Ascend lora TP(tensor model parallel size)=1 PP(pipeline model parallel size)=4 2 1*节点 & 8*Ascend pretrain/sft 8192 TP(tensor model parallel size)=2 PP(pipeline model parallel size)=4 1 1*节点 & 8*Ascend lora TP(tensor model parallel size)=2 PP(pipeline model parallel size)=4 2 1*节点 & 8*Ascend 2 llama2-13b pretrain/sft 4096 TP(tensor model parallel size)=8 PP(pipeline model parallel size)=1 4 1*节点 & 8*Ascend lora TP(tensor model parallel size)=8 PP(pipeline model parallel size)=1 4 1*节点 & 8*Ascend pretrain/sft 8192 TP(tensor model parallel size)=8 PP(pipeline model parallel size)=1 2 1*节点 & 8*Ascend lora TP(tensor model parallel size)=8 PP(pipeline model parallel size)=1 2 1*节点 & 8*Ascend 3 llama2-70b pretrain/sft 4096 TP(tensor model parallel size)=8 PP(pipeline model parallel size)=4 1 4*节点 & 8*Ascend lora TP(tensor model parallel size)=8 PP(pipeline model parallel size)=4 2 4*节点 & 8*Ascend pretrain/sft 8192 TP(tensor model parallel size)=8 PP(pipeline model parallel size)=8 1 8*节点 & 8*Ascend lora TP(tensor model parallel size)=8 PP(pipeline model parallel size)=4 1 4*节点 & 8*Ascend 4 llama3 llama3-8b pretrain/sft 4096 TP(tensor model parallel size)=4 PP(pipeline model parallel size)=1 2 1*节点 & 8*Ascend lora TP(tensor model parallel size)=4 PP(pipeline model parallel size)=1 4 1*节点 & 8*Ascend pretrain/sft 8192 TP(tensor model parallel size)=4 PP(pipeline model parallel size)=1 1 1*节点 & 8*Ascend lora TP(tensor model parallel size)=4 PP(pipeline model parallel size)=1 2 1*节点 & 8*Ascend 5 llama3-70b pretrain/sft 4096 TP(tensor model parallel size)=8 PP(pipeline model parallel size)=4 1 4*节点 & 8*Ascend lora TP(tensor model parallel size)=8 PP(pipeline model parallel size)=4 2 4*节点 & 8*Ascend pretrain/sft 8192 TP(tensor model parallel size)=8 PP(pipeline model parallel size)=8 1 8*节点 & 8*Ascend lora TP(tensor model parallel size)=8 PP(pipeline model parallel size)=4 1 4*节点 & 8*Ascend 6 Qwen qwen-7b pretrain/sft 4096 TP(tensor model parallel size)=4 PP(pipeline model parallel size)=1 2 1*节点 & 8*Ascend lora TP(tensor model parallel size)=4 PP(pipeline model parallel size)=1 4 1*节点 & 8*Ascend pretrain/sft 8192 TP(tensor model parallel size)=4 PP(pipeline model parallel size)=1 1 1*节点 & 8*Ascend lora TP(tensor model parallel size)=4 PP(pipeline model parallel size)=1 2 1*节点 & 8*Ascend 7 qwen-14b pretrain/sft 4096 TP(tensor model parallel size)=4 PP(pipeline model parallel size)=2 2 1*节点 & 8*Ascend lora TP(tensor model parallel size)=4 PP(pipeline model parallel size)=1 2 1*节点 & 8*Ascend pretrain/sft 8192 TP(tensor model parallel size)=4 PP(pipeline model parallel size)=2 1 1*节点 & 8*Ascend lora TP(tensor model parallel size)=4 PP(pipeline model parallel size)=2 2 1*节点 & 8*Ascend 8 qwen-72b pretrain/sft 4096 TP(tensor model parallel size)=8 PP(pipeline model parallel size)=4 1 4*节点 & 8*Ascend lora TP(tensor model parallel size)=8 PP(pipeline model parallel size)=4 2 4*节点 & 8*Ascend pretrain/sft 8192 TP(tensor model parallel size)=8 PP(pipeline model parallel size)=8 1 8*节点 & 8*Ascend lora TP(tensor model parallel size)=8 PP(pipeline model parallel size)=4 1 4*节点 & 8*Ascend 9 Qwen1.5 qwen1.5-7b pretrain/sft 4096 TP(tensor model parallel size)=1 PP(pipeline model parallel size)=4 1 1*节点 & 8*Ascend lora TP(tensor model parallel size)=1 PP(pipeline model parallel size)=4 2 1*节点 & 8*Ascend pretrain/sft 8192 TP(tensor model parallel size)=4 PP(pipeline model parallel size)=1 1 1*节点 & 8*Ascend lora TP(tensor model parallel size)=1 PP(pipeline model parallel size)=4 1 1*节点 & 8*Ascend 10 qwen1.5-14b pretrain/sft 4096 TP(tensor model parallel size)=8 PP(pipeline model parallel size)=1 4 1*节点 & 8*Ascend lora TP(tensor model parallel size)=4 PP(pipeline model parallel size)=1 4 1*节点 & 8*Ascend pretrain/sft 8192 TP(tensor model parallel size)=8 PP(pipeline model parallel size)=1 2 1*节点 & 8*Ascend lora TP(tensor model parallel size)=8 PP(pipeline model parallel size)=1 2 1*节点 & 8*Ascend 11 qwen1.5-32b pretrain/sft 4096 TP(tensor model parallel size)=8 PP(pipeline model parallel size)=2 2 2*节点 & 8*Ascend lora TP(tensor model parallel size)=8 PP(pipeline model parallel size)=2 4 2*节点 & 8*Ascend pretrain/sft 8192 TP(tensor model parallel size)=8 PP(pipeline model parallel size)=2 1 2*节点 & 8*Ascend lora TP(tensor model parallel size)=8 PP(pipeline model parallel size)=2 2 2*节点 & 8*Ascend 12 qwen1.5-72b pretrain/sft 4096 TP(tensor model parallel size)=8 PP(pipeline model parallel size)=4 1 4*节点 & 8*Ascend lora TP(tensor model parallel size)=8 PP(pipeline model parallel size)=4 2 4*节点 & 8*Ascend pretrain/sft 8192 TP(tensor model parallel size)=8 PP(pipeline model parallel size)=8 1 8*节点 & 8*Ascend lora TP(tensor model parallel size)=8 PP(pipeline model parallel size)=4 1 4*节点 & 8*Ascend 13 Yi yi-6b pretrain/sft 4096 TP(tensor model parallel size)=1 PP(pipeline model parallel size)=4 1 1*节点 & 8*Ascend lora TP(tensor model parallel size)=1 PP(pipeline model parallel size)=4 2 1*节点 & 8*Ascend pretrain/sft 8192 TP(tensor model parallel size)=2 PP(pipeline model parallel size)=2 1 1*节点 & 8*Ascend lora TP(tensor model parallel size)=1 PP(pipeline model parallel size)=4 1 1*节点 & 8*Ascend 14 yi-34b pretrain/sft 4096 TP(tensor model parallel size)=4 PP(pipeline model parallel size)=4 1 2*节点 & 8*Ascend lora TP(tensor model parallel size)=4 PP(pipeline model parallel size)=4 2 2*节点 & 8*Ascend pretrain/sft 8192 TP(tensor model parallel size)=8 PP(pipeline model parallel size)=4 1 4*节点 & 8*Ascend lora TP(tensor model parallel size)=8 PP(pipeline model parallel size)=4 2 4*节点 & 8*Ascend 15 ChatGLMv3 glm3-6b pretrain/sft 4096 TP(tensor model parallel size)=1 PP(pipeline model parallel size)=2 1 1*节点 & 4*Ascend lora TP(tensor model parallel size)=1 PP(pipeline model parallel size)=2 2 1*节点 & 4*Ascend pretrain/sft 8192 TP(tensor model parallel size)=1 PP(pipeline model parallel size)=4 1 1*节点 & 4*Ascend lora TP(tensor model parallel size)=1 PP(pipeline model parallel size)=2 1 1*节点 & 4*Ascend 16 Baichuan2 baichuan2-13b pretrain/sft 4096 TP(tensor model parallel size)=8 PP(pipeline model parallel size)=1 2 1*节点 & 8*Ascend lora TP(tensor model parallel size)=8 PP(pipeline model parallel size)=1 4 1*节点 & 8*Ascend pretrain/sft 8192 TP(tensor model parallel size)=8 PP(pipeline model parallel size)=2 1 1*节点 & 8*Ascend lora TP(tensor model parallel size)=8 PP(pipeline model parallel size)=1 1 2*节点 & 8*Ascend 17 Qwen2 qwen2-0.5b pretrain/sft 4096 TP(tensor model parallel size)=1 PP(pipeline model parallel size)=1 2 1*节点 & 4*Ascend lora TP(tensor model parallel size)=1 PP(pipeline model parallel size)=1 2 1*节点 & 4*Ascend pretrain/sft 8192 TP(tensor model parallel size)=1 PP(pipeline model parallel size)=1 1 1*节点 & 4*Ascend lora TP(tensor model parallel size)=1 PP(pipeline model parallel size)=1 1 1*节点 & 4*Ascend 18 qwen2-1.5b pretrain/sft 4096 TP(tensor model parallel size)=1 PP(pipeline model parallel size)=1 2 1*节点 & 4*Ascend lora TP(tensor model parallel size)=1 PP(pipeline model parallel size)=1 2 1*节点 & 4*Ascend pretrain/sft 8192 TP(tensor model parallel size)=1 PP(pipeline model parallel size)=1 1 1*节点 & 4*Ascend lora TP(tensor model parallel size)=1 PP(pipeline model parallel size)=1 1 1*节点 & 4*Ascend 19 qwen2-7b pretrain/sft 4096 TP(tensor model parallel size)=4 PP(pipeline model parallel size)=1 2 1*节点 & 8*Ascend lora TP(tensor model parallel size)=4 PP(pipeline model parallel size)=1 2 1*节点 & 8*Ascend pretrain/sft 8192 TP(tensor model parallel size)=4 PP(pipeline model parallel size)=2 1 1*节点 & 8*Ascend lora TP(tensor model parallel size)=4 PP(pipeline model parallel size)=2 2 1*节点 & 8*Ascend 20 qwen2-72b pretrain/sft 4096 TP(tensor model parallel size)=8 PP(pipeline model parallel size)=4 1 4*节点 & 8*Ascend lora TP(tensor model parallel size)=8 PP(pipeline model parallel size)=4 2 4*节点 & 8*Ascend pretrain/sft 8192 TP(tensor model parallel size)=8 PP(pipeline model parallel size)=8 1 8*节点 & 8*Ascend lora TP(tensor model parallel size)=8 PP(pipeline model parallel size)=8 1 8*节点 & 8*Ascend 21 GLMv4 glm4-9b pretrain/sft 4096 TP(tensor model parallel size)=1 PP(pipeline model parallel size)=4 1 1*节点 & 8*Ascend lora TP(tensor model parallel size)=1 PP(pipeline model parallel size)=2 1 1*节点 & 4*Ascend pretrain/sft 8192 TP(tensor model parallel size)=2 PP(pipeline model parallel size)=2 1 1*节点 & 8*Ascend lora TP(tensor model parallel size)=2 PP(pipeline model parallel size)=1 1 1*节点 & 4*Ascend 22 mistral mistral-7b pretrain/sft 4096 TP(tensor model parallel size)=1 PP(pipeline model parallel size)=4 1 1*节点 & 8*Ascend lora TP(tensor model parallel size)=1 PP(pipeline model parallel size)=4 2 1*节点 & 8*Ascend 23 mixtral mixtral-8x7b pretrain/sft 4096 TP(tensor model parallel size)=2 PP(pipeline model parallel size)=8 1 2*节点 & 8*Ascend pretrain/sft 8192 TP(tensor model parallel size)=2 PP(pipeline model parallel size)=8 1 2*节点 & 8*Ascend 24 llama3.1 llama3.1-8b pretrain/sft 4096 TP(tensor model parallel size)=4 PP(pipeline model parallel size)=1 2 1*节点 & 8*Ascend lora TP(tensor model parallel size)=4 PP(pipeline model parallel size)=1 4 1*节点 & 8*Ascend pretrain/sft 8192 TP(tensor model parallel size)=4 PP(pipeline model parallel size)=1 1 1*节点 & 8*Ascend lora TP(tensor model parallel size)=4 PP(pipeline model parallel size)=1 2 1*节点 & 8*Ascend 25 llama3.1-70b pretrain/sft 4096 TP(tensor model parallel size)=8 PP(pipeline model parallel size)=4 1 4*节点 & 8*Ascend lora TP(tensor model parallel size)=8 PP(pipeline model parallel size)=2 4 2*节点 & 8*Ascend pretrain/sft 8192 TP(tensor model parallel size)=8 PP(pipeline model parallel size)=8 1 8*节点 & 8*Ascend lora TP(tensor model parallel size)=8 PP(pipeline model parallel size)=2 2 2*节点 & 8*Ascend 26 Qwen2.5 qwen2.5-0.5b pretrain/sft 4096 TP(tensor model parallel size)=1 PP(pipeline model parallel size)=1 1 1*节点 & 4*Ascend lora TP(tensor model parallel size)=1 PP(pipeline model parallel size)=1 2 1*节点 & 4*Ascend pretrain/sft 8192 TP(tensor model parallel size)=1 PP(pipeline model parallel size)=1 1 1*节点 & 4*Ascend lora TP(tensor model parallel size)=1 PP(pipeline model parallel size)=1 1 1*节点 & 4*Ascend 27 qwen2.5-7b pretrain/sft 4096 TP(tensor model parallel size)=4 PP(pipeline model parallel size)=1 2 1*节点 & 8*Ascend lora TP(tensor model parallel size)=4 PP(pipeline model parallel size)=1 4 1*节点 & 8*Ascend pretrain/sft 8192 TP(tensor model parallel size)=4 PP(pipeline model parallel size)=2 1 1*节点 & 8*Ascend lora TP(tensor model parallel size)=4 PP(pipeline model parallel size)=2 2 1*节点 & 8*Ascend 28 qwen2.5-14b pretrain/sft 4096 TP(tensor model parallel size)=8 PP(pipeline model parallel size)=1 4 1*节点 & 8*Ascend lora TP(tensor model parallel size)=4 PP(pipeline model parallel size)=1 4 1*节点 & 8*Ascend pretrain/sft 8192 TP(tensor model parallel size)=8 PP(pipeline model parallel size)=1 2 1*节点 & 8*Ascend lora TP(tensor model parallel size)=8 PP(pipeline model parallel size)=1 2 1*节点 & 8*Ascend 29 qwen2.5-32b pretrain/sft 4096 TP(tensor model parallel size)=8 PP(pipeline model parallel size)=2 2 2*节点 & 8*Ascend lora TP(tensor model parallel size)=8 PP(pipeline model parallel size)=2 4 2*节点 & 8*Ascend pretrain/sft 8192 TP(tensor model parallel size)=8 PP(pipeline model parallel size)=2 1 2*节点 & 8*Ascend lora TP(tensor model parallel size)=8 PP(pipeline model parallel size)=2 2 2*节点 & 8*Ascend 30 qwen2.5-72b pretrain/sft 4096 TP(tensor model parallel size)=8 PP(pipeline model parallel size)=4 1 4*节点 & 8*Ascend lora TP(tensor model parallel size)=8 PP(pipeline model parallel size)=4 4 4*节点 & 8*Ascend pretrain/sft 8192 TP(tensor model parallel size)=8 PP(pipeline model parallel size)=8 1 8*节点 & 8*Ascend lora TP(tensor model parallel size)=8 PP(pipeline model parallel size)=4 2 4*节点 & 8*Ascend 31 llama3.2 llama3.2-1b pretrain/sft 4096 TP(tensor model parallel size)=1 PP(pipeline model parallel size)=1 2 1*节点 & 4*Ascend lora TP(tensor model parallel size)=1 PP(pipeline model parallel size)=1 2 1*节点 & 4*Ascend pretrain/sft 8192 TP(tensor model parallel size)=1 PP(pipeline model parallel size)=1 1 1*节点 & 4*Ascend lora TP(tensor model parallel size)=1 PP(pipeline model parallel size)=1 1 1*节点 & 4*Ascend 32 llama3.2-3b pretrain/sft 4096 TP(tensor model parallel size)=1 PP(pipeline model parallel size)=2 2 1*节点 & 4*Ascend lora TP(tensor model parallel size)=1 PP(pipeline model parallel size)=1 2 1*节点 & 4*Ascend pretrain/sft 8192 TP(tensor model parallel size)=1 PP(pipeline model parallel size)=2 1 1*节点 & 4*Ascend lora TP(tensor model parallel size)=1 PP(pipeline model parallel size)=1 1 1*节点 & 4*Ascend
  • Step2 创建训练任务 创建训练作业,并自定义名称、描述等信息。选择自定义算法,启动方式自定义,以及上传的镜像。训练脚本中会自动执行训练前的权重转换操作和数据处理操作。 图1 选择镜像 如果镜像使用使用基础镜像中的基础镜像时,训练作业启动命令中输入: cd /home/ma-user/work/llm_train/AscendFactory; sh ./scripts_modellink/install.sh; sh ./scripts_modellink/llama2/0_pl_sft_13b.sh 如果镜像使用E CS 中构建新镜像构建的新镜像时,训练作业启动命令中输入: cd /home/ma-user/work/llm_train/AscendFactory; sh ./scripts_modellink/llama2/0_pl_sft_13b.sh 创建训练作业时,可开启自动重启功能。当环境问题导致训练作业异常时,系统将自动修复异常或隔离节点,并重启训练作业,提高训练成功率。为了避免丢失训练进度、浪费算力。此功能已适配断点续训练。 图2 开启故障重启 断点续训练是通过checkpoint机制实现。checkpoint机制是在模型训练的过程中,不断地保存训练结果(包括但不限于EPOCH、模型权重、优化器状态、调度器状态)。即便模型训练中断,也可以基于checkpoint接续训练。 当训练作业发生故障中断本次作业时,代码可自动从训练中断的位置接续训练,加载中断生成的checkpoint,中间不需要改动任何参数。可以通过训练脚本中的SAVE_INTERVAL参数来指定间隔多少step保存checkpoint。
  • Step1 修改训练超参配置 以llama2-13b SFT全参微调为例,执行脚本 0_pl_sft_13b.sh 。 修改模型训练脚本中的配置,参数详解可查看训练参数说明,其中【GBS、MBS、TP、PP】参数值可参考模型推荐参数、NPU卡数设置。 对于Yi系列模型、ChatGLMv3-6B和Qwen系列模型,还需要手动修改训练参数和tokenizer文件,具体请参见训练tokenizer文件说明。
  • Step2 创建预训练任务 创建训练作业,并自定义名称、描述等信息。选择自定义算法,启动方式自定义,以及上传的镜像。训练脚本中会自动执行训练前的权重转换操作和数据处理操作。 图1 选择镜像 训练作业启动命令中输入: cd /home/ma-user/work/llm_train/AscendSpeed; sh ./scripts/install.sh; sh ./scripts/llama2/0_pl_pretrain_13b.sh
  • Step1 在Notebook中修改训练超参配置 以llama2-13b预训练为例,执行脚本0_pl_pretrain_13b.sh。 修改模型训练脚本中的超参配置,必须修改的参数如表1所示。其他超参均有默认值,可以参考表1按照实际需求修改。 表1 必须修改的训练超参配置 参数 示例值 参数说明 ORIGINAL_TRAIN_DATA_PATH /home/ma-user/work/training_data/train-00000-of-00001-a09b74b3ef9c3b56.parquet 必须修改。训练时指定的输入数据路径。请根据实际规划修改。 ORIGINAL_HF_WEIGHT /home/ma-user/work/model/llama-2-13b-chat-hf 必须修改。加载tokenizer与Hugging Face权重时,对应的存放地址。请根据实际规划修改。 对于ChatGLMv3-6B和Qwen系列模型,还需要手动修改tokenizer文件,具体请参见训练tokenizer文件说明。
  • 步骤二 修改训练超参配置 以Llama2-70b和Llama2-13b的SFT微调为例,执行脚本为0_pl_sft_70b.sh 和 0_pl_sft_13b.sh 。 修改模型训练脚本中的超参配置,必须修改的参数如表1所示。其他超参均有默认值,可以参考表1按照实际需求修改。 表1 训练超参配置说明 参数 示例值 参数说明 ORIGINAL_TRAIN_DATA_PATH /home/ma-user/ws/training_data/alpaca_gpt4_data.json 必须修改。训练时指定的输入数据路径。请根据实际规划修改。 ORIGINAL_HF_WEIGHT /home/ma-user/ws/models/llama2-13B 必须修改。加载Hugging Face权重(可与tokenizer相同文件夹)时,对应的存放地址。请根据实际规划修改。 TOKENIZER_PATH /home/ma-user/ws/tokenizers/llama2-13B 该参数为tokenizer文件的存放地址。默认与ORIGINAL_HF_WEIGHT路径相同。若用户需要将Hugging Face权重与tokenizer文件分开存放时,则需要修改参数。 INPUT_PRO CES SED_DIR /home/ma-user/ws/llm_train/processed_for_input/llama2-13b 该路径下保存“数据转换”和“权重转换”的结果。示例中,默认生成在“processed_for_input”文件夹下。若用户需要修改,可添加并自定义该变量。 OUTPUT_SAVE_DIR /home/ma-user/ws/llm_train/saved_dir_for_output/ 该路径下统一保存生成的 CKPT、P LOG 、LOG 文件。示例中,默认统一保存在“saved_dir_for_output”文件夹下。若用户需要修改,可添加并自定义该变量。 CKPT_SAVE_PATH /home/ma-user/ws/llm_train/saved_dir_for_output/saved_models/llama2-13b 保存训练生成的模型 CKPT 文件。示例中,默认保存在“saved_dir_for_output/saved_models”文件夹下。若用户需要修改,可添加并自定义该变量。 LOG_SAVE_PATH /home/ma-user/ws/llm_train/saved_dir_for_output/saved_models/llama2-13b/log 保存训练过程记录的日志 LOG 文件。示例中,默认保存在“saved_models/llama2-13b/log”文件夹下。若用户需要修改,可添加并自定义该变量。 ASCEND_PROCESS_LOG_PATH /home/ma-user/ws/llm_train/saved_dir_for_output/plog 保存训练过程中记录的程序堆栈信息日志 PLOG 文件。示例中,默认保存在“saved_dir_for_output/plog”文件夹下。若用户需要修改,可添加并自定义该变量。 CONVERT_MG2HF TRUE 训练完成的权重文件默认不会自动转换为Hugging Face格式权重。如果需要自动转换,则在运行脚本添加变量CONVERT_MG2HF并赋值TRUE。如果用户后续不需要自动转换,则在运行脚本中必须删除CONVERT_MG2HF变量。转换的Hugging Face格式权重会保存至OUTPUT_SAVE_DIR的目录中。 对于Yi系列模型、ChatGLMv3-6B和Qwen系列模型,还需要手动修改训练参数和tokenizer文件,具体请参见训练tokenizer文件说明。
  • 步骤四 根据config.yaml启动作业 启动作业命令如下。首先会根据config.yaml创建pod,继而在pod容器内自动启动训练作业。 kubectl apply -f config.yaml 启动后,可通过以下命令获取所有已创建的pod信息。若pod已全部启动,则状态为:Running。 kubectl get pod -A -o wide 若查看启动作业日志信息,可通过以下命令打印正在启动的日志信息。其中${pod_name}为上述pod信息中的NAME,例如vcjob-main-0。 kubectl logs -f ${pod_name}
  • 动态benchmark 本章节介绍如何进行动态benchmark验证。 获取数据集。动态benchmark需要使用数据集进行测试,可以使用公开数据集,例如Alpaca、ShareGPT。也可以根据业务实际情况,使用generate_datasets.py脚本生成和业务数据分布接近的数据集。 方法一:使用公开数据集 ShareGPT下载地址: https://huggingface.co/datasets/anon8231489123/ShareGPT_Vicuna_unfiltered/resolve/main/ShareGPT_V3_unfiltered_cleaned_split.json Alpaca下载地址: https://github.com/tatsu-lab/stanford_alpaca/blob/main/alpaca_data.json 方法二:使用generate_dataset.py脚本生成数据集方法: 客户通过业务数据,在generate_dataset.py脚本,指定输入输出长度的均值和标准差,生成一定数量的正态分布的数据。具体操作命令如下,可以根据参数说明修改参数。 cd benchmark_tools python generate_dataset.py --dataset custom_datasets.json --tokenizer /path/to/tokenizer \ --min-input 100 --max-input 3600 --avg-input 1800 --std-input 500 \ --min-output 40 --max-output 256 --avg-output 160 --std-output 30 --num-requests 1000 generate_dataset.py脚本执行参数说明如下: --dataset:数据集保存路径,如custom_datasets.json。 --tokenizer:tokenizer路径,可以是HuggingFace的权重路径。backend取值是openai时,tokenizer路径需要和推理服务启动时--model路径保持一致,比如--model /data/nfs/model/llama_7b, --tokenizer也需要为/data/nfs/model/llama_7b,两者要完全一致。 --min-input:输入tokens最小长度,可以根据实际需求设置。 --max-input:输入tokens最大长度,可以根据实际需求设置。 --avg-input:输入tokens长度平均值,可以根据实际需求设置。 --std-input:输入tokens长度方差,可以根据实际需求设置。 --min-output:最小输出tokens长度,可以根据实际需求设置。 --max-output:最大输出tokens长度,可以根据实际需求设置。 --avg-output:输出tokens长度平均值,可以根据实际需求设置。 --std-output:输出tokens长度标准差,可以根据实际需求设置。 --num-requests:输出数据集的数量,可以根据实际需求设置。 进入benchmark_tools目录下,切换一个conda环境。 cd benchmark_tools conda activate python-3.9.10 执行脚本benchmark_serving.py测试动态benchmark。具体操作命令如下,可以根据参数说明修改参数。 python benchmark_serving.py --backend openai --host ${docker_ip} --port 8080 --dataset custom_datasets.json --dataset-type custom \ --tokenizer /path/to/tokenizer --request-rate 0.01 1 2 4 8 10 20 --num-prompts 10 1000 1000 1000 1000 1000 1000 \ --max-tokens 4096 --max-prompt-tokens 3768 --benchmark-csv benchmark_serving.csv --backend:服务类型,如tgi,vllm,mindspore、openai。 --host ${docker_ip}:服务部署的IP地址,${docker_ip}替换为宿主机实际的IP地址。 --port:推理服务端口。 --dataset:数据集路径。 --dataset-type:支持三种 "alpaca","sharegpt","custom"。custom为自定义数据集。 --tokenizer:tokenizer路径,可以是HuggingFace的权重路径,backend取值是openai时,tokenizer路径需要和推理服务启动时--model路径保持一致,比如--model /data/nfs/model/llama_7b, --tokenizer也需要为/data/nfs/model/llama_7b,两者要完全一致。 --request-rate:请求频率,支持多个,如 0.1 1 2。实际测试时,会根据request-rate为均值的指数分布来发送请求以模拟真实业务场景。 --num-prompts:某个频率下请求数,支持多个,如 10 100 100,数量需和--request-rate的数量对应。 --max-tokens:输入+输出限制的最大长度,模型启动参数--max-input-length值需要大于该值。 --max-prompt-tokens:输入限制的最大长度,推理时最大输入tokens数量,模型启动参数--max-total-tokens值需要大于该值,tokenizer建议带tokenizer.json的FastTokenizer。 --benchmark-csv:结果保存路径,如benchmark_serving.csv。 --served-model-name: 选择性添加, 选择性添加,在接口中使用的模型名;如果没有配置,则默认为tokenizer。 --num-scheduler-steps: 服务启动时如果配置了--num-scheduler-steps和--multi-step-stream-outputs=false,则需配置此参数与服务启动时--num-scheduler-steps一致。 脚本运行完后,测试结果保存在benchmark_serving.csv中,示例如下图所示。 图2 动态benchmark测试结果(示意图)
  • 单条请求性能测试 针对openai的/v1/completions以及/v1/chat/completions两个非流式接口,请求体中可以添加可选参数"return_latency",默认为false,如果指定该参数为true,则会在相应请求的返回体中返回字段"latency",返回内容如下: prefill_latency(首token时延):请求从到达服务开始到生成首token的耗时 model_prefill_latency(模型计算首token时延):服务从开始计算首token到生成首token的耗时 avg_decode_latency(平均增量token时延):服务计算增量token的平均耗时 time_in_queue(请求排队时间):请求从到达服务开始到开始被调度的耗时 request_latency(请求总时延):请求从到达服务开始到结束的耗时 以上指标单位均是ms,保留2位小数。
  • 静态benchmark验证 本章节介绍如何进行静态benchmark验证。 已经上传benchmark验证脚本到推理容器中。如果在步骤四 制作推理镜像步骤中已经上传过AscendCloud-LLM-x.x.x.zip并解压,无需重复执行。 进入benchmark_tools目录下,运行静态benchmark验证。 cd benchmark_tools 语言模型脚本相对路径是tools/llm_evaluation/benchmark_tools/benchmark_parallel.py,具体操作命令如下,可以根据参数说明修改参数。 python benchmark_parallel.py --backend openai --host ${docker_ip} --port ${port} --tokenizer /path/to/tokenizer --epochs 5 \ --parallel-num 1 4 8 16 32 --prompt-tokens 1024 2048 --output-tokens 128 256 --benchmark-csv benchmark_parallel.csv 参数说明 --backend:服务类型,支持tgi、vllm、mindspore、openai等后端。本文档使用的推理接口是openai。 --host:服务部署的IP,${docker_ip}替换为宿主机实 际的IP地址。 --port:推理服务端口。 --tokenizer:tokenizer路径,HuggingFace的权重路径。 --epochs:测试轮数,默认取值为5。 --parallel-num:每轮并发数,支持多个,如 1 4 8 16 32。 --prompt-tokens:输入长度,支持多个,如 128 128 2048 2048,数量需和--output-tokens的数量对应。 --output-tokens:输出长度,支持多个,如 128 2048 128 2048,数量需和--prompt-tokens的数量对应。 --benchmark-csv:结果保存文件,如benchmark_parallel.csv。 --num-scheduler-steps: 服务启动时如果配置了--num-scheduler-steps和--multi-step-stream-outputs=false,则需配置此参数与服务启动时--num-scheduler-steps一致。 --served-model-name: 选择性添加,在接口中使用的模型名;如果没有配置,则默认为tokenizer。 --enable-prefix-caching:服务端是否启用enable-prefix-caching特性,默认为false。 --prefix-caching-num:构造的prompt的公共前缀的序列长度,prefix-caching-num值需小于prompt-tokens。 --use-spec-decode:是否使用投机推理进行输出统计,不输入默认为false。当使用投机推理时必须开启,否则会导致输出token数量统计不正确。注:由于投机推理的性能测试使用随机输入意义不大,建议开启--dataset-type、--dataset-path,并选择性开启--use-real-dataset-output-tokens使用真实数据集进行测试。 --dataset-type:当使用投机推理时开启,benchmark使用的数据类型,当前支持random、sharegpt、human-eval三种输入。random表示构造随机token的数据集进行测试;sharegpt表示使用sharegpt数据集进行测试;human-eval数据集表示使用human-eval数据集进行测试。不输入默认为random。注意:当输入为sharegpt或human-eval时,测试数据的输入长度为数据集的真实长度,--prompt-tokens的值会被忽略。 --dataset-path:数据集的路径,仅当--dataset-type为sharegpt或者human-eval的时候生效。 --use-real-dataset-output-tokens:当使用投机推理时开启,设置输出长度是否使用数据集的真实长度,不输入默认为false。当使用该选项时,测试数据的输出长度为数据集的真实长度,--output-tokens的值会被忽略。 --num-speculative-tokens:仅当开启--use-spec-decode时生效,需和服务启动时配置的--num-speculative-tokens一致。默认为-1。当该值大于等于0时,会基于该值计算投机推理的接受率指标。 脚本运行完成后,测试结果保存在benchmark_parallel.csv中,示例如下图所示。 图1 静态benchmark测试结果(示意图)
  • benchmark方法介绍 性能benchmark包括两部分。 静态性能测试:评估在固定输入、固定输出和固定并发下,模型的吞吐与首token延迟。该方式实现简单,能比较清楚的看出模型的性能和输入输出长度、以及并发的关系。 动态性能测试:评估在请求并发在一定范围内波动,且输入输出长度也在一定范围内变化时,模型的延迟和吞吐。该场景能模拟实际业务下动态的发送不同长度请求,能评估推理框架在实际业务中能支持的并发数。 性能benchmark验证使用到的脚本存放在代码包AscendCloud-LLM-xxx.zip的llm_tools/llm_evaluation目录下。 代码目录如下: benchmark_tools |--- modal_benchmark |--- modal_benchmark_parallel.py # modal 评测静态性能脚本 |--- utils.py ├── benchmark_parallel.py # 评测静态性能脚本 ├── benchmark_serving.py # 评测动态性能脚本 ├── generate_dataset.py # 生成自定义数据集的脚本 ├── benchmark_utils.py # 工具函数集 ├── benchmark.py # 执行静态、动态性能评测脚本 ├── requirements.txt # 第三方依赖
  • Step4 启动镜像 启动容器镜像,finetune全量微调需要启动8卡,启动前可以根据实际需要增加修改参数。 docker run -itd --name ${container_name} -v /sys/fs/cgroup:/sys/fs/cgroup:ro -v /etc/localtime:/etc/localtime -v /usr/local/Ascend/driver:/usr/local/Ascend/driver -v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi --shm-size 60g --device=/dev/davinci_manager --device=/dev/hisi_hdc --device=/dev/devmm_svm --device=/dev/davinci0 --device=/dev/davinci1 --device=/dev/davinci2 --device=/dev/davinci3 --device=/dev/davinci4 --device=/dev/davinci5 --device=/dev/davinci6 --device=/dev/davinci7 --security-opt seccomp=unconfined --network=bridge diffusers-train:0.0.1 bash 启动容器镜像,lora微调和controlnet训练只需要启动单卡,启动前可以根据实际需要增加修改参数。 docker run -itd --name ${container_name} -v /sys/fs/cgroup:/sys/fs/cgroup:ro -v /etc/localtime:/etc/localtime -v /usr/local/Ascend/driver:/usr/local/Ascend/driver -v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi --shm-size 60g --device=/dev/davinci_manager --device=/dev/hisi_hdc --device=/dev/devmm_svm --device=/dev/davinci0 --security-opt seccomp=unconfined --network=bridge diffusers-train:0.0.1 bash 参数说明: --name ${container_name}:容器名称,进入容器时会用到,此处可以自己定义一个容器名称。 --device=/dev/davinci0,..., --device=/dev/davinci7:挂载NPU设备,finetune全量微调示例中挂载了8张卡davinci0~davinci7。 driver及npu-smi需同时挂载至容器。 不要将多个容器绑到同一个NPU上,会导致后续的容器无法正常使用NPU功能。
  • Step3 构建镜像 基于官方提供的基础镜像构建自定义镜像diffusers-train:0.0.1。参考如下命令编写Dockerfile文件。镜像地址{image_url}请参见表2。 FROM {image_url} COPY --chown=ma-user:ma-group diffusers /home/ma-user/diffusers RUN cd /home/ma-user/diffusers && sh prepare.sh COPY --chown=ma-user:ma-group stable-diffusion-v1-5 /home/ma-user/stable-diffusion-v1-5 COPY --chown=ma-user:ma-group stable-diffusion-xl-base-1.0 /home/ma-user/stable-diffusion-xl-base-1.0 COPY --chown=ma-user:ma-group vae-fp16-fix /home/ma-user/vae-fp16-fix COPY --chown=ma-user:ma-group datasets /home/ma-user/datasets WORKDIR /home/ma-user/diffusers
  • Step1 检查环境 请参考Lite Server资源开通,购买Lite Server资源,并确保机器已开通,密码已获取,能通过SSH登录,不同机器之间网络互通。 购买Lite Server资源时如果无可选资源规格,需要联系华为云技术支持申请开通。 当容器需要提供服务给多个用户,或者多个用户共享使用该容器时,应限制容器访问Openstack的管理地址(169.254.169.254),以防止容器获取宿主机的元数据。具体操作请参见禁止容器获取宿主机元数据。 SSH登录机器后,检查NPU卡状态。运行如下命令,返回NPU设备信息。 npu-smi info # 在每个实例节点上运行此命令可以看到NPU卡状态 npu-smi info -l | grep Total # 在每个实例节点上运行此命令可以看到总卡数 如出现错误,可能是机器上的NPU设备没有正常安装,或者NPU镜像被其他容器挂载。请先正常安装固件和驱动,或释放被挂载的NPU。 检查是否安装docker。 docker -v #检查docker是否安装 如尚未安装,运行以下命令安装docker。 yum install -y docker-engine.aarch64 docker-engine-selinux.noarch docker-runc.aarch64 配置IP转发,用于容器内的网络访问。执行以下命令查看net.ipv4.ip_forward配置项的值,如果为1,可跳过此步骤。 sysctl -p | grep net.ipv4.ip_forward 如果net.ipv4.ip_forward配置项的值不为1,执行以下命令配置IP转发。 sed -i 's/net\.ipv4\.ip_forward=0/net\.ipv4\.ip_forward=1/g' /etc/sysctl.conf sysctl -p | grep net.ipv4.ip_forward
  • 性能评测度量方式 度量标准 传统的度量方式未引入SLO的要求,造成吞吐好看,但是客户的感知不好。 goodput的引入:满足的SLO要求的吞吐,即TTFT与TPOT均满足要求。 TTFT:Time To First Token(首token生成时间) TPOT:Time Per Output Token(平均每个token的生成时间) = (finished_time - first_token_time) / output_len) 图片源自于:Throughput is Not All You Need: Maximizing Goodput in LLM Serving using Prefill-Decode Disaggregation | Hao AI Lab @ UCSD (hao-ai-lab.github.io) 目前业内普遍用的度量分离部署收益的方案都是SLO,或者说同构场景只有在有SLO要求时,分离部署的收益才是经过验证的。作为maas来说,SLO的要求是更为合理的。
  • 理论配比计算步骤 当前计算公式默认以下情况: KVCache传输不是瓶颈 只考虑Prefill速率与Decode速率,生产者及时被消费者消耗KV。 计算步骤: 确定当前模型SLO要求,使用混推模式跑出满足SLO的最大batch值的全量与增量数据。(以下使用qwen2 72B,输入256输出256为例, SLO要求为TTFT 1s与TPOT 50ms) 表1 数据 输入句长 prefill首token时延(ms) prefill batch size 输出句长 decode平均时延(ms) decode batch size 256 877.61 16 256 51.43 64 计算全量推理与增量推理的QPS。 全量QPS = 1s / ((prefill_time / 1000) / batch_size) = 1 / ((877.61 / 1000) / 16) = 18.23 qps 增量QPS = 1s / (((output_len - 1) * (decode_time / 1000)) / batch_size) = 1 / (((256 - 1) * (51.43 / 1000)) / 64) = 4.88 qps 配比归一化,计算得出理论最优配比。 最优理论配比 = 增量QPS / 全量QPS = 0.26769 约等于 1 : 4 由公式可得最优配比大约为1p:4d。
  • 理论配比计算方法 配比模型 将整个PD分离系统看做生产消费模型,P实例生产KV,PD之间传输KV,D实例消费KV,三者组成Pipeline完成大模型推理。当三者中任一速率低并成为瓶颈,就会产生请求堆积,进而影响整体的吞吐量和时延。请求增加输入长度降低Prefill生产速率(计算量增加),同时也降低Decode消费速率(KV Cache访存增加),增加P和D实例可以提高生产和消费速率。 因此,PD分离系统良好运行的关键在于满足时延SLO约束下,那么面对不同的请求分布,尽可能提高这三种速率。PD配比寻优保持一个原则:使Prefill速率、Decode速率、传输速率三者互不为短板。
  • 获取模型软件包 本方案支持的模型对应的软件和依赖包获取地址如表1所示。 表1 模型对应的软件包和依赖包获取地址 代码包名称 代码说明 下载地址 AscendCloud-6.5.901-xxx.zip 说明: 软件包名称中的xxx表示时间戳。 包含了本教程中使用到的模型训练代码。代码包具体说明请参见模型软件包结构说明。 获取路径:Support-E,在此路径中查找下载ModelArts 6.5.901 版本。 说明: 如果上述软件获取路径打开后未显示相应的软件信息,说明您没有下载权限,请联系您所在企业的华为方技术支持下载获取。
  • 模型软件包结构说明 AscendCloud-6.5.901代码包中AscendCloud-LLM代码包结构介绍如下,训练脚本以分类的方式集中在scripts_modellink文件夹中: |——AscendCloud-LLM |──llm_train # 模型训练代码包 |──AscendFactory |──examples/ # config配置文件目录 |──data.tgz # 样例数据压缩包 |──third-party/ # patch包 |──src/acs_train_solution/ # 训练运行包 |──intall.sh # 需要的依赖包 |──scripts_llamafactory/ # llamafactory兼容旧版本启动方式目录 |──scripts_modellink/ # modelLink兼容旧版本启动方式目录 |──Dockerfile
  • 代码上传至SFS Turbo 将AscendFactory代码包AscendCloud-LLM-xxx.zip直接上传至ECS服务器中的SFS Turbo中,例如存放在/mnt/sfs_turbo/AscendCloud-LLM-xxx.zip目录下并解压缩。 unzip AscendCloud-*.zip unzip AscendCloud-LLM-*.zip Yi-34B、Qwen1.5系列、GLM4-9B模型执行lora微调策略任务如产生mc2融合算子错误,可参考mc2融合算子报错 结合准备数据、准备权重、准备代码,将数据集、原始权重、代码文件都上传至SFS Turbo后,目录结构如下。 /mnt/sfs_turbo/ |──llm_train # 模型训练代码包 |──AscendFactory |──config/ # 配置文件 |──deepspeed/ # deepspeed配置json文件 |──modellink_performance_cfgs.yaml # ModelLink训练配置json文件 |──....... |──data.tgz #样例数据压缩包 |──intall.sh # 需要的依赖包 |──scripts_modellink/ # modelLink兼容旧版本启动方式目录 |──llama3 # llama3系列模型执行脚本的文件夹 |──qwen2.5 # Qwen2.5系列模型执行脚本的文件夹 |── ... |── dev_pipeline.sh # 系列模型共同调用的多功能的脚本 |──third-party/ # patch包 |──src/acs_train_solution/ # 训练运行包 |──ascendcloud_patch/ # patch补丁包 |──benchmark/ #工具包,存放数据集及基线数据 |──trainer.py # 训练启动脚本 |──performance.py # benchmark训练性能比较启动脚本 |──accuracy.py # benchmark训练精度启动脚本 |──model/Qwen2-7B/ # 权重词表文件目录,如Qwen2-7B |──training_data # 原始数据目录 |──alpaca_gpt4_data.json # 微调数据 |──train-00000-of-00001-a09b74b3ef9c3b56.parquet #预训练数据 |──{output_dir} #{OUTPUT_SAVE_DIR}或yaml文件{output_dir}参数设置值 # 自动生成数据目录结构 |── preprocessed_data |──converted_hf2mg_weight_TP${TP}PP${PP} |──checkpoint # 训练完成生成目录Qwen2-7B,自动生成
  • 操作流程 图1 操作流程图 表2 操作任务流程说明 阶段 任务 说明 准备工作 准备环境 本教程案例是基于ModelArts Lite Server运行的,需要购买并开通Server资源。 准备代码 准备AscendSpeed训练代码、分词器Tokenizer和推理代码。 准备数据 准备训练数据,可以用本案使用的数据集,也可以使用自己准备的数据集。 准备镜像 准备训练模型适用的容器镜像。 预训练 预训练 介绍如何进行预训练,包括训练数据处理、超参配置、训练任务、性能查看。 微调训练 SFT全参微调 介绍如何进行SFT全参微调、超参配置、训练任务、性能查看。 LoRA微调训练 介绍如何进行LoRA微调、超参配置、训练任务、性能查看。
  • 训练支持的模型列表 本方案支持以下模型的训练,如表1所示。 表1 支持的模型列表 序号 支持模型 支持模型参数量 权重文件获取地址 1 llama2 llama2-7b https://huggingface.co/meta-llama/Llama-2-7b-chat-hf 2 llama2-13b https://huggingface.co/meta-llama/Llama-2-13b-chat-hf 3 llama2-70b https://huggingface.co/meta-llama/Llama-2-70b-hf https://huggingface.co/meta-llama/Llama-2-70b-chat-hf (推荐) 4 llama3 llama3-8b https://huggingface.co/meta-llama/Meta-Llama-3-8B-Instruct 5 llama3-70b https://huggingface.co/meta-llama/Meta-Llama-3-70B-Instruct 6 Qwen qwen-7b https://huggingface.co/Qwen/Qwen-7B-Chat 7 qwen-14b https://huggingface.co/Qwen/Qwen-14B-Chat 8 qwen-72b https://huggingface.co/Qwen/Qwen-72B-Chat 9 Qwen1.5 qwen1.5-7b https://huggingface.co/Qwen/Qwen1.5-7B-Chat 10 qwen1.5-14b https://huggingface.co/Qwen/Qwen1.5-14B-Chat 11 qwen1.5-32b https://huggingface.co/Qwen/Qwen1.5-32B-Chat 12 qwen1.5-72b https://huggingface.co/Qwen/Qwen1.5-72B-Chat 13 Yi yi-6b https://huggingface.co/01-ai/Yi-6B-Chat 14 yi-34b https://huggingface.co/01-ai/Yi-34B-Chat 15 ChatGLMv3 glm3-6b https://huggingface.co/THUDM/chatglm3-6b 16 Baichuan2 baichuan2-13b https://huggingface.co/baichuan-inc/Baichuan2-13B-Chat 17 Qwen2 qwen2-0.5b https://huggingface.co/Qwen/Qwen2-0.5B-Instruct 18 qwen2-1.5b https://huggingface.co/Qwen/Qwen2-1.5B-Instruct 19 qwen2-7b https://huggingface.co/Qwen/Qwen2-7B-Instruct 20 qwen2-72b https://huggingface.co/Qwen/Qwen2-72B-Instruct 21 GLMv4 glm4-9b https://huggingface.co/THUDM/glm-4-9b-chat
  • 查看日志 若查看启动作业日志信息,可通过以下命令打印正在启动的日志信息。其中${pod_name}为pod信息中的NAME,例如vcjob-main-0。 kubectl logs -f ${pod_name} 训练过程中,训练日志会在最后的Rank节点打印。 图1 打印训练日志 训练完成后,如果需要单独获取训练日志文件,可以在${SAVE_PATH}/logs路径下获取。日志存放路径为:/home/ma-user/ws/saved_dir_for_ma_output/llama2-70b/logs
  • 查看性能 训练性能主要通过训练日志中的2个指标查看,吞吐量和loss收敛情况。 吞吐量(tokens/s/p):global batch size*seq_length/(总卡数*elapsed time per iteration)*1000,其global batch size(GBS)、seq_len(SEQ_LEN)为训练时设置的参数,具体参数查看表1。 loss收敛情况:日志里存在lm loss参数 ,lm loss参数随着训练迭代周期持续性减小,并逐渐趋于稳定平缓。也可以使用可视化工具TrainingLogParser查看loss收敛情况,如图2所示。 单节点训练:训练过程中的loss直接打印在窗口上。 多节点训练:训练过程中的loss打印在最后一个节点上。 图2 Loss收敛情况(示意图)
  • 查看性能 训练性能主要通过训练日志中的2个指标查看,吞吐量和loss收敛情况。 吞吐量(tokens/s/p):global batch size*seq_length/(总卡数*elapsed time per iteration)*1000,其global batch size(GBS)、seq_len(SEQ_LEN)为训练时设置的参数,具体参数查看表1。 loss收敛情况:日志里存在lm loss参数 ,lm loss参数随着训练迭代周期持续性减小,并逐渐趋于稳定平缓。也可以使用可视化工具TrainingLogParser查看loss收敛情况,如图2所示。 单节点训练:训练过程中的loss直接打印在窗口上。 多节点训练:训练过程中的loss打印在最后一个节点上。 图2 Loss收敛情况(示意图)
  • 步骤九:开始训练 单机训练 cd ${container_work_dir} # 指定model_path为步骤八:下载模型权重下载的Llama-3.2-11B-Vision-Instruct权重路径 # 指定dataset参数为步骤七:数据集下载与制作中所述custom_dataset_info_demo.json中文件设置的数据集名称:coco2014_train_40k_demo # 修改custom_dataset_info参数路径为${container_work_dir}/ms-swift/swift/llm/data/custom_dataset_info_demo.json # finetune sft全参微调场景 model_path=path/to/Llama-3.2-11B-Vision-Instruct \ dataset=coco2014_train_40k_demo \ custom_dataset_info=path/to/ms-swift/swift/llm/data/custom_dataset_info_demo.json \ work_dir=${container_work_dir} \ globol_batch_size=32 \ per_device_batch_size=2 \ bash llama32_vision_11b_finetune_sft.sh # finetune lora微调场景 model_path=path/to/Llama-3.2-11B-Vision-Instruct \ dataset=coco2014_train_40k_demo \ custom_dataset_info=path/to/ms-swift/swift/llm/data/custom_dataset_info_demo.json \ work_dir=${container_work_dir} \ globol_batch_size=32 \ per_device_batch_size=4 \ bash llama32_vision_11b_finetune_lora.sh 多机训练 cd ${container_work_dir} # 指定model_path为步骤八:下载模型权重下载的Llama-3.2-11B-Vision-Instruct权重路径 # 指定dataset参数为步骤七:数据集下载与制作中所述custom_dataset_info_demo.json中文件设置的数据集名称:coco2014_train_40k_demo # 指定custom_dataset_info参数路径为${container_work_dir}/ms-swift/swift/llm/data/custom_dataset_info_demo.json # finetune sft场景 model_path=path/to/Llama-3.2-11B-Vision-Instruct \ dataset=coco2014_train_40k_demo \ custom_dataset_info=path/to/ms-swift/swift/llm/data/custom_dataset_info_demo.json \ work_dir=${container_work_dir} \ node_num=${NODE_NUM} \ node_rank=${NODE_RANK} \ master_addr=${MASTER_ADDR} \ globol_batch_size=32*${NODE_NUM} \ per_device_batch_size=2 \ bash llama32_vision_11b_finetune_sft.sh # finetune lora场景 model_path=path/to/Llama-3.2-11B-Vision-Instruct \ dataset=coco2014_train_40k_demo \ custom_dataset_info=path/to/ms-swift/swift/llm/data/custom_dataset_info_demo.json \ work_dir=${container_work_dir} \ node_num=${NODE_NUM} \ node_rank=${NODE_RANK} \ master_addr=${MASTER_ADDR} \ globol_batch_size=32*${NODE_NUM} \ per_device_batch_size=4 \ bash llama32_vision_11b_finetune_lora.sh 参数说明: node_num/NODE_NUM:机器数量,修改${NODE_NUM}为具体数字。 node_rank/NODE_RANK:机器rank num,主机为0,其余递增,修改${NODE_RANK}为具体数字。 master_addr/MASTER_ADDR:主机IP地址,修改${MASTER_ADDR}为主机IP。 globol_batch_size:全局批次大小。 per_device_batch_size:每张卡上的批次大小。 以单机结果为例,训练成功如下图所示。
  • 步骤八:下载模型权重 从modelscope下载Llama-3.2-11B-Vision-Instruct或将您已下载的权重文件上传到容器能正常访问的目录。 方式1:手动下载,并将其放置在${container_work_dir}路径下。 方式2:利用git下载,须确保git lfs已成功安装: cd ${container_work_dir} git clone https://www.modelscope.cn/LLM-Research/Llama-3.2-11B-Vision-Instruct.git cd Llama-3.2-11B-Vision-Instruct git lfs pull
  • 获取软件和镜像 表1 获取软件和镜像 分类 名称 获取路径 插件代码包 AscendCloud-6.3.912软件包中的AscendCloud-AIGC-6.3.912-xxx.zip 文件名中的xxx表示具体的时间戳,以包名发布的实际时间为准。 获取路径:Support-E,在此路径中查找下载ModelArts 6.3.912 版本。 说明: 如果上述软件获取路径打开后未显示相应的软件信息,说明您没有下载权限,请联系您所在企业的华为方技术支持下载获取。 基础镜像包 swr.cn-southwest-2.myhuaweicloud.com/atelier/pytorch_2_1_ascend:pytorch_2.1.0-cann_8.0.rc3-py_3.9-hce_2.0.2409-aarch64-snt9b-20241213131522-aafe527 SWR上拉取。
  • 步骤五:下载代码安装环境 下载华为侧插件代码包AscendCloud-AIGC-6.3.912-xxx.zip文件,获取路径参见表1 获取软件和镜像。 mv AscendCloud-AIGC-6.3.912-*.zip ${container_work_dir} cd ${container_work_dir} unzip AscendCloud-AIGC-6.3.912-*.zip cp -r multimodal_algorithm/Llama32_Vision/train/6b33108084eb4a8efd5d09090a3e1a51f6920129/* ${container_work_dir} # 下载复制后${container_work_dir}目录下存在如下5个文件 # 1.llama32_vision_install.sh # 2.custom_dataset_info_demo.json # 3.llama32_vision.patch # 4.llama32_vision_11b_finetune_sft.sh # 5.llama32_vision_11b_finetune_lora.sh
  • 步骤六:增加适配代码 # 安装优化加速包 cd ${container_work_dir}/multimodal_algorithm/ascendcloud_multimodal_plugin pip install -e . # 使能优化加速包(此步默认在环境安装阶段已完成,可忽略) # 在${container_work_dir}/ms-swift/swift/cli/sft.py中引入优化代码包 from ascendcloud_multimodal.train.models.llama32_vision import ascend_modeling_mllama
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全