-
Step2 修改训练yaml文件配置 LlamaFactroy配置文件为Yaml文件,启动训练前需修改Yaml配置文件,Yaml配置文件在代码目录下的{work_dir}/llm_train/LLaMAFactory/demo.yaml。修改详细步骤如下所示。 选择训练策略类型。 sft,复制sft_yaml样例模板内容覆盖demo.yaml文件内容。 lora,复制lora_yaml样例模板内容覆盖demo.yaml文件内容。 dpo,复制dpo_yaml样例模板内容覆盖demo.yaml文件内容。 修改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 identity,alpaca_en_demo 【可选】注册在dataset_info.json文件数据集名称。如选用定义数据请参考准备数据(可选)配置dataset_info.json文件,并将数据集存放于dataset_info.json同目录下。 dataset_dir /home/ma-user/ws/LLaMAFactory/LLaMA-Factory/data 【可选】dataset_info.json配置文件所属的绝对路径;如使用自定义数据集,yaml配置文件需添加此参数。 是否选择加速深度学习训练框架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-3,配置以下参数 deepspeed: examples/deepspeed/ds_z3_config.json ZeRO-3-Offload,配置以下参数 deepspeed: examples/deepspeed/ds_z3_offload_config.json 否,默认选用Accelerate加速深度学习训练框架,注释掉deepspeed参数。 是否开启NPU FlashAttention融合算子,具体约束详见NPU_Flash_Attn融合算子约束 是,配置以下参数。 flash_attn: sdpa 否,注释掉flash_attn: sdpa参数 是否使用固定句长。 是,配置以下参数 packing: true 否,默认使用动态句长,注释掉packing参数。 选用数据精度格式,以下参数二选一。 bf16,配置以下参数 bf16: true fp16,配置以下参数 fp16: true 是否使用自定义数据集。 是,参考准备数据(可选)后,配置以下参数:参考表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参数,配置参数如下: sft或lora dataset: identity,alpaca_en_demo dpo dataset: dpo_en_demo 是否使用chatglm4-9b、falcon-11b模型。 是,更新配置或命令。 chatglm4-9b,更新transformers为4.41.2版本。 pip install transformers==4.41.2 falcon-11b,参考falcon-11B模型替换文件。 否,忽略此步骤,执行下一步。 如需其他配置参数,可参考表1按照实际需求修改。
-
查看性能 训练性能主要通过训练日志中的2个指标查看,吞吐量和loss收敛情况。 吞吐量(tokens/s/p):可通过表1表格中output_dir参数值路径下的train_results.json查看性能。吞吐计算公式为"num_input_tokens_seen / train_runtime / 训练卡数"。相关参数可查看表1。 loss收敛情况:日志里存在lm loss参数 ,lm loss参数随着训练迭代周期持续性减小,并逐渐趋于稳定平缓。loss收敛图存放路径对应表1表格中output_dir参数值路径下的training_loss.png中也可以使用可视化工具TrainingLogParser查看loss收敛情况,如图2所示。 单节点训练:训练过程中的loss直接打印在窗口上。 多节点训练:训练过程中的loss打印在第一个节点上。 图2 Loss收敛情况(示意图)
-
方案概览 本文档利用训练框架LlamaFactory+华为自研Ascend Snt9B硬件,为用户提供了常见主流开源大模型在ModelArts Lite Server上的微调方案,包括SFT全参微调、LoRA微调、DPO训练方案。 DPO(Direct Preference Optimization):直接偏好优化方法,通过直接优化语言模型来实现对大模型输出的精确把控,不用进行强化学习,也可以准确判断和学习到使用者的偏好,最后,DPO算法还可以与其他优化算法相结合,进一步提高深度学习模型的性能。 SFT监督式微调(Self-training Fine-tuning):是一种利用有标签数据进行模型训练的方法。 它基于一个预先训练好的模型,通过调整模型的参数,使其能够更好地拟合特定任务的数据分布。 与从头开始训练模型相比,监督式微调能够充分利用预训练模型的知识和特征表示,从而加速训练过程并提高模型的性能。 LoRA微调LoRA(Low-Rank Adaptation):微调是一种用于调整大型预训练模型的高效微调技术。 这种方法主要针对如何在保持模型大部分参数固定的同时,通过引入少量可训练参数来调整模型以适应特定任务。 本方案目前仅适用于部分企业客户,完成本方案的部署,需要先联系您所在企业的华为方技术支持。
-
训练支持的模型列表 本方案支持以下模型的训练,如表1所示。 表1 支持的模型列表及权重文件地址 支持模型 Template 支持模型参数量 权重文件获取地址 Llama2 llama2 llama2-7b https://huggingface.co/meta-llama/Llama-2-7b-chat-hf llama2-13b https://huggingface.co/meta-llama/Llama-2-13b-chat-hf llama2-70b https://huggingface.co/meta-llama/Llama-2-70b-chat-hf Llama3 llama3 llama3-8b https://huggingface.co/meta-llama/Meta-Llama-3-8B-Instruct llama3-70b https://huggingface.co/meta-llama/Meta-Llama-3-70B-Instruct Llama3.1 llama3 llama3.1-8b https://huggingface.co/meta-llama/Meta-Llama-3.1-8B-Instruct/tree/main llama3.1-70b https://huggingface.co/meta-llama/Meta-Llama-3.1-70B-Instruct/tree/main Qwen1.5 qwen qwen1.5-0.5b https://huggingface.co/Qwen/Qwen1.5-0.5B qwen1.5-1.8b https://huggingface.co/Qwen/Qwen1.5-1.8B-Chat qwen1.5-4b https://huggingface.co/Qwen/Qwen1.5-4B qwen1.5-7b https://huggingface.co/Qwen/Qwen1.5-7B-Chat qwen1.5-14b https://huggingface.co/Qwen/Qwen1.5-14B-Chat Yi yi yi-6b https://huggingface.co/01-ai/Yi-6B-Chat yi-34b https://huggingface.co/01-ai/Yi-34B-Chat Qwen2 qwen qwen2-0.5b https://huggingface.co/Qwen/Qwen2-0.5B-Instruct qwen2-1.5b https://huggingface.co/Qwen/Qwen2-1.5B-Instruct qwen2-7b https://huggingface.co/Qwen/Qwen2-7B-Instruct qwen2-72b https://huggingface.co/Qwen/Qwen2-72B-Instruct Falcon2 falcon falcon-11B https://huggingface.co/tiiuae/falcon-11B GLM-4 glm4 glm4-9b https://huggingface.co/THUDM/glm-4-9b-chat 说明: glm4-9b模型必须使用版本4b556ad4d70c38924cb8c120adbf21a0012de6ce