大模子三阶段练习方法(LLaMa Factory)

[复制链接]
发表于 2025-10-20 15:00:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
媒介

本章我们将通过 LLaMA-Factory 详细实践大模子练习的三个阶段,包罗:预练习、监督微调和偏好改正。
大模子练习回首


练习目标

练习一个医疗大模子
练习过程实行

预备练习框架

LLaMA Factory是一款开源低代码大模子微调框架,集成了业界最广泛利用的微调技能,支持通过Web UI界面零代码微调大模子,如今已经成为开源社区内最受欢迎的微调框架,GitHub星标凌驾2万。
运行情况要求



  • • 硬件:
  • • GPU:保举利用24GB显存的显卡大概更高设置
  • • 软件:
  • • python:3.10
  • • pytorch:2.1.2 + cuda12.1
  • • 操纵体系:Ubuntu 22.04
           保举选择DSW官方镜像:modelscope:1.14.0-pytorch2.1.2-gpu-py310-cu121-ubuntu22.04
下载练习框架

第一步:登录ModelScope平台,启动PAI-DSW的GPU情况,并进入容器。
第二步:在容器中,通过下令行拉代替码。
  1. # 拉取代码  
  2. git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git  
  3.   
  4. # 进入代码目录  
  5. cd LLaMA-Factory  
  6.   
  7. # 安装依赖  
  8. pip install -e ".[torch,metrics]"
复制代码
第三步:查抄情况是否安装乐成。
  1. llamafactory-cli version
复制代码
正常安装乐成表现如下:

   


    • 如果安装不乐成,必要根据提示信息举行逐个标题办理。


    • 一样平常情况下,在ModelScope平台中,一样平常会出现Keras 版本不匹配的标题,可以运行pip install tf-keras办理。

  第四步:举行端口映射下令 由于阿里云平台的端口映射好像存在标题,这会导致启动LLaMA Factory的Web界面表现非常,以是必要手动在下令行运行如下下令:
  1. export GRADIO_SERVER_PORT=7860 GRADIO_ROOT_PATH=/${JUPYTER_NAME}/proxy/7860/
复制代码
第五步:下令行下运行下令,启动WebUI界面
  1. llamafactory-cli webui
复制代码
启动后,点击返复书息中的http://0.0.0.0:7860,可以看到Web界面。

预备练习模子

选择模子

在开展大模子练习之前,由于我们不能从零开始练习一个大模子(时间及资源都不允许!),以是我们必要选择一个已经练习好的模子,作为根本模子举行练习。
在ModelScope平台,我们选择Qwen2-0.5B模子作为底座模子。
下载模子

第一步:拉代替码
  1. git clone https://www.modelscope.cn/qwen/Qwen2-0.5B.git
复制代码
第二步:在LLaMA-Factory下创建models目次,方便后续模子都维护在该目次下。
第三步:移动模子目次到LLaMA-Factory的models目次下。
  1. LLaMA-Factory/  
  2. |-models/  
  3.     |-Qwen2-0.5B/
复制代码
验证模子

第一步:在LLaMA-Factory的WebUI界面,举行干系设置。


  • • Model name: Qwen2-0.5B
  • • Model path: models/Qwen2-0.5B
           models/Qwen2-0.5B 对应 下载模子 第三步中的路径。由于Linux体系是巨细写敏感,以是必要特别注意页面设置路径与实际路径巨细写要保持同等。
第二步:切换Tab为 Chat , 点击 Load model按钮。 模子加载乐成后,会表现如下界面。

   如果出现错误,可以通过切换到启动LLaMA Factory的下令行检察日记信息排查标题。
  第三步:在Chat的对话框中,输入简朴信息验证模子可否利用。

   由于当前加载的Qwen2-0.5B是一个根本模子,以是其对话本领会非常弱,这里我们告急是验证模子加载的团体流程是否通顺。
  第1阶段:预练习

❗由于大模子的预练习必要数千个GPU并一连数月的时间,以是一样平常情况下实际工作中并不会涉及到预练习,本篇文章我们只做的简朴流程体验。
预备练习数据

阐明:LLaMa-Factory的Github上有练习数据格式的详细阐明,请见README_zh。


  • • 预练习数据格式:[ {"text": "document"}, {"text": "document"} ]
  • • 数据集样例:
按照数据集样例,我们预备如下的自界说预练习数据集,生存到data/custom_pt_train_data.json。
  1. [  
  2.   {"text":"患者在过去的五年中多次出现头痛症状。"},  
  3. {"text":"研究表明,适量运动有助于改善心血管健康。"},  
  4. {"text":"高血压患者需定期监测血压水平。"},  
  5. {"text":"糖尿病患者应注意饮食控制和胰岛素使用。"},  
  6. {"text":"流感疫苗每年接种可以有效预防流感。"},  
  7. {"text":"保持良好的睡眠习惯对心理健康至关重要。"},  
  8. {"text":"慢性咳嗽可能是肺部疾病的早期征兆。"},  
  9. {"text":"定期体检可以帮助早期发现健康问题。"},  
  10. {"text":"心理咨询对缓解焦虑和抑郁症状有效。"},  
  11. {"text":"饮食中增加纤维素有助于消化系统健康。"},  
  12. {"text":"适量饮水对维持身体正常功能非常重要。"},  
  13. {"text":"戒烟可以显著降低患肺癌的风险。"},  
  14. {"text":"高胆固醇水平可能导致心脏病。"},  
  15. {"text":"保持健康体重有助于降低多种疾病风险。"},  
  16. {"text":"心理健康与身体健康密切相关。"},  
  17. {"text":"儿童应定期进行视力和听力检查。"},  
  18. {"text":"老年人易患骨质疏松症,需注意补钙。"},  
  19. {"text":"过度饮酒会对肝脏造成严重损害。"},  
  20. {"text":"心脏病患者应遵循医生的治疗方案。"},  
  21. {"text":"良好的饮食习惯可以改善生活质量。"},  
  22. {"text":"运动可以帮助减少压力和焦虑。"},  
  23. {"text":"戒烟后,肺部功能会逐渐恢复。"},  
  24. {"text":"高血糖可能导致多种并发症。"},  
  25. {"text":"定期锻炼有助于提高免疫力。"},  
  26. {"text":"适量的社交活动可以提高生活满意度。"},  
  27. {"text":"健康的生活习惯可以改善整体健康状况。"},  
  28. {"text":"心理健康教育应引起全社会的重视。"}  
  29. ]
复制代码
注册自界说数据

根据LLaMa-Factory的README,我们必要在dataset_info.json中按照以下格式注册自界说的数据集。


  • • 数据集注册格式:"数据集名称": { "file_name": "data.json", "columns": { "prompt": "text" } }
我们在data/dataset_info.json中添加如下数据集:
  1. "custom_pt_train_data": {  
  2.   "file_name": "custom_pt_train_data.json",  
  3.   "columns": {  
  4.     "prompt": "text"  
  5.   }  
  6. }
复制代码

预览练习数据

在 LLaMa-Factory的WebUI界面上,选择Dataset为 custom_pt_train_data,点击Preview dataset按钮,预览数据集。

设置练习参数



  • • Model name: Qwen2-0.5B
  • • Model path: models/Qwen2-0.5B
  • • Finetuning method: full
  • • Stage : Pre-Training
  • • Dataset: custom_pt_train_data , c4_demo, wikipedia_zh
  • • Output dir: Qwen2_pretrain_output_demo1
参数扼要阐明:


  • • Finetuning method代表微调的方法:
  • • full: 完全微调模子的全部参数。
  • • Freeze:冻结模子的某些层或全部层,仅微调特定的参数。
  • • LoRA (Low-Rank Adaptation):在不改变原始模子参数的情况下,通过添加少量的可练习参数来顺应新使命。
  • • Stage 代表练习的阶段:
  • • Pre-Training: 预练习阶段。
  • • Supervised Fine-Tuning: 微调阶段。
  • • Reward Model: 嘉奖模子是一个过程,通过构建一个模子来推测给定输入的嘉奖值,通过练习嘉奖模子,可以为后续的强化学习提供一个目标。
  • • PPO (Proximal Policy Optimization): PPO是一种强化学习算法,旨在优化计谋(即模子的举动),以最大化预期嘉奖。
  • • DPO (Direct Preference Optimization): DPO是一种直接优化偏好的方法,通常用于根据人类反馈直接调解模子的输出。
  • • KTO (Knowledge Transfer Optimization): KTO指的是知识迁徙优化,旨在从一个使命或模子中迁徙知识到另一个使命或模子。
启动练习

点击Preview Command预览下令行无误后,点击Start即可开启练习。
   如果启动练习失败,可以通过切换到启动LLaMA Factory的下令行检察日记信息排查标题。 比方:我初次启动时报错如下:
  1. # ConnectionError: Couldn't reach 'pleisto/wikipedia-cn-20230720-filtered' on the Hub (ConnectionError)
复制代码
  这个标题是由于加载wikipedia-cn-20230720-filtered数据集时,由于网络标题,导致无法加载。因此,本着将练习流程跑通,我将数据集改为wiki_demo后运行,即可正常练习。
  正常练习过程:

第2阶段:监督微调

预备练习数据

SFT 的数据格式有多种,比方:Alpaca格式、OpenAI格式等。
此中Alpaca格式如下:
  1. [  
  2.   {  
  3. "instruction":"human instruction (required)",  
  4. "input":"human input (optional)",  
  5. "output":"model response (required)",  
  6. "system":"system prompt (optional)",  
  7. "history":[  
  8. ["human instruction in the first round (optional)","model response in the first round (optional)"],  
  9. ["human instruction in the second round (optional)","model response in the second round (optional)"]  
  10. ]  
  11. }  
  12. ]
复制代码
根据以上的数据格式,我们在ModelScope的数据集找到中文医疗对话数据-Chinese-medical-dialogue符合上述格式。
  1. # 在data目录下使用git命令拉取数据集  
  2. git clone https://www.modelscope.cn/datasets/xiaofengalg/Chinese-medical-dialogue.git
复制代码
注册自界说数据

在dataset_info.json中添加如下数据集:
  1.   "custom_sft_train_data":{  
  2. "file_name":"Chinese-medical-dialogue/data/train_0001_of_0001.json",  
  3. "columns":{  
  4. "prompt":"instruction",  
  5. "query":"input",  
  6. "response":"output"  
  7. }  
  8. },
复制代码
预览练习数据

通过Preview dataset按钮预览数据集。

设置练习参数



  • • Model name: Qwen2-0.5B
  • • Model path: saves/Qwen2-0.5B/full/Qwen2_pretrain_output_demo1
  • • Finetuning method: full
  • • Stage : Supervised Fine-Tuning
  • • Dataset: custom_sft_train_data
  • • Output dir: Qwen2_sft_output_demo1
设置参数阐明:


  • • Model path:我们选择第1阶段预练习模子的输出目次。
  • • Stage:这一阶段,由于我们要举行微调,选择Supervised Fine-Tuning。
  • • Output dir: 更换一个新的输出路径,以便后续开展第3阶段练习,比方:Qwen2_sft_output_demo1
启动练习

点击Preview Command预览下令行
  1. llamafactory-cli train   
  2. --stage sft   
  3. --do_train True  
  4. --model_name_or_path saves/Qwen2-0.5B/full/Qwen2_pretrain_output_demo1  
  5. --preprocessing_num_workers 16  
  6. --finetuning_type full   
  7. --template default   
  8. --flash_attn auto   
  9. --dataset_dir data   
  10. --dataset custom_sft_train_data   
  11. --cutoff_len 1024  
  12. --learning_rate 5e-05  
  13. --num_train_epochs 3.0  
  14. --max_samples 100000  
  15. --per_device_train_batch_size 2  
  16. --gradient_accumulation_steps 8  
  17. --lr_scheduler_type cosine   
  18. --max_grad_norm 1.0  
  19. --logging_steps 5  
  20. --save_steps 100  
  21. --warmup_steps 0  
  22. --optim adamw_torch   
  23. --packing False  
  24. --report_to none   
  25. --output_dir saves/Qwen2-0.5B/full/Qwen2_sft_output_demo1  
  26. --bf16 True  
  27. --plot_loss True  
  28. --ddp_timeout 180000000  
  29. --include_num_input_tokens_seen True
复制代码
增补阐明:


  • • --logging_steps 5: 每 5 步纪录一次练习日记。
  • • --save_steps 100: 每 100 步生存一次模子查抄点。
           这里最好将save_steps 设置大一点,否则练习过程会天生非常多的练习日记,导致硬盘空间不敷而练习制止。
下令行确认无误后,点击Start即可开启练习。

   练习过程中,记得实时关注资源的斲丧情况:


  • • 显存:利用watch -n 1 nvidia-smi 实时检察显存开销。
  • • 硬盘:利用watch -n 1 df -h /mnt 实行检察/mnt分区的磁盘利用情况。
  历时5小时30分钟后,模子终于练习完毕。(大模子的练习果然是一个烧钱💰的过程)
验证模子



    • 在LLaMA Factory的WebUI界面上,切换至Chat界面


    • Model path: 输入刚才练习模子的输出目次,即saves/Qwen2-0.5B/full/Qwen2_sft_output_demo1


    • 其他设置保持默认稳固;


    • 点击Load model,待模子加载乐成后,输入看病干系的信息,测试模子的本领。


第3阶段:偏好改正

预备练习数据



  • • 改正偏好数据格式:[ { "instruction": "human instruction (required)", "input": "human input (optional)", "chosen": "chosen answer (required)", "rejected": "rejected answer (required)" } ]按照上述数据格式,我们借助其他的大模子天生20条练习数据并生存到data/custom_rlhf_train_data.json。[ { "instruction":"请提供一种常见的感冒药。", "input":"我必要一种能缓解咳嗽的药。", "chosen":"感冒药如对乙酰氨基酚可以缓解症状。", "rejected":"我不知道有什么药。" }, { "instruction":"表明一下高血压的危害。", "input":"高血压对身材有什么影响?", "chosen":"高血压会增长心脏病和中风的风险。", "rejected":"高血压没什么大不了的。" }, { "instruction":"保举一种康健的饮食风俗。", "input":"我想减肥,应该吃什么?", "chosen":"发起多吃水果和蔬菜,镌汰糖分摄入。", "rejected":"只吃沙拉就可以了。" }, { "instruction":"形貌糖尿病的症状。", "input":"糖尿病有什么显着的症状?", "chosen":"常见症状包罗口渴、频仍排尿和疲惫。", "rejected":"没有什么特别的症状。" }, { "instruction":"怎样防备流感?", "input":"我应该怎么做才气不得流感?", "chosen":"接种流感疫苗和勤洗手是有用的防备步伐。", "rejected":"只要不出门就行了。" }, { "instruction":"表明一下心脏病的风险因素。", "input":"心脏病的伤害因素有哪些?", "chosen":"包罗高血压、高胆固醇和吸烟。", "rejected":"心脏病与生存方式无关。" }, { "instruction":"怎样缓解焦虑?", "input":"我感到很焦虑,有什么发起?", "chosen":"实验深呼吸练习和规律锻炼。", "rejected":"焦虑没什么好担心的。" }, { "instruction":"保举一些得当老年人的锻炼方式。", "input":"老年人得当什么活动?", "chosen":"散步、游泳和太极都是很好的选择。", "rejected":"老年人不必要活动。" }, { "instruction":"表明什么是过敏反应。", "input":"过敏反应是什么?", "chosen":"是免疫体系对某些物质的非常反应。", "rejected":"过敏反应就是感冒。" }, { "instruction":"怎样保持生理康健?", "input":"我应该怎么照顾自己的生理康健?", "chosen":"定期与朋侪交换和寻求专业资助是很告急的。", "rejected":"生理康健不告急。" }, { "instruction":"形貌高胆固醇的影响。", "input":"高胆固醇对身材有什么影响?", "chosen":"大概导致动脉硬化和心脏病。", "rejected":"高胆固醇没什么影响。" }, { "instruction":"怎样辨认烦闷症?", "input":"烦闷症的症状有哪些?", "chosen":"包罗一连的伤心、失去爱好和疲惫感。", "rejected":"烦闷只是心情不好。" }, { "instruction":"发起怎样进步免疫力。", "input":"我想增强免疫力,有什么发起?", "chosen":"保持均衡饮食、富足就寝和适量活动。", "rejected":"吃药就能进步免疫力。" }, { "instruction":"解说什么是癌症筛查。", "input":"癌症筛查是什么?", "chosen":"是通过检测早期发现癌症的过程。", "rejected":"癌症筛查没须要。" }, { "instruction":"如那边理压力?", "input":"我压力很大,怎么办?", "chosen":"可以实验冥想和时间管理本领。", "rejected":"压力是正常的,不必处理处罚。" }, { "instruction":"表明什么是肥胖。", "input":"肥胖是什么?", "chosen":"是体重凌驾康健范围的状态,通常由多种因素造成。", "rejected":"肥胖只是吃得多。" }, { "instruction":"怎样举行康健查抄?", "input":"康健查抄包罗什么?", "chosen":"通常包罗体检、血液查抄和须要的影像学查抄。", "rejected":"康健查抄不告急。" }, { "instruction":"保举一些抗氧化的食品。", "input":"哪些食品富含抗氧化剂?", "chosen":"蓝莓、坚果和绿茶都是很好的选择。", "rejected":"抗氧化食品没什么特别。" }, { "instruction":"表明什么是慢性病。", "input":"慢性病是什么?", "chosen":"是长期存在且通常无法完全治愈的疾病。", "rejected":"慢性病就是平凡病。" } ]
注册自界说数据

在dataset_info.json中,注册新添加的custom_rlhf_train_data.json数据集。
  1.   "custom_rlhf_train_data":{  
  2. "file_name":"custom_rlhf_train_data.json",  
  3. "ranking":true,  
  4. "columns":{  
  5. "prompt":"instruction",  
  6. "query":"input",  
  7. "chosen":"chosen",  
  8. "rejected":"rejected"  
  9. }  
  10. },
复制代码
设置练习参数

第三阶段有两种练习方式:Reward Model + PPO 和 DPO,这两种方式我们都做一下实验。
计谋1:Reward Model + PPO

第一步:先练习Reward Model


  • • Finetuning method: 选择lora (由于是练习补丁,以是此处肯定要选择为lora)
  • • Stage: 选择Reward Modeling
  • • Dataset: 选择刚才上传 custom_rlhf_train_data.json
  • • Output dir:设置一个新的输出目次,比方:Qwen2_rm_output_demo1
练习完毕后,会在save下天生一个补丁。

第二步:通过PPO+第一步练习时的Reward Model,详细设置方法为:


  • • Finetuning method: 选择lora (由于是练习补丁,以是此处肯定要选择为lora)
  • • Stage: 选择Supervised Fine-tuning
  • • Dataset: 由于这一过程本质是SFT练习,以是数据集选择 custom_sft_train_data.json。
  • • Reward model: 在RLHF configurations中,设置为第一步练习的输出目次,即Qwen2_rm_output_demo1
  • • Output dir:设置一个新的输出目次,比方:Qwen2_ppo_output_demo1
练习完毕后,同样会在save下天生一个补丁。
第三步:将Lora补丁与原始模子归并导出


    • 切换到Chat标签下


    • Model path: 选择第二阶段的输出,即:saves/Qwen2-0.5B/full/Qwen2_sft_output_demo1


    • Checkpoint path: 选择上面第二步的输出,即 Qwen2_ppo_output_demo1


    • 点击Load model,待模子加载乐成后,测试模子


    • 切换至Export标签下


    • Export path:设置一个新的路径,比方Qwen2_final_output_demo1


    • 点击Export按钮

终极,会在LLaMa Factory中,天生导出的目次文件,该文件即为终极练习的模子。

计谋2:直接利用DPO练习

第一步:直接设置DPO练习参数


  • • Finetuning method: 选择lora
  • • Stage: 选择DPO
  • • Dataset: 选择刚才上传 custom_rlhf_train_data.json
  • • Output dir:设置一个新的输出目次,比方:Qwen2_dpo_output_demo1
练习完毕后,会在save下天生一个补丁。
第二步:将Lora补丁与第二阶段练习的模子输出归并导出。(该步调与上面计谋1的方法雷同,此处不再赘述)
至此,颠末大模子的三个阶段,我们完成了一个医疗大模子的练习。
附录

TeleChat-PTD数据集

如果涉及到从零开始练习大模子的话,预练习数据集可以参考相识 TeleChat-PTD 数据集。
数据集简介:


  • • TeleChat-PTD 是由电信星辰大模子TeleChat预练习语料中抽取出的的综合性大规模中文数据集。
  • • 数据集地点:https://modelscope.cn/datasets/TeleAI/TeleChat-PTD
  • • 数据集规模:2.7亿
  • • 数据集范例:纯中文文本构成
  • • 数据集泉源:网页、册本、官方媒体等
  • • 数据集巨细:原始巨细约1TB,压缩后480G,共189个文件。
数据集特点:


  • • 该数据集是以 JSON Lines 格式(.jsonl)存储的,每一行都是一个独立的 JSON 对象。
  • • 每个 JSON 对象包罗一个键为 "data" 的字段:{ "data": "文本内容" }
数据集内容预览:

内容小结



  • • LLaMA-Factory是一个开源的、可自界说的、可扩展的、可摆设的、可练习的大模子练习平台。
  • • LLaMA-Factory的练习流程分为3个阶段:预练习、监督微调、偏好改正。
  • • 练习过程的大抵步调为:
  • • 按照LLaMA-Factory官方README文档的数据格式,预备练习数据;
  • • 按照LlaMA-Factory官方README文档,在的dataset_info.json文件,注册自界说数据;
  • • 根据练习阶段设置练习参数,包罗模子名称、模子路径、练习方法、数据集、输出目次等;
  • • 预览练习定名无误后,启动练习。
  • • 如果启动练习失败,可以通过切换到启动LLaMA Factory的下令行检察日记信息排查标题。
零根本怎样学习AI大模子

领取方式在文末
为什么要学习大模子?

学习大模子课程的告急性在于它可以大概极大地促进个人在人工智能范畴的专业发展。大模子技能,如天然语言处理处罚和图像辨认,正在推动着人工智能的新发展阶段。通过学习大模子课程,可以把握操持和实现基于大模子的应用体系所需的根本原理和技能,从而提升自己在数据处理处罚、分析和决定订定方面的本领。别的,大模子技能在多个行业中的应用日益增长,把握这一技能将有助于进步就业竞争力,并为将来的创新创业提供结实的根本。
大模子典范应用场景

①AI+教导:智能讲授助手和自动评分体系使个性化教导成为大概。通过AI分析门生的学习数据,提供量身定制的学习方案,进步学习效果。
②AI+医疗:智能诊断体系和个性化医疗方案让医疗服务更加精准高效。AI可以分析医学影像,辅助医生举行早期诊断,同时根据患者数据订定个性化治疗方案。
③AI+金融:智能投顾和风险管理体系资助投资者做出更明智的决定,并实时监控监控金融市场,辨认潜伏风险。
④AI+制造:智能制造和自动化工厂进步了生产服从和质量。通过AI技能,工厂可以实现装备推测性维护,镌汰停机时间。
…
这些案例表明,学习大模子课程不光可以大概提升个人技能,还能为企业带来实际效益,推动行业创新发展。
学习资料领取

如果你对大模子感爱好,可以看看我整合而且整理成了一份AI大模子资料包,必要的小搭档文末哦,无偿分享!!!
加上后会一个个给各人发

部门资料展示

一、 AI大模子学习门路图

整个学习分为7个阶段


二、AI大模子实战案例

涵盖AI大模子的理论研究、技能实现、行业应用等多个方面。无论您是科研职员、工程师,照旧对AI大模子感爱好的爱好者,皆可用。



三、视频和册本PDF合集

从入门到进阶这里都有,跟着老师学习事半功倍。



四、LLM口试题



五、AI产物司理口试题



   👉[CSDN大礼包🎁:全网最全《LLM大模子入门+进阶学习资源包》免费分享(安全链接,放心点击)]👈
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表