使用 LLaMA-Factory 微调 llama3 模子
1. LLaMA-Factory模子先容
- https://github.com/hiyouga/LLaMA-Factory
复制代码 LLaMA-Factory 是一个用于大型语言模子(LLM)微调的工具,它旨在简化大型语言模子的微调过程, 使得用户可以快速地对模子举行练习和优化,以提高模子在特定任务上的性能。
这个工具支持多种预练习的大型语言模子,例如 LLaMA、LLaVA、Mistral、Mixtral-MoE、Qwen、Yi、 Gemma、Baichuan、ChatGLM 和 Phi 等。
LLaMA-Factory 的特点包括:
- 支持多种微调方法:它集成了连续预练习、有监督微调(SFT)、偏好对齐(RLHF)等多种微调方 法。
- 高效的微调技能:与 ChatGLM 官方的 P-Tuning 微调相比,LLaMA Factory 的 LoRA 微调提供了 显著的加速比,而且在特定任务上取得了更高的性能分数。
- 易用性:LLaMA-Factory 提供了高条理的抽象接口,使得开辟者可以开箱即用,快速上手操作。
- WebUI 支持:鉴戒 Stable Diffusion WebUI,该项目提供了基于 gradio 的网页版工作台,方便初 学者可以迅速上手操作。
- 模子导出和推理:支持模子的导出和推理,包括动态合并 LoRA 模子举行推理。
- API Server:支持启动 API Server,使得练习好的模子可以通过网络接口被远程访问和调用。
- 评测 benchmark:提供了主流评测 benchmark 支持,如 mmlu、cmmlu、ceval 等,用于评估 模子的泛化能力。
LLaMA-Factory 旨在降低大型语言模子微调的门槛,使得更多的研究者和开辟者能够利用这些强大的模 型来办理具体的现实题目。
1.1 情况配置
/mnt/workspace路径下执行
- git clone https://github.com/hiyouga/LLaMA-Factory
- .gitconda create -n llama_factory python=3.10conda activate llama_factorycd LLaMA-Factorypip install -e .[metrics]
复制代码 1.2 下载llama3模子
/mnt/workspace路径下执行
/mnt/workspace/models路径下执行
- pip install modelscope
- git clone https://www.modelscope.cn/LLM-Research/Meta-Llama-3-8B-Instruct.git
复制代码 2 llama3中文加强大模子(lora微调)
使用预练习模子+LoRA适配器的方式, 可以在不重新练习整个模子的情况下, 快速且高效地将模子适应到 新的任务或领域, 如将英文模子适应到中文对话。这是一种常见且实用的微调方法。
2.1 模子练习
修改文件 /mnt/workspace/LLaMA-Factory/examples/train_lora/llama3_lora_sft.yaml
- !上传配置文件
- llama3_lora_sft.yaml
复制代码- ### model
- model_name_or_path: /mnt/workspace/models/Meta-Llama-3-8B-Instruct
- ### method
- stage: sft
- do_train: true
- finetuning_type: lora
- lora_target: all
- ### dataset
- dataset: alpaca_gpt4_zh
- template: llama3
- cutoff_len: 2048
- max_samples: 1000
- overwrite_cache: true
- preprocessing_num_workers: 16
- ### output
- output_dir: /mnt/workspace/models/llama3-lora-zh
- logging_steps: 10
- save_steps: 500
- plot_loss: true
- overwrite_output_dir: true
- ### train
- per_device_train_batch_size: 1
- gradient_accumulation_steps: 8
- learning_rate: 1.0e-4
- num_train_epochs: 3.0
- lr_scheduler_type: cosine
- warmup_ratio: 0.1
- bf16: true
- ddp_timeout: 180000000
- ### eval
- val_size: 0.1
- per_device_eval_batch_size: 1
- eval_strategy: steps
- eval_steps: 500
复制代码 yaml文件中的重要参数:
model
- model_name_or_path: 指定预练习模子的路径或名称, 这里使用的是
/mnt/workspace/models/Meta-Llama-3-8B-Instruct 路径下的 Meta-Llama 3.8B 模子作为底子模 型。
- method
- stage: 表示练习阶段, 这里是 sft(Supervised Fine-Tuning)。
- do_train: 表示要举行练习。
- finetuning_type: 微调方法, 这里使用 LoRA(Low-Rank Adaptation)。
- lora_target: LoRA 作用的对象, 这里是 attention 层的 query 和 value 映射矩阵。
- dataset
- dataset: 练习数据集名称,这里用的是 alpaca_gpt4_zh 数据集。(留意:数据集可以选择多个 alpaca_zh,alpaca_gpt4_zh,oaast_sft_zh)
- template: 数据集的格式模板,这里是 llama3。
- cutoff_len: 输入序列的最大长度, 超过会截断, 这里设为1024。
- max_samples: 从数据集中取的最大样本数, 这里取前1000个样本。
- preprocessing_num_workers: 数据预处理惩罚的历程数, 这里用16个历程并行处理惩罚。
- output
- output_dir: 练习日记和模子的保存路径。
- logging_steps: 每隔多少步记录一越日记, 这里每100步记录一次。
- save_steps: 每隔多少步保存一次模子, 这里每500步保存一次。
- plot_loss: 是否绘制loss曲线图。
- train
- per_device_train_batch_size: 每个设备上的练习批巨细, 这里设为1。
- gradient_accumulation_steps: 梯度累积的步数, 这里累积8步才更新一次模子参数。
- learning_rate: 学习率, 这里设为0.0001。
- num_train_epochs: 练习的epoch数, 这里练习1个epoch。(还可以指定max_steps 3000 : 练习 3000步。留意:真正项目练习增大总步数;留意:num_train_epochs和max_steps之中选择一 个)
- lr_scheduler_type: 学习率调度器范例, 这里用cosine, 即先warmup再降温。
- warmup_steps: 用初始学习率warmup的步数, 这里取总步数的10%。 fp16: 是否使用fp16混淆精度练习, 以加速练习并减少显存占用。
- eval
- val_size: 从练习集中划分出的验证集比例, 这里取10%作为验证集。
- per_device_eval_batch_size: 验证时每个设备的批巨细,这里为1。
- evaluation_strategy: 验证策略, 这里根据steps数来验证。
- eval_steps: 每隔多少步验证一次, 这里每500步验证一次。
以上就是这个yaml配置文件的重要参数解释。这些参数设置了一个使用LoRA对Meta-Llama-3-8BInstruct模子在alpaca_gpt4_zh数据集上举行微调的练习过程。
2.2 克隆数据集
在/mnt/workspace/LLaMA-Factory/data路径下使用下面的下令克隆alpaca_gpt4_zh数据集
- git clone https://www.modelscope.cn/datasets/llamafactory/alpaca_gpt4_zh.git
复制代码 然后,修改dataset_info.json文件
上传alpaca_gpt4_data_zh.json到data目次下
2.3 练习
- llamafactory-cli train examples/train_lora/llama3_lora_sft.yaml
复制代码 1.4 推理
修改examples/inference/llama3_lora_sft.yaml
- model_name_or_path: /mnt/workspace/models/Meta-Llama-3-8B-Instruct
- adapter_name_or_path: /mnt/workspace/models/llama3-lora-zh
- template: llama3
- finetuning_type: lora
复制代码
- –model_name_or_path /mnt/workspace/models/Meta-Llama-3-8B-Instruct : 这个参数指定了 预练习语言模子的名称或路径。在这个例子中, 使用的是位于 /mnt/workspace/models/MetaLlama-3-8B-Instruct 的Meta的Llama-3-8B-Instruct模子。这个模子将作为底子模子,在其上举行 微调。
- –adapter_name_or_path /mnt/workspace/models/llama3-lora-zh : 这个参数指定了用于微调 的适配器(Adapter)的名称或路径。在这个例子中, 使用的是位 于 /mnt/workspace/models/llama3-lora-zh 的适配器。这个适配器是通过LoRA技能在底子模子 上微调得到的。
- –template llama3 : 这个参数指定了对话模板的名称。模板界说了对话的格式和风格。在这个例 子中, 使用的是名为 llama3 的模板。
- –finetuning_type lora : 这个参数指定了微调的范例。在这个例子中, 使用的是LoRA技能举行微 调。
/mnt/workspace/LLaMA-Factory路径下执行
- llamafactory-cli chat examples/inference/llama3_lora_sft.yaml
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |