同步 (#292)
This commit is contained in:
		
						commit
						1a73e293b0
					
				
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -6,6 +6,8 @@ data/ | |||||||
| pdf/ | pdf/ | ||||||
| .idea/ | .idea/ | ||||||
| logs/ | logs/ | ||||||
|  | .vscode/ | ||||||
|  | work_dirs/ | ||||||
| 
 | 
 | ||||||
| # *.jsonl | # *.jsonl | ||||||
| # *.json | # *.json | ||||||
|  | |||||||
							
								
								
									
										5
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
								
							| @ -1,5 +0,0 @@ | |||||||
| { |  | ||||||
|     "[python]": { |  | ||||||
|         "editor.defaultFormatter": null |  | ||||||
|     } |  | ||||||
| } |  | ||||||
							
								
								
									
										36
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										36
									
								
								README.md
									
									
									
									
									
								
							| @ -59,8 +59,9 @@ | |||||||
| |      ChatGLM3_6B      |   LoRA   |   [chatglm3_6b_lora_alpaca_e3.py](./xtuner_config/chatglm3_6b_lora_alpaca_e3.py)  | | | |      ChatGLM3_6B      |   LoRA   |   [chatglm3_6b_lora_alpaca_e3.py](./xtuner_config/chatglm3_6b_lora_alpaca_e3.py)  | | | ||||||
| | DeepSeek MoE_16B_chat |  QLoRA   |  [deepseek_moe_16b_chat_qlora_oasst1_e3.py](./xtuner_config/deepseek_moe_16b_chat_qlora_oasst1_e3.py)    | | | | DeepSeek MoE_16B_chat |  QLoRA   |  [deepseek_moe_16b_chat_qlora_oasst1_e3.py](./xtuner_config/deepseek_moe_16b_chat_qlora_oasst1_e3.py)    | | | ||||||
| | Mixtral 8x7B_instruct |  QLoRA   | [mixtral_8x7b_instruct_qlora_oasst1_e3.py](./xtuner_config/mixtral_8x7b_instruct_qlora_oasst1_e3.py)    | | | | Mixtral 8x7B_instruct |  QLoRA   | [mixtral_8x7b_instruct_qlora_oasst1_e3.py](./xtuner_config/mixtral_8x7b_instruct_qlora_oasst1_e3.py)    | | | ||||||
| | LLaMA3_8b_instruct    |  QLoRA   | [aiwei_llama3_8b_instruct_qlora_e3.py](./xtuner_config/aiwei_llama3_8b_instruct_qlora_e3.py) | [OpenXLab](https://openxlab.org.cn/models/detail/ajupyter/EmoLLM-LLaMA3_8b_instruct_aiwei/tree/main), [ModelScope](https://modelscope.cn/models/aJupyter/EmoLLM-LLaMA3_8b_instruct_aiwei/files) | | | LLaMA3_8B_instruct    |  QLoRA   | [aiwei_llama3_8b_instruct_qlora_e3.py](./xtuner_config/aiwei_llama3_8b_instruct_qlora_e3.py) | [OpenXLab](https://openxlab.org.cn/models/detail/ajupyter/EmoLLM-LLaMA3_8b_instruct_aiwei/tree/main), [ModelScope](https://modelscope.cn/models/aJupyter/EmoLLM-LLaMA3_8b_instruct_aiwei/files) | | ||||||
| | LLaMA3_8b_instruct    |  QLoRA   | [llama3_8b_instruct_qlora_alpaca_e3_M_ruozhi_scM.py](./xtuner_config/llama3_8b_instruct_qlora_alpaca_e3_M_ruozhi_scM.py)    |[OpenXLab](https://openxlab.org.cn/models/detail/chg0901/EmoLLM-Llama3-8B-Instruct3.0), [ModelScope](https://modelscope.cn/models/chg0901/EmoLLM-Llama3-8B-Instruct3.0/summary) | | | LLaMA3_8B_instruct    |  QLoRA   | [llama3_8b_instruct_qlora_alpaca_e3_M_ruozhi_scM.py](./xtuner_config/llama3_8b_instruct_qlora_alpaca_e3_M_ruozhi_scM.py)    |[OpenXLab](https://openxlab.org.cn/models/detail/chg0901/EmoLLM-Llama3-8B-Instruct3.0), [ModelScope](https://modelscope.cn/models/chg0901/EmoLLM-Llama3-8B-Instruct3.0/summary) | | ||||||
|  | | Qwen2-7B-Instruct    |  LoRA   | [Qwen2-7B-Instruct_lora.py](./xtuner_config/Qwen2-7B-Instruct_lora.py)    |[ModelScope](https://www.modelscope.cn/models/aJupyter/EmoLLM_Qwen2-7B-Instruct_lora/) | | ||||||
| |          ……           |    ……    |                                                    ……                                                    | …… | | |          ……           |    ……    |                                                    ……                                                    | …… | | ||||||
| 
 | 
 | ||||||
| </div> | </div> | ||||||
| @ -100,6 +101,8 @@ | |||||||
| </table> | </table> | ||||||
| 
 | 
 | ||||||
| ## 🎇最近更新 | ## 🎇最近更新 | ||||||
|  | - 【2024.09.14】基于Qwen2-7B-Instruct模型的Lora微调模型开源,微调配置文件地址:[Qwen2-7B-Instruct_lora.py](./xtuner_config/Qwen2-7B-Instruct_lora.py) ,模型权重链接:[ModelScope](https://www.modelscope.cn/models/aJupyter/EmoLLM_Qwen2-7B-Instruct_lora/) | ||||||
|  | - 【2024.08】基于GLM4-9B-chat微调Lora模型开源(基于LLaMA-Factory),详情见[微调教程](./doc/GLM-4-9B-chat%20Lora%20微调(llama-factory).md) ,模型权重链接:[ModelScope](https://www.modelscope.cn/models/wwewwt/EmoLLM-glm-4-9b-chat/summary) | ||||||
| - 【2024.07.16】欢迎大家体验 EmoLLM V3.0 ,该模型是基于InternLM2.5-7B-Chat模型的全量微调,微调配置文件地址:[internlm2_5_chat_7b_full.py](./xtuner_config/internlm2_5_chat_7b_full.py) ,模型权重链接:[OpenXLab](https://openxlab.org.cn/models/detail/chg0901/EmoLLM_V3.0), [ModelScope](https://modelscope.cn/models/chg0901/EmoLLMV3.0) ,WebDemo地址: [OpenXLab apps](https://openxlab.org.cn/apps/detail/chg0901/EmoLLMV3.0), [配套全量微调知乎教程](https://zhuanlan.zhihu.com/p/708931911)。 | - 【2024.07.16】欢迎大家体验 EmoLLM V3.0 ,该模型是基于InternLM2.5-7B-Chat模型的全量微调,微调配置文件地址:[internlm2_5_chat_7b_full.py](./xtuner_config/internlm2_5_chat_7b_full.py) ,模型权重链接:[OpenXLab](https://openxlab.org.cn/models/detail/chg0901/EmoLLM_V3.0), [ModelScope](https://modelscope.cn/models/chg0901/EmoLLMV3.0) ,WebDemo地址: [OpenXLab apps](https://openxlab.org.cn/apps/detail/chg0901/EmoLLMV3.0), [配套全量微调知乎教程](https://zhuanlan.zhihu.com/p/708931911)。 | ||||||
| - 【2024.07】欢迎大家使用稳定版 EmoLLM V2.0 进行日常使用和学术研究,模型权重链接:[OpenXLab](https://openxlab.org.cn/models/detail/ajupyter/EmoLLM_internlm2_7b_full/tree/main)。 | - 【2024.07】欢迎大家使用稳定版 EmoLLM V2.0 进行日常使用和学术研究,模型权重链接:[OpenXLab](https://openxlab.org.cn/models/detail/ajupyter/EmoLLM_internlm2_7b_full/tree/main)。 | ||||||
| - 【2024.07】新增基于InternLM2_5_7B_chat[微调配置](./xtuner_config/internlm2_5_chat_7b_qlora_oasst1_e3.py)、模型文件发布在 [ModelScope](https://www.modelscope.cn/models/z342994309/emollm_interlm2_5/)。 | - 【2024.07】新增基于InternLM2_5_7B_chat[微调配置](./xtuner_config/internlm2_5_chat_7b_qlora_oasst1_e3.py)、模型文件发布在 [ModelScope](https://www.modelscope.cn/models/z342994309/emollm_interlm2_5/)。 | ||||||
| @ -117,15 +120,14 @@ | |||||||
| - 【2024.03.11】 **EmoLLM V2.0 相比 EmoLLM V1.0 全面提升,已超越 Role-playing ChatGPT 在心理咨询任务上的能力!**[点击体验EmoLLM V2.0](https://openxlab.org.cn/apps/detail/Farewell1/EmoLLMV2.0),更新[数据集统计及详细信息](./datasets/)、[路线图](./assets/Roadmap_ZH.png) | - 【2024.03.11】 **EmoLLM V2.0 相比 EmoLLM V1.0 全面提升,已超越 Role-playing ChatGPT 在心理咨询任务上的能力!**[点击体验EmoLLM V2.0](https://openxlab.org.cn/apps/detail/Farewell1/EmoLLMV2.0),更新[数据集统计及详细信息](./datasets/)、[路线图](./assets/Roadmap_ZH.png) | ||||||
| - 【2024.03.09】 新增并发功能加速 [QA 对生成](./scripts/qa_generation/)、[RAG pipeline](./rag/) | - 【2024.03.09】 新增并发功能加速 [QA 对生成](./scripts/qa_generation/)、[RAG pipeline](./rag/) | ||||||
| - 【2024.03.03】 [基于InternLM2-7B-chat全量微调版本EmoLLM V2.0开源](https://openxlab.org.cn/models/detail/ajupyter/EmoLLM_internlm2_7b_full),需要两块A100*80G,更新专业评估,详见[evaluate](./evaluate/),更新基于PaddleOCR的PDF转txt工具脚本,详见[scripts](./scripts/) | - 【2024.03.03】 [基于InternLM2-7B-chat全量微调版本EmoLLM V2.0开源](https://openxlab.org.cn/models/detail/ajupyter/EmoLLM_internlm2_7b_full),需要两块A100*80G,更新专业评估,详见[evaluate](./evaluate/),更新基于PaddleOCR的PDF转txt工具脚本,详见[scripts](./scripts/) | ||||||
|  | 
 | ||||||
|  | <details> | ||||||
|  | <summary>查看更多</summary> | ||||||
| - 【2024.02.29】更新客观评估计算,详见[evaluate](./evaluate/),更新一系列数据集,详见[datasets](./datasets/) | - 【2024.02.29】更新客观评估计算,详见[evaluate](./evaluate/),更新一系列数据集,详见[datasets](./datasets/) | ||||||
| - 【2024.02.27】更新英文readme和一系列数据集(舔狗和单轮对话) | - 【2024.02.27】更新英文readme和一系列数据集(舔狗和单轮对话) | ||||||
| - 【2024.02.23】推出基于InternLM2_7B_chat_qlora的 `温柔御姐心理医生艾薇`,[点击获取模型权重](https://openxlab.org.cn/models/detail/ajupyter/EmoLLM_aiwei),[配置文件](xtuner_config/aiwei-internlm2_chat_7b_qlora.py),[在线体验链接](https://openxlab.org.cn/apps/detail/ajupyter/EmoLLM-aiwei) | - 【2024.02.23】推出基于InternLM2_7B_chat_qlora的 `温柔御姐心理医生艾薇`,[点击获取模型权重](https://openxlab.org.cn/models/detail/ajupyter/EmoLLM_aiwei),[配置文件](xtuner_config/aiwei-internlm2_chat_7b_qlora.py),[在线体验链接](https://openxlab.org.cn/apps/detail/ajupyter/EmoLLM-aiwei) | ||||||
| - 【2024.02.23】更新[若干微调配置](/xtuner_config/),新增 [data_pro.json](/datasets/data_pro.json)(数量更多、场景更全、更丰富)和 [aiwei.json](/datasets/aiwei.json)(温柔御姐角色扮演专用,带有Emoji表情),即将推出 `温柔御姐心理医生艾薇` | - 【2024.02.23】更新[若干微调配置](/xtuner_config/),新增 [data_pro.json](/datasets/data_pro.json)(数量更多、场景更全、更丰富)和 [aiwei.json](/datasets/aiwei.json)(温柔御姐角色扮演专用,带有Emoji表情),即将推出 `温柔御姐心理医生艾薇` | ||||||
| - 【2024.02.18】 [基于Qwen1_5-0_5B-Chat全量微调版本开源](https://www.modelscope.cn/models/aJupyter/EmoLLM_Qwen1_5-0_5B-Chat_full_sft/summary),算力有限的道友可以玩起来~ | - 【2024.02.18】 [基于Qwen1_5-0_5B-Chat全量微调版本开源](https://www.modelscope.cn/models/aJupyter/EmoLLM_Qwen1_5-0_5B-Chat_full_sft/summary),算力有限的道友可以玩起来~ | ||||||
| 
 |  | ||||||
| <details> |  | ||||||
| <summary>查看更多</summary> |  | ||||||
| 
 |  | ||||||
| - 【2024.02.06】 EmoLLM在[**Openxlab** ](https://openxlab.org.cn/models/detail/jujimeizuo/EmoLLM_Model) 平台下载量高达18.7k,欢迎大家体验! | - 【2024.02.06】 EmoLLM在[**Openxlab** ](https://openxlab.org.cn/models/detail/jujimeizuo/EmoLLM_Model) 平台下载量高达18.7k,欢迎大家体验! | ||||||
| 
 | 
 | ||||||
| <p align="center">  | <p align="center">  | ||||||
| @ -185,7 +187,7 @@ | |||||||
|           - [使用指南](#使用指南) |           - [使用指南](#使用指南) | ||||||
|     - [🍪快速体验](#快速体验) |     - [🍪快速体验](#快速体验) | ||||||
|     - [📌数据构建](#数据构建) |     - [📌数据构建](#数据构建) | ||||||
|     - [🎨微调指南](#微调指南) |     - [🎨增量预训练、微调指南](#增量预训练微调指南) | ||||||
|     - [🔧部署指南](#部署指南) |     - [🔧部署指南](#部署指南) | ||||||
|     - [⚙RAG(检索增强生成)](#rag检索增强生成) |     - [⚙RAG(检索增强生成)](#rag检索增强生成) | ||||||
|     - [🎓评测指南](#评测指南) |     - [🎓评测指南](#评测指南) | ||||||
| @ -204,6 +206,7 @@ | |||||||
| ###### 开发前的配置要求 | ###### 开发前的配置要求 | ||||||
| 
 | 
 | ||||||
| - 硬件:A100 40G(仅针对InternLM2_7B_chat+qlora微调+deepspeed zero2优化) | - 硬件:A100 40G(仅针对InternLM2_7B_chat+qlora微调+deepspeed zero2优化) | ||||||
|  | - todo:发布更多硬件消耗细节 | ||||||
| 
 | 
 | ||||||
| ###### 使用指南 | ###### 使用指南 | ||||||
| 
 | 
 | ||||||
| @ -216,7 +219,7 @@ git clone https://github.com/SmartFlowAI/EmoLLM.git | |||||||
| 2. 依次阅读或者选择感兴趣的部分阅读: | 2. 依次阅读或者选择感兴趣的部分阅读: | ||||||
|    - [快速体验](#快速体验) |    - [快速体验](#快速体验) | ||||||
|    - [数据构建](#数据构建) |    - [数据构建](#数据构建) | ||||||
|    - [微调指南](#微调指南) |    - [增量预训练、微调指南](#增量预训练微调指南) | ||||||
|    - [部署指南](#部署指南) |    - [部署指南](#部署指南) | ||||||
|    - [RAG](#rag检索增强生成) |    - [RAG](#rag检索增强生成) | ||||||
|    - [评测指南](#评测指南) |    - [评测指南](#评测指南) | ||||||
| @ -230,19 +233,21 @@ git clone https://github.com/SmartFlowAI/EmoLLM.git | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| ### 📌数据构建 | ### 📌数据构建 | ||||||
| 
 |  | ||||||
| - 请阅读[数据构建指南](generate_data/tutorial.md)查阅 | - 请阅读[数据构建指南](generate_data/tutorial.md)查阅 | ||||||
| 
 |  | ||||||
| - 微调用到的数据集见[datasets](datasets/data.json) | - 微调用到的数据集见[datasets](datasets/data.json) | ||||||
| 
 | 
 | ||||||
| ### 🎨微调指南 | ### 🎨增量预训练、微调指南 | ||||||
| 
 | - 增量预训练详见[增量预训练指南](./xtuner_config/pt/README.md) | ||||||
| 详见[微调指南](xtuner_config/README.md) | - 【基于xtuner】全量、LoRA、QLoRA微调详见[微调指南](./xtuner_config/README.md) | ||||||
|  | - 【基于ms-swift】全量、LoRA、QLoRA微调详见[微调指南](./swift/README.md) | ||||||
|  | - 【基于LLaMA-Factory】全量、LoRA、QLoRA微调详见[微调指南](./doc/GLM-4-9B-chat%20Lora%20微调(llama-factory).md) | ||||||
|  | - todo:待更新DPO训练 | ||||||
| 
 | 
 | ||||||
| ### 🔧部署指南 | ### 🔧部署指南 | ||||||
| 
 | 
 | ||||||
| - Demo部署:详见[部署指南](demo/README.md) | - Demo部署:详见[部署指南](demo/README.md) | ||||||
| - 基于[LMDeploy](https://github.com/InternLM/lmdeploy/)的量化部署:详见[deploy](./deploy/lmdeploy.md) | - 基于[LMDeploy](https://github.com/InternLM/lmdeploy/)的量化部署:详见[deploy](./deploy/lmdeploy.md) | ||||||
|  | - todo: 基于VLLM部署指南 | ||||||
| 
 | 
 | ||||||
| ### ⚙RAG(检索增强生成) | ### ⚙RAG(检索增强生成) | ||||||
| 
 | 
 | ||||||
| @ -257,13 +262,14 @@ git clone https://github.com/SmartFlowAI/EmoLLM.git | |||||||
| 
 | 
 | ||||||
| ### 使用到的框架 | ### 使用到的框架 | ||||||
| 
 | 
 | ||||||
| - [Xtuner](https://github.com/InternLM/xtuner):用于微调 | - [xtuner](https://github.com/InternLM/xtuner):用于微调 | ||||||
| - [Transformers](https://github.com/huggingface/transformers) | - [Transformers](https://github.com/huggingface/transformers) | ||||||
| - [Pytorch](https://pytorch.org/) | - [Pytorch](https://pytorch.org/) | ||||||
| - [LMDeploy](https://github.com/InternLM/lmdeploy/):用于量化部署 | - [LMDeploy](https://github.com/InternLM/lmdeploy/):用于量化部署 | ||||||
| - [Stremlit](https://streamlit.io/):用于构建Demo | - [Stremlit](https://streamlit.io/):用于构建Demo | ||||||
| - [DeepSpeed](https://github.com/microsoft/DeepSpeed):并行训练 | - [DeepSpeed](https://github.com/microsoft/DeepSpeed):并行训练 | ||||||
| - … | - [LLaMA-Factory](https://github.com/hiyouga/LLaMA-Factory/blob/main):训练框架 | ||||||
|  | - [ms-swift](https://github.com/modelscope/ms-swift):训练框架 | ||||||
| 
 | 
 | ||||||
| #### 如何参与本项目 | #### 如何参与本项目 | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										40
									
								
								README_EN.md
									
									
									
									
									
								
							
							
						
						
									
										40
									
								
								README_EN.md
									
									
									
									
									
								
							| @ -63,6 +63,7 @@ | |||||||
| | Mixtral 8x7B_instruct |  QLoRA   | [mixtral_8x7b_instruct_qlora_oasst1_e3.py](./xtuner_config/mixtral_8x7b_instruct_qlora_oasst1_e3.py)    | | | | Mixtral 8x7B_instruct |  QLoRA   | [mixtral_8x7b_instruct_qlora_oasst1_e3.py](./xtuner_config/mixtral_8x7b_instruct_qlora_oasst1_e3.py)    | | | ||||||
| | LLaMA3_8b_instruct    |  QLoRA   | [aiwei_llama3_8b_instruct_qlora_e3.py](./xtuner_config/aiwei_llama3_8b_instruct_qlora_e3.py) | [OpenXLab](https://openxlab.org.cn/models/detail/ajupyter/EmoLLM-LLaMA3_8b_instruct_aiwei/tree/main), [ModelScope](https://modelscope.cn/models/aJupyter/EmoLLM-LLaMA3_8b_instruct_aiwei/files) | | | LLaMA3_8b_instruct    |  QLoRA   | [aiwei_llama3_8b_instruct_qlora_e3.py](./xtuner_config/aiwei_llama3_8b_instruct_qlora_e3.py) | [OpenXLab](https://openxlab.org.cn/models/detail/ajupyter/EmoLLM-LLaMA3_8b_instruct_aiwei/tree/main), [ModelScope](https://modelscope.cn/models/aJupyter/EmoLLM-LLaMA3_8b_instruct_aiwei/files) | | ||||||
| | LLaMA3_8b_instruct    |  QLoRA   | [llama3_8b_instruct_qlora_alpaca_e3_M_ruozhi_scM.py](./xtuner_config/llama3_8b_instruct_qlora_alpaca_e3_M_ruozhi_scM.py)    |[OpenXLab](https://openxlab.org.cn/models/detail/chg0901/EmoLLM-Llama3-8B-Instruct3.0), [ModelScope](https://modelscope.cn/models/chg0901/EmoLLM-Llama3-8B-Instruct3.0/summary) | | | LLaMA3_8b_instruct    |  QLoRA   | [llama3_8b_instruct_qlora_alpaca_e3_M_ruozhi_scM.py](./xtuner_config/llama3_8b_instruct_qlora_alpaca_e3_M_ruozhi_scM.py)    |[OpenXLab](https://openxlab.org.cn/models/detail/chg0901/EmoLLM-Llama3-8B-Instruct3.0), [ModelScope](https://modelscope.cn/models/chg0901/EmoLLM-Llama3-8B-Instruct3.0/summary) | | ||||||
|  | | Qwen2-7B-Instruct    |  LoRA   | [Qwen2-7B-Instruct_lora.py](./xtuner_config/Qwen2-7B-Instruct_lora.py)    |[ModelScope](https://www.modelscope.cn/models/aJupyter/EmoLLM_Qwen2-7B-Instruct_lora/) | | ||||||
| |          ……           |    ……    |                                                    ……                                                    | …… | | |          ……           |    ……    |                                                    ……                                                    | …… | | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @ -104,11 +105,13 @@ The Model aims to fully understand and promote the mental health of individuals, | |||||||
| </table> | </table> | ||||||
| 
 | 
 | ||||||
| ## Recent Updates | ## Recent Updates | ||||||
| - 【2024.07.16】 Welcome everyone to experience EmoLLM V3.0. This model is a fully fine-tuned version based on the InternLM2.5-7B-Chat model. The fine-tuning configuration file can be found at: [internlm2_5_chat_7b_full.py](./xtuner_config/internlm2_5_chat_7b_full.py). Model weights are available at: [OpenXLab](https://openxlab.org.cn/models/detail/chg0901/EmoLLM_V3.0), [ModelScope](https://modelscope.cn/models/chg0901/EmoLLMV3.0). WebDemo is available at: [OpenXLab apps](https://openxlab.org.cn/apps/detail/chg0901/EmoLLMV3.0), [Full fine-tuning tutorial on Zhihu](https://zhuanlan.zhihu.com/p/708931911). | - [2024.09.14] The Lora fine-tuned model based on the Qwen2-7B-Instruct model is open-sourced. Fine-tuning configuration file address: [Qwen2-7B-Instruct_lora.py](./xtuner_config/Qwen2-7B-Instruct_lora.py), model weight link: [ModelScope](https://www.modelscope.cn/models/aJupyter/EmoLLM_Qwen2-7B-Instruct_lora/) | ||||||
| - 【2024.07】Welcome to use the stable version of EmoLLM V2.0 for daily use and academic research. Model weight link: [OpenXLab](https://openxlab.org.cn/models/detail/ajupyter/EmoLLM_internlm2_7b_full/tree/main). | - [2024.08] The Lora fine-tuned model based on GLM4-9B-chat is open-sourced (based on Llama-factory). For details, see [Fine-tuning Tutorial](./doc/GLM-4-9B-chat%20Lora%20微调(llama-factory).md), model weight link: [ModelScope](https://www.modelscope.cn/models/wwewwt/EmoLLM-glm-4-9b-chat/summary) | ||||||
| - 【2024.07】Added InternLM2_5_7B_chat[fine-tuning configuration](./xtuner_config/internlm2_5_chat_7b_qlora_oasst1_e3.py)、model file [ModelScope](https://www.modelscope.cn/models/z342994309/emollm_interlm2_5/)。 | - [2024.07.16] Welcome everyone to experience EmoLLM V3.0. This model is a fully fine-tuned version based on the InternLM2.5-7B-Chat model. The fine-tuning configuration file can be found at: [internlm2_5_chat_7b_full.py](./xtuner_config/internlm2_5_chat_7b_full.py). Model weights are available at: [OpenXLab](https://openxlab.org.cn/models/detail/chg0901/EmoLLM_V3.0), [ModelScope](https://modelscope.cn/models/chg0901/EmoLLMV3.0). WebDemo is available at: [OpenXLab apps](https://openxlab.org.cn/apps/detail/chg0901/EmoLLMV3.0), [Full fine-tuning tutorial on Zhihu](https://zhuanlan.zhihu.com/p/708931911). | ||||||
| - 【2024.06】 Added [LLaMA-Factory](https://github.com/hiyouga/LLaMA-Factory)[GLM4-9B-chat fine-tuning guide](./doc/GLM-4-9B-chat%20Lora%20微调(llama-factory).md), added [swift-based fine-tuning guide](./swift/), the paper [ESC-Eval: Evaluating Emotion Support Conversations in Large Language Models](https://arxiv.org/abs/2406.14952) cited EmoLLM and EmoLLM achieved good results. | - [2024.07] Welcome to use the stable version of EmoLLM V2.0 for daily use and academic research. Model weight link: [OpenXLab](https://openxlab.org.cn/models/detail/ajupyter/EmoLLM_internlm2_7b_full/tree/main). | ||||||
| - 【2024.05.28】The multi-turn dialogue dataset **CPsyCunD** and **professional evaluation method** used by EmoLLM have been released. For details, please see the 2024 ACL findings[《CPsyCoun: A Report-based Multi-turn Dialogue Reconstruction and Evaluation Framework for Chinese Psychological Counseling》](https://arxiv.org/abs/2405.16433)! | - [2024.07] Added InternLM2_5_7B_chat[fine-tuning configuration](./xtuner_config/internlm2_5_chat_7b_qlora_oasst1_e3.py)、model file [ModelScope](https://www.modelscope.cn/models/z342994309/emollm_interlm2_5/)。 | ||||||
|  | - [2024.06] Added [LLaMA-Factory](https://github.com/hiyouga/LLaMA-Factory)[GLM4-9B-chat fine-tuning guide](./doc/GLM-4-9B-chat%20Lora%20微调(llama-factory).md), added [swift-based fine-tuning guide](./swift/), the paper [ESC-Eval: Evaluating Emotion Support Conversations in Large Language Models](https://arxiv.org/abs/2406.14952) cited EmoLLM and EmoLLM achieved good results. | ||||||
|  | - [2024.05.28] The multi-turn dialogue dataset **CPsyCunD** and **professional evaluation method** used by EmoLLM have been released. For details, please see the 2024 ACL findings[《CPsyCoun: A Report-based Multi-turn Dialogue Reconstruction and Evaluation Framework for Chinese Psychological Counseling》](https://arxiv.org/abs/2405.16433)! | ||||||
| - [2024.05.08] EmoLLM**Daddy-like BF V0.1** is public now in [1. **Baidu AppBuilder**](https://appbuilder.baidu.com/s/4cLyw) and [2. **OpenXLab**](https://openxlab.org.cn/apps/detail/chg0901/EmoLLM3.0_Gradio_Llama3-8B-Instruct3.0), welcome to like and add it to your collections! | - [2024.05.08] EmoLLM**Daddy-like BF V0.1** is public now in [1. **Baidu AppBuilder**](https://appbuilder.baidu.com/s/4cLyw) and [2. **OpenXLab**](https://openxlab.org.cn/apps/detail/chg0901/EmoLLM3.0_Gradio_Llama3-8B-Instruct3.0), welcome to like and add it to your collections! | ||||||
| - [2024.05.07] [Incremental Pre-training Guide](xtuner_config/pt/README.md) | - [2024.05.07] [Incremental Pre-training Guide](xtuner_config/pt/README.md) | ||||||
| - [2024.05.04] [EmoLLM3.0 OpenXLab Demo](https://st-app-center-006861-9746-jlroxvg.openxlab.space/) based on LLaMA3_8b_instruct is available now ([restart link]((https://openxlab.org.cn/apps/detail/chg0901/EmoLLM-Llama3-8B-Instruct3.0))), [LLAMA3 fine-tuning guide](xtuner_config/README_llama3_8b_instruct_qlora_alpaca_e3_M.md) is updated, LLaMA3_8b_instruct-8B QLoRA fine-tuning model EmoLLM3.0 weights are released on [**OpenXLab**](https://openxlab.org.cn/models/detail/chg0901/EmoLLM-Llama3-8B-Instruct3.0) and [**ModelScope**](https://modelscope.cn/models/chg0901/EmoLLM-Llama3-8B-Instruct3.0/summary) platforms | - [2024.05.04] [EmoLLM3.0 OpenXLab Demo](https://st-app-center-006861-9746-jlroxvg.openxlab.space/) based on LLaMA3_8b_instruct is available now ([restart link]((https://openxlab.org.cn/apps/detail/chg0901/EmoLLM-Llama3-8B-Instruct3.0))), [LLAMA3 fine-tuning guide](xtuner_config/README_llama3_8b_instruct_qlora_alpaca_e3_M.md) is updated, LLaMA3_8b_instruct-8B QLoRA fine-tuning model EmoLLM3.0 weights are released on [**OpenXLab**](https://openxlab.org.cn/models/detail/chg0901/EmoLLM-Llama3-8B-Instruct3.0) and [**ModelScope**](https://modelscope.cn/models/chg0901/EmoLLM-Llama3-8B-Instruct3.0/summary) platforms | ||||||
| @ -122,6 +125,10 @@ The Model aims to fully understand and promote the mental health of individuals, | |||||||
| - [2024.03.11] **EmoLLM V2.0 is greatly improved in all scores compared to EmoLLM V1.0. Surpasses the performance of Role-playing ChatGPT on counseling tasks!** [Click to experience EmoLLM V2.0](https://openxlab.org.cn/apps/detail/Farewell1/EmoLLMV2.0), update [dataset statistics and details](./datasets/), [Roadmap](./assets/Roadmap_ZH.png) | - [2024.03.11] **EmoLLM V2.0 is greatly improved in all scores compared to EmoLLM V1.0. Surpasses the performance of Role-playing ChatGPT on counseling tasks!** [Click to experience EmoLLM V2.0](https://openxlab.org.cn/apps/detail/Farewell1/EmoLLMV2.0), update [dataset statistics and details](./datasets/), [Roadmap](./assets/Roadmap_ZH.png) | ||||||
| - [2024.03.09] Add concurrency acceleration [QA pair generation](./scripts/qa_generation/), [RAG pipeline](./rag/) | - [2024.03.09] Add concurrency acceleration [QA pair generation](./scripts/qa_generation/), [RAG pipeline](./rag/) | ||||||
| - [2024.03.03] [Based on InternLM2-7B-chat full fine-tuned version EmoLLM V2.0 open sourced](https://openxlab.org.cn/models/detail/ajupyter/EmoLLM_internlm2_7b_full), need two A100*80G, update professional evaluation, see [evaluate](./evaluate/), update PaddleOCR-based PDF to txt tool scripts, see [scripts](./scripts/). | - [2024.03.03] [Based on InternLM2-7B-chat full fine-tuned version EmoLLM V2.0 open sourced](https://openxlab.org.cn/models/detail/ajupyter/EmoLLM_internlm2_7b_full), need two A100*80G, update professional evaluation, see [evaluate](./evaluate/), update PaddleOCR-based PDF to txt tool scripts, see [scripts](./scripts/). | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <details> | ||||||
|  | <summary>View More</summary> | ||||||
| - [2024.02.29] Updated objective assessment calculations, see [evaluate](./evaluate/) for details. A series of datasets have also been updated, see [datasets](./datasets/) for details. | - [2024.02.29] Updated objective assessment calculations, see [evaluate](./evaluate/) for details. A series of datasets have also been updated, see [datasets](./datasets/) for details. | ||||||
| - [2024.02.27] Updated English README and a series of datasets (licking dogs and one-round dialogue) | - [2024.02.27] Updated English README and a series of datasets (licking dogs and one-round dialogue) | ||||||
| - [2024.02.23]The "Gentle Lady Psychologist Ai Wei" based on InternLM2_7B_chat_qlora was launched. [Click here to obtain the model weights](https://openxlab.org.cn/models/detail/ajupyter/EmoLLM_aiwei), [configuration file](xtuner_config/aiwei-internlm2_chat_7b_qlora.py), [online experience link](https://openxlab.org.cn/apps/detail/ajupyter/EmoLLM-aiwei) | - [2024.02.23]The "Gentle Lady Psychologist Ai Wei" based on InternLM2_7B_chat_qlora was launched. [Click here to obtain the model weights](https://openxlab.org.cn/models/detail/ajupyter/EmoLLM_aiwei), [configuration file](xtuner_config/aiwei-internlm2_chat_7b_qlora.py), [online experience link](https://openxlab.org.cn/apps/detail/ajupyter/EmoLLM-aiwei) | ||||||
| @ -130,10 +137,6 @@ The Model aims to fully understand and promote the mental health of individuals, | |||||||
| 
 | 
 | ||||||
| - [2024.02.18] The full fine-tuned version based on Qwen1_5-0_5B-Chat has been [open-sourced](https://www.modelscope.cn/models/aJupyter/EmoLLM_Qwen1_5-0_5B-Chat_full_sft/summary). Friends with limited computational resources can now dive in and explore it. | - [2024.02.18] The full fine-tuned version based on Qwen1_5-0_5B-Chat has been [open-sourced](https://www.modelscope.cn/models/aJupyter/EmoLLM_Qwen1_5-0_5B-Chat_full_sft/summary). Friends with limited computational resources can now dive in and explore it. | ||||||
|    |    | ||||||
| 
 |  | ||||||
| <details> |  | ||||||
| <summary>View More</summary> |  | ||||||
| 
 |  | ||||||
| - [2024.02.06] [Open-sourced based on the Qwen1_5-0_5B-Chat full-scale fine-tuned version](https://www.modelscope.cn/models/aJupyter/EmoLLM_Qwen1_5-0_5B-Chat_full_sft/summary), friends with limited computing power can start experimenting~ | - [2024.02.06] [Open-sourced based on the Qwen1_5-0_5B-Chat full-scale fine-tuned version](https://www.modelscope.cn/models/aJupyter/EmoLLM_Qwen1_5-0_5B-Chat_full_sft/summary), friends with limited computing power can start experimenting~ | ||||||
| 
 | 
 | ||||||
| <p align="center">  | <p align="center">  | ||||||
| @ -187,7 +190,7 @@ The Model aims to fully understand and promote the mental health of individuals, | |||||||
|           - [User Guide](#user-guide) |           - [User Guide](#user-guide) | ||||||
|     - [🍪Quick start](#quick-start) |     - [🍪Quick start](#quick-start) | ||||||
|     - [📌Data Construction](#data-construction) |     - [📌Data Construction](#data-construction) | ||||||
|     - [🎨Fine-tuning Guide](#fine-tuning-guide) |     - [🎨Incremental Pre-training and Fine-tuning Guide](#incremental-pre-training-and-fine-tuning-guide) | ||||||
|     - [🔧Deployment Guide](#deployment-guide) |     - [🔧Deployment Guide](#deployment-guide) | ||||||
|     - [⚙RAG (Retrieval Augmented Generation)](#rag-retrieval-augmented-generation) |     - [⚙RAG (Retrieval Augmented Generation)](#rag-retrieval-augmented-generation) | ||||||
|     - [🎓Evaluation Guide](#evaluation-guide) |     - [🎓Evaluation Guide](#evaluation-guide) | ||||||
| @ -206,6 +209,7 @@ The Model aims to fully understand and promote the mental health of individuals, | |||||||
| ###### Pre-development Configuration Requirements. | ###### Pre-development Configuration Requirements. | ||||||
| 
 | 
 | ||||||
| - A100 40G (specifically for InternLM2_7B_chat + qlora fine-tuning + deepspeed zero2 optimization) | - A100 40G (specifically for InternLM2_7B_chat + qlora fine-tuning + deepspeed zero2 optimization) | ||||||
|  | - **[TODO]**: Publish more details about hardware consumption. | ||||||
| 
 | 
 | ||||||
| ###### User Guide | ###### User Guide | ||||||
| 
 | 
 | ||||||
| @ -218,7 +222,7 @@ git clone https://github.com/SmartFlowAI/EmoLLM.git | |||||||
| 1. Read in sequence or read sections you're interested in: | 1. Read in sequence or read sections you're interested in: | ||||||
|    - [Quick Start](#quick-start) |    - [Quick Start](#quick-start) | ||||||
|    - [Data Construction](#data-construction) |    - [Data Construction](#data-construction) | ||||||
|    - [Fine-tuning Guide](#fine-tuning-guide) |    - [Fine-tuning Guide](#incremental-pre-training-and-fine-tuning-guide) | ||||||
|    - [Deployment Guide](#deployment-guide) |    - [Deployment Guide](#deployment-guide) | ||||||
|    - [RAG](#rag-retrieval-augmented-generation) |    - [RAG](#rag-retrieval-augmented-generation) | ||||||
|    - [Evaluation Guide](#evaluation-guide) |    - [Evaluation Guide](#evaluation-guide) | ||||||
| @ -230,19 +234,22 @@ git clone https://github.com/SmartFlowAI/EmoLLM.git | |||||||
| - Quick coding: [Baby EmoLLM](quick_start/Baby_EmoLLM.ipynb) | - Quick coding: [Baby EmoLLM](quick_start/Baby_EmoLLM.ipynb) | ||||||
| 
 | 
 | ||||||
| ### 📌Data Construction | ### 📌Data Construction | ||||||
| 
 |  | ||||||
| - Please read the [Data Construction Guide ](generate_data/tutorial_EN.md) for reference. | - Please read the [Data Construction Guide ](generate_data/tutorial_EN.md) for reference. | ||||||
| 
 |  | ||||||
| - The dataset used for this fine-tuning can be found at [datasets](datasets/data.json) | - The dataset used for this fine-tuning can be found at [datasets](datasets/data.json) | ||||||
| 
 | 
 | ||||||
| ### 🎨Fine-tuning Guide | ### 🎨Incremental Pre-training and Fine-tuning Guide | ||||||
|  | - For details on incremental pre-training, see [Incremental Pre-training Guide](./xtuner_config/pt/README.md). | ||||||
|  | - For full-scale, LoRA, and QLoRA fine-tuning based on **xtuner**, see [Fine-tuning Guide](./xtuner_config/README_EN.md). | ||||||
|  | - For full-scale, LoRA, and QLoRA fine-tuning based on **ms-swift**, see [Fine-tuning Guide](./swift/README_EN.md). | ||||||
|  | - For full-scale, LoRA, and QLoRA fine-tuning based on **LLaMA-Factory**, see [Fine-tuning Guide](./doc/GLM-4-9B-chat%20Lora%20微调(llama-factory).md). | ||||||
|  | - **[TODO]**: Update DPO training. | ||||||
| 
 | 
 | ||||||
| For details, see the [fine-tuning guide](xtuner_config/README_EN.md) |  | ||||||
| 
 | 
 | ||||||
| ### 🔧Deployment Guide | ### 🔧Deployment Guide | ||||||
| 
 | 
 | ||||||
| - Demo deployment: see [deployment guide](./demo/README_EN.md) for details. | - Demo deployment: see [deployment guide](./demo/README_EN.md) for details. | ||||||
| - Quantitative deployment based on [LMDeploy](https://github.com/InternLM/lmdeploy/): see [deploy](./deploy/lmdeploy_EN.md) | - Quantitative deployment based on [LMDeploy](https://github.com/InternLM/lmdeploy/): see [deploy](./deploy/lmdeploy_EN.md) | ||||||
|  | - **[TODO]**: Deployment Guide for VLLM | ||||||
| 
 | 
 | ||||||
| ### ⚙RAG (Retrieval Augmented Generation) | ### ⚙RAG (Retrieval Augmented Generation) | ||||||
| 
 | 
 | ||||||
| @ -263,7 +270,8 @@ For details, see the [fine-tuning guide](xtuner_config/README_EN.md) | |||||||
| - [LMDeploy](https://github.com/InternLM/lmdeploy/): for quantitative deployment | - [LMDeploy](https://github.com/InternLM/lmdeploy/): for quantitative deployment | ||||||
| - [Stremlit](https://streamlit.io/): for building demos | - [Stremlit](https://streamlit.io/): for building demos | ||||||
| - [DeepSpeed](https://github.com/microsoft/DeepSpeed): for parallel training | - [DeepSpeed](https://github.com/microsoft/DeepSpeed): for parallel training | ||||||
| - … | - [LLaMA-Factory](https://github.com/hiyouga/LLaMA-Factory/blob/main) | ||||||
|  | - [ms-swift](https://github.com/modelscope/ms-swift) | ||||||
| 
 | 
 | ||||||
| #### How to participate in this project | #### How to participate in this project | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										177
									
								
								app_Llama3_Gradio2.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										177
									
								
								app_Llama3_Gradio2.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,177 @@ | |||||||
|  | import gradio as gr | ||||||
|  | import os | ||||||
|  | import torch | ||||||
|  | from transformers import GemmaTokenizer, AutoModelForCausalLM | ||||||
|  | from transformers import AutoModelForCausalLM, AutoTokenizer, TextIteratorStreamer | ||||||
|  | from threading import Thread | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | DESCRIPTION = ''' | ||||||
|  | <div> | ||||||
|  | <h1 style="text-align: center;">EmoLLM Llama3 心理咨询室 V4.0</h1> | ||||||
|  | 
 | ||||||
|  | <p align="center"> | ||||||
|  |   <a href="https://github.com/SmartFlowAI/EmoLLM/"> | ||||||
|  |     <img src="https://st-app-center-006861-9746-jlroxvg.openxlab.space/media/cda6c1a05dc8ba5b19ad3e7a24920fdf3750c917751202385a6dbc51.png" alt="Logo" width="20%"> | ||||||
|  |   </a> | ||||||
|  | </p> | ||||||
|  | 
 | ||||||
|  | <div align="center"> | ||||||
|  | 
 | ||||||
|  | <!-- PROJECT SHIELDS --> | ||||||
|  | [![OpenXLab_Model][OpenXLab_Model-image]][OpenXLab_Model-url]  | ||||||
|  | 
 | ||||||
|  | <h2 style="text-align: center;"> EmoLLM是一系列能够支持 理解用户-支持用户-帮助用户 心理健康辅导链路的 心理健康大模型 ,欢迎大家star~⭐⭐</h2> | ||||||
|  | <p>https://github.com/SmartFlowAI/EmoLLM</p> | ||||||
|  | </div> | ||||||
|  | 
 | ||||||
|  | </div> | ||||||
|  | 
 | ||||||
|  | [OpenXLab_Model-image]: https://cdn-static.openxlab.org.cn/header/openxlab_models.svg | ||||||
|  | [OpenXLab_Model-url]: https://openxlab.org.cn/models/detail/chg0901/EmoLLM-Llama3-8B-Instruct3.0 | ||||||
|  | 
 | ||||||
|  | ''' | ||||||
|  | 
 | ||||||
|  | LICENSE = """ | ||||||
|  | <p align="center"> Built with Meta Llama 3 </> | ||||||
|  | """ | ||||||
|  | 
 | ||||||
|  | PLACEHOLDER = """ | ||||||
|  | <div style="padding: 30px; text-align: center; display: flex; flex-direction: column; align-items: center;"> | ||||||
|  | 
 | ||||||
|  | </div> | ||||||
|  | """ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | css = """ | ||||||
|  | h1 { | ||||||
|  |   text-align: center; | ||||||
|  |   display: block; | ||||||
|  | } | ||||||
|  | <!-- | ||||||
|  | #duplicate-button { | ||||||
|  |   margin: auto; | ||||||
|  |   color: white; | ||||||
|  |   background: #1565c0; | ||||||
|  |   border-radius: 100vh; | ||||||
|  | } | ||||||
|  | --> | ||||||
|  | """ | ||||||
|  | 
 | ||||||
|  | # download internlm2 to the base_path directory using git tool | ||||||
|  | base_path = './EmoLLM-Llama3-8B-Instruct3.0' | ||||||
|  | os.system(f'git clone https://code.openxlab.org.cn/chg0901/EmoLLM-Llama3-8B-Instruct3.0.git {base_path}') | ||||||
|  | os.system(f'cd {base_path} && git lfs pull') | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | # Load the tokenizer and model | ||||||
|  | tokenizer = AutoTokenizer.from_pretrained(base_path,trust_remote_code=True) | ||||||
|  | model = AutoModelForCausalLM.from_pretrained(base_path,trust_remote_code=True, device_map="auto", torch_dtype=torch.float16).eval()  # to("cuda:0")  | ||||||
|  | terminators = [ | ||||||
|  |     tokenizer.eos_token_id, | ||||||
|  |     tokenizer.convert_tokens_to_ids("<|eot_id|>") | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | def chat_llama3_8b(message: str,  | ||||||
|  |               history: list,  | ||||||
|  |               temperature: float,  | ||||||
|  |               max_new_tokens: int, | ||||||
|  |               top_p: float | ||||||
|  |              ) -> str: | ||||||
|  |     """ | ||||||
|  |     Generate a streaming response using the llama3-8b model. | ||||||
|  |     Args: | ||||||
|  |         message (str): The input message. | ||||||
|  |         history (list): The conversation history used by ChatInterface. | ||||||
|  |         temperature (float): The temperature for generating the response. | ||||||
|  |         max_new_tokens (int): The maximum number of new tokens to generate. | ||||||
|  |     Returns: | ||||||
|  |         str: The generated response. | ||||||
|  |     """ | ||||||
|  |     conversation = [] | ||||||
|  |      | ||||||
|  |     for user, assistant in history: | ||||||
|  |         conversation.extend([{"role": "user", "content": user}, {"role": "assistant", "content": assistant}]) | ||||||
|  |     conversation.append({"role": "user", "content": message}) | ||||||
|  | 
 | ||||||
|  |     input_ids = tokenizer.apply_chat_template(conversation, return_tensors="pt").to(model.device) | ||||||
|  |      | ||||||
|  |     streamer = TextIteratorStreamer(tokenizer, timeout=10.0, skip_prompt=True, skip_special_tokens=True) | ||||||
|  | 
 | ||||||
|  |     generate_kwargs = dict( | ||||||
|  |         input_ids= input_ids, | ||||||
|  |         streamer=streamer, | ||||||
|  |         max_new_tokens=max_new_tokens, | ||||||
|  |         do_sample=True, | ||||||
|  |         temperature=temperature, | ||||||
|  |         top_p = top_p, | ||||||
|  |         eos_token_id=terminators, | ||||||
|  |     ) | ||||||
|  |     # This will enforce greedy generation (do_sample=False) when the temperature is passed 0, avoiding the crash.              | ||||||
|  |     if temperature == 0: | ||||||
|  |         generate_kwargs['do_sample'] = False | ||||||
|  |          | ||||||
|  |     t = Thread(target=model.generate, kwargs=generate_kwargs) | ||||||
|  |     t.start() | ||||||
|  | 
 | ||||||
|  |     outputs = [] | ||||||
|  |     for text in streamer: | ||||||
|  |         outputs.append(text) | ||||||
|  |         yield "".join(outputs) | ||||||
|  | 
 | ||||||
|  |          | ||||||
|  | 
 | ||||||
|  | # Gradio block | ||||||
|  | chatbot=gr.Chatbot(height=450, placeholder=PLACEHOLDER, label='EmoLLM Chat') | ||||||
|  | 
 | ||||||
|  | with gr.Blocks(fill_height=True, css=css) as demo: | ||||||
|  |      | ||||||
|  |     gr.Markdown(DESCRIPTION) | ||||||
|  |     # gr.DuplicateButton(value="Duplicate Space for private use", elem_id="duplicate-button") | ||||||
|  |     gr.ChatInterface( | ||||||
|  |         fn=chat_llama3_8b, | ||||||
|  |         chatbot=chatbot, | ||||||
|  |         fill_height=True, | ||||||
|  |         additional_inputs_accordion=gr.Accordion(label="⚙️ Parameters", open=False, render=False), | ||||||
|  |         additional_inputs=[ | ||||||
|  |             gr.Slider(minimum=0, | ||||||
|  |                       maximum=1,  | ||||||
|  |                       step=0.1, | ||||||
|  |                       value=0.95,  | ||||||
|  |                       label="Temperature",  | ||||||
|  |                       render=False), | ||||||
|  |             gr.Slider(minimum=128,  | ||||||
|  |                       maximum=4096, | ||||||
|  |                       step=1, | ||||||
|  |                       value=4096,  | ||||||
|  |                       label="Max new tokens",  | ||||||
|  |                       render=False ), | ||||||
|  |             gr.Slider(minimum=0.0,  | ||||||
|  |                       maximum=1, | ||||||
|  |                       step=0.01, | ||||||
|  |                       value=0.8,  | ||||||
|  |                       label="Top P",  | ||||||
|  |                       render=False ), | ||||||
|  |             # gr.Slider(minimum=128,  | ||||||
|  |             #           maximum=4096, | ||||||
|  |             #           step=1, | ||||||
|  |             #           value=512,  | ||||||
|  |             #           label="Max new tokens",  | ||||||
|  |             #           render=False ), | ||||||
|  |             ], | ||||||
|  |         examples=[ | ||||||
|  |             ['请介绍你自己。'], | ||||||
|  |             ['我觉得我在学校的学习压力好大啊,虽然我真的很喜欢我的专业,但最近总是担心自己无法达到自己的期望,这让我有点焦虑。'], | ||||||
|  |             ['我最近总觉得自己在感情上陷入了困境,我喜欢上了我的朋友,但又害怕表达出来会破坏我们现在的关系...'], | ||||||
|  |             ['我感觉自己像是被困在一个无尽的循环中。每天醒来都感到身体沉重,对日常活动提不起兴趣,工作、锻炼甚至是我曾经喜欢的事物都让我觉得厌倦'], | ||||||
|  |             ['最近工作压力特别大,还有一些家庭矛盾'] | ||||||
|  |             ], | ||||||
|  |         cache_examples=False, | ||||||
|  |                      ) | ||||||
|  |      | ||||||
|  |     gr.Markdown(LICENSE) | ||||||
|  |      | ||||||
|  | if __name__ == "__main__": | ||||||
|  |     demo.launch() | ||||||
|  |      | ||||||
|  |      | ||||||
| @ -1,11 +1,11 @@ | |||||||
| 
 | 
 | ||||||
| from modelscope.hub.api import HubApi | from modelscope.hub.api import HubApi | ||||||
| 
 | 
 | ||||||
| YOUR_ACCESS_TOKEN = '' #输入你的modelscope access token | YOUR_ACCESS_TOKEN = ''  # 输入你的modelscope access token | ||||||
| 
 | 
 | ||||||
| api = HubApi() | api = HubApi() | ||||||
| api.login(YOUR_ACCESS_TOKEN) | api.login(YOUR_ACCESS_TOKEN) | ||||||
| api.push_model( | api.push_model( | ||||||
|             model_id="zealot5209/EmoLLM-Scientist",  #your_name/model_id |     model_id="zealot5209/EmoLLM-Scientist",  # your_name/model_id | ||||||
|                 model_dir="./merged" # 本地模型目录,要求目录中必须包含configuration.json |     model_dir="./merged"  # 本地模型目录,要求目录中必须包含configuration.json | ||||||
|                 ) | ) | ||||||
|  | |||||||
| @ -0,0 +1,243 @@ | |||||||
|  | # Copyright (c) OpenMMLab. All rights reserved. | ||||||
|  | """ | ||||||
|  | Ref: https://github.com/InternLM/xtuner/edit/main/xtuner/configs/internlm/internlm2_5_chat_7b/internlm2_5_chat_7b_full_finetune_custom_dataset_e1.py | ||||||
|  | 
 | ||||||
|  | Data format: | ||||||
|  | [ | ||||||
|  |     { | ||||||
|  |         "conversation": [ | ||||||
|  |             { | ||||||
|  |                 "system": "", | ||||||
|  |                 "input": "xxx", | ||||||
|  |                 "output": "xxx" | ||||||
|  |             }, | ||||||
|  |             { | ||||||
|  |                 "input": "xxx", | ||||||
|  |                 "output": "xxx" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  | ... | ||||||
|  | ] | ||||||
|  | Please refer to https://github.com/InternLM/xtuner/blob/main/docs/en/user_guides/dataset_format.md for details. | ||||||
|  | """  # noqa: E501 | ||||||
|  | from datasets import load_dataset | ||||||
|  | from mmengine.hooks import (CheckpointHook, DistSamplerSeedHook, IterTimerHook, | ||||||
|  |                             LoggerHook, ParamSchedulerHook) | ||||||
|  | from mmengine.optim import AmpOptimWrapper, CosineAnnealingLR | ||||||
|  | from torch.optim import AdamW | ||||||
|  | from torch.utils.data import BatchSampler | ||||||
|  | from transformers import AutoModelForCausalLM, AutoTokenizer | ||||||
|  | 
 | ||||||
|  | from xtuner.dataset import process_hf_dataset | ||||||
|  | from xtuner.dataset.collate_fns import default_collate_fn | ||||||
|  | from xtuner.dataset.map_fns import template_map_fn_factory | ||||||
|  | from xtuner.dataset.samplers import InternRepoSampler | ||||||
|  | from xtuner.engine import (DatasetInfoHook, EvaluateChatHook, ThroughputHook, | ||||||
|  |                            VarlenAttnArgsToMessageHubHook) | ||||||
|  | from xtuner.engine.runner import TrainLoop | ||||||
|  | from xtuner.model import SupervisedFinetune | ||||||
|  | from xtuner.utils import PROMPT_TEMPLATE | ||||||
|  | 
 | ||||||
|  | ####################################################################### | ||||||
|  | #                          PART 1  Settings                           # | ||||||
|  | ####################################################################### | ||||||
|  | # Model | ||||||
|  | pretrained_model_name_or_path = '/root/group_share/Hong/Meta-Llama-3___1-8B-Instruct' | ||||||
|  | use_varlen_attn = True | ||||||
|  | 
 | ||||||
|  | # Data | ||||||
|  | data_files = ['/root/EmoLLM/datasets/multi_turn_dataset_2.json'] | ||||||
|  | prompt_template = PROMPT_TEMPLATE.internlm2_chat | ||||||
|  | # max_length = 32768 | ||||||
|  | max_length = int(32768/4) ## A100*2 | ||||||
|  | pack_to_max_length = True | ||||||
|  | 
 | ||||||
|  | # parallel | ||||||
|  | sequence_parallel_size = 1 | ||||||
|  | 
 | ||||||
|  | # Scheduler & Optimizer | ||||||
|  | # batch size per device, set to 1 if `use_varlen_attn` = True | ||||||
|  | # To clarify, enlarging the batch size essentially enlarges the `max_length`. | ||||||
|  | # For example, doubling the max length is tantamount to doubling the batch size | ||||||
|  | batch_size = 1 | ||||||
|  | accumulative_counts = 1  # 1bs * 1acc * 64gpu = 64 batchsize | ||||||
|  | accumulative_counts *= sequence_parallel_size | ||||||
|  | dataloader_num_workers = 4 | ||||||
|  | max_epochs = 3 | ||||||
|  | 
 | ||||||
|  | optim_type = AdamW | ||||||
|  | lr = 4e-5 | ||||||
|  | betas = (0.9, 0.95) | ||||||
|  | weight_decay = 0.01 | ||||||
|  | max_norm = 1  # grad clip | ||||||
|  | warm_up_ratio = 0.025 | ||||||
|  | 
 | ||||||
|  | # Save | ||||||
|  | save_steps = 500 | ||||||
|  | save_total_limit = 2  # Maximum checkpoints to keep (-1 means unlimited) | ||||||
|  | 
 | ||||||
|  | # Evaluate the generation performance during the training | ||||||
|  | evaluation_freq = 500 | ||||||
|  | SYSTEM = "你由EmoLLM团队打造的中文领域心理健康助手, 是一个研究过无数具有心理健康问题的病人与心理健康医生对话的心理专家, 在心理方面拥有广博的知识储备和丰富的研究咨询经验,你旨在通过专业心理咨询, 协助来访者完成心理诊断。请充分利用专业心理学知识与咨询技术, 一步步帮助来访者解决心理问题, 接下来你将只使用中文来回答和咨询问题。" | ||||||
|  | evaluation_inputs = [ | ||||||
|  |     # '躲在云朵下面就不怕淋雨了', # ruozhi train | ||||||
|  |     # '李白如果告语文书侵权的话能赔不少钱吧', # ruozhi test | ||||||
|  |     # '雨天,我走进水坑里,不小心踩碎了天空。', # ruozhi test | ||||||
|  |     '请介绍你自己', # self cognition | ||||||
|  |     '你好', | ||||||
|  |     '我今天心情不好,感觉不开心,很烦。', | ||||||
|  |     '我最近总是感到很焦虑,尤其是在学业上。我有个特别崇拜的同学,他好像在各方面都比我优秀,我总觉得自己怎么努力也追不上他,这让我压力特别大。',  | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | # "这是一句富有想象力和幽默感的表达。在现实生活中,躲在云朵下面并不能避免淋雨,因为云朵实际上是由水蒸气凝结形成的,而雨就是由这些水滴凝结而成的。\n\n这样的表达可能是在夸张和幽默的语境中,通过一种天马行空的方式来表达逃避现实或者寻找避难的愿望。在文学或口语表达中,常常会运用夸张和幽默来传达情感或者引起共鸣。", | ||||||
|  | 
 | ||||||
|  | # "如果李白(701年2月28日—762年12月)真的能就侵权诉讼获得赔偿,那确实可能是一笔不小的金额。然而,这种想法主要是一种有趣的假设,因为现实中有几个关键因素使这种情况不可能发生:\n\n1. **时间差异**:李白生活在唐朝,距今大约1200多年前。那 个时代的法律体系与现代的知识产权法律截然不同,当时没有现代意义上的版权法。\n\n2. **版权法的适用范围**:即使在现代,版权 法也有一定的时效限制。在大多数国家,版权保护通常在作者去世后一定年数内有效(如我国是作者去世后50年)。李白去世已超过1250年,因此其作品已经进入公共领域,任何人都可以自由使用而无需支付版权费用。\n\n3. **历史与现实的区别**:历史人物无法在现代 法律体系中提起诉讼,因为他们不再是活跃的法律主体。\n\n所以,虽然这是一个有趣的想法,但在现实中,李白或其他古代作者无法因其作品被现代出版物使用而获得赔偿。", | ||||||
|  | 
 | ||||||
|  | # "这个描述似乎是一个修辞手法,比喻性地描述了雨天的场景。在这个描述中,说“我走进水坑里,不小心踩碎了天空”,实际上并非字面意义上的发生,而是一种用词语来比喻雨天的场景。\n\n通常情况下,当雨水落在水坑或者蓄水池时,水面会泛起涟漪或者波纹,可能会反射天空的颜色或者天空的倒影。因此,这句话可能是通过“踩碎了天空”的说法来比喻雨天时踩进水坑的情景,描述雨水落在水坑中形成的波纹或者涟漪,产生了一种倒映天空的效果。\n\n这种形象化的表达方式可能是为了更生动地描述一个平常的场景,赋予它一些诗意或者意境。", | ||||||
|  | 
 | ||||||
|  | ####################################################################### | ||||||
|  | #                      PART 2  Model & Tokenizer                      # | ||||||
|  | ####################################################################### | ||||||
|  | tokenizer = dict( | ||||||
|  |     type=AutoTokenizer.from_pretrained, | ||||||
|  |     pretrained_model_name_or_path=pretrained_model_name_or_path, | ||||||
|  |     trust_remote_code=True, | ||||||
|  |     padding_side='right') | ||||||
|  | 
 | ||||||
|  | model = dict( | ||||||
|  |     type=SupervisedFinetune, | ||||||
|  |     use_varlen_attn=use_varlen_attn, | ||||||
|  |     llm=dict( | ||||||
|  |         type=AutoModelForCausalLM.from_pretrained, | ||||||
|  |         pretrained_model_name_or_path=pretrained_model_name_or_path, | ||||||
|  |         trust_remote_code=True)) | ||||||
|  | 
 | ||||||
|  | ####################################################################### | ||||||
|  | #                      PART 3  Dataset & Dataloader                   # | ||||||
|  | ####################################################################### | ||||||
|  | train_dataset = dict( | ||||||
|  |     type=process_hf_dataset, | ||||||
|  |     use_varlen_attn=use_varlen_attn, | ||||||
|  |     dataset=dict(type=load_dataset, path='json', data_files=data_files), | ||||||
|  |     tokenizer=tokenizer, | ||||||
|  |     max_length=max_length, | ||||||
|  |     dataset_map_fn=None, | ||||||
|  |     template_map_fn=dict( | ||||||
|  |         type=template_map_fn_factory, template=prompt_template), | ||||||
|  |     remove_unused_columns=True, | ||||||
|  |     shuffle_before_pack=True, | ||||||
|  |     pack_to_max_length=pack_to_max_length) | ||||||
|  | 
 | ||||||
|  | train_dataloader = dict( | ||||||
|  |     batch_size=batch_size, | ||||||
|  |     num_workers=dataloader_num_workers, | ||||||
|  |     dataset=train_dataset, | ||||||
|  |     sampler=dict(type=InternRepoSampler, shuffle=True, seed=1024), | ||||||
|  |     batch_sampler=dict( | ||||||
|  |         type=BatchSampler, drop_last=True, batch_size=batch_size), | ||||||
|  |     collate_fn=dict(type=default_collate_fn, use_varlen_attn=use_varlen_attn)) | ||||||
|  | 
 | ||||||
|  | ####################################################################### | ||||||
|  | #                    PART 4  Scheduler & Optimizer                    # | ||||||
|  | ####################################################################### | ||||||
|  | # optimizer | ||||||
|  | optim_wrapper = dict( | ||||||
|  |     type=AmpOptimWrapper, | ||||||
|  |     optimizer=dict( | ||||||
|  |         type=optim_type, lr=lr, betas=betas, weight_decay=weight_decay), | ||||||
|  |     clip_grad=dict(max_norm=max_norm, error_if_nonfinite=False), | ||||||
|  |     accumulative_counts=accumulative_counts, | ||||||
|  |     loss_scale='dynamic', | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | # learning policy | ||||||
|  | # More information: https://github.com/open-mmlab/mmengine/blob/main/docs/en/tutorials/param_scheduler.md  # noqa: E501 | ||||||
|  | param_scheduler = [ | ||||||
|  |     dict( | ||||||
|  |         type='LinearLR', | ||||||
|  |         start_factor=1 / 40, | ||||||
|  |         by_epoch=True, | ||||||
|  |         begin=0, | ||||||
|  |         end=warm_up_ratio * max_epochs, | ||||||
|  |         convert_to_iter_based=True), | ||||||
|  |     dict( | ||||||
|  |         type=CosineAnnealingLR, | ||||||
|  |         eta_min=lr * 0.15, | ||||||
|  |         by_epoch=True, | ||||||
|  |         begin=warm_up_ratio * max_epochs, | ||||||
|  |         end=max_epochs, | ||||||
|  |         convert_to_iter_based=True) | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | # train, val, test setting | ||||||
|  | train_cfg = dict(type=TrainLoop, max_epochs=max_epochs) | ||||||
|  | 
 | ||||||
|  | ####################################################################### | ||||||
|  | #                           PART 5  Runtime                           # | ||||||
|  | ####################################################################### | ||||||
|  | # Log the dialogue periodically during the training process, optional | ||||||
|  | custom_hooks = [ | ||||||
|  |     dict( | ||||||
|  |         type=DatasetInfoHook, tokenizer=tokenizer, | ||||||
|  |         is_intern_repo_dataset=True), | ||||||
|  |     dict( | ||||||
|  |         type=EvaluateChatHook, | ||||||
|  |         tokenizer=tokenizer, | ||||||
|  |         every_n_iters=evaluation_freq, | ||||||
|  |         evaluation_inputs=evaluation_inputs, | ||||||
|  |         system=SYSTEM, | ||||||
|  |         prompt_template=prompt_template), | ||||||
|  |     dict(type=ThroughputHook) | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | if use_varlen_attn: | ||||||
|  |     custom_hooks += [dict(type=VarlenAttnArgsToMessageHubHook)] | ||||||
|  | 
 | ||||||
|  | # configure default hooks | ||||||
|  | default_hooks = dict( | ||||||
|  |     # record the time of every iteration. | ||||||
|  |     timer=dict(type=IterTimerHook), | ||||||
|  |     # print log every 100 iterations. | ||||||
|  |     logger=dict(type=LoggerHook, log_metric_by_epoch=False, interval=1), | ||||||
|  |     # enable the parameter scheduler. | ||||||
|  |     param_scheduler=dict(type=ParamSchedulerHook), | ||||||
|  |     # save checkpoint per `save_steps`. | ||||||
|  |     checkpoint=dict( | ||||||
|  |         type=CheckpointHook, | ||||||
|  |         by_epoch=False, | ||||||
|  |         interval=save_steps, | ||||||
|  |         max_keep_ckpts=save_total_limit), | ||||||
|  |     # set sampler seed in distributed evrionment. | ||||||
|  |     sampler_seed=dict(type=DistSamplerSeedHook), | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | # configure environment | ||||||
|  | env_cfg = dict( | ||||||
|  |     # whether to enable cudnn benchmark | ||||||
|  |     cudnn_benchmark=False, | ||||||
|  |     # set multi process parameters | ||||||
|  |     mp_cfg=dict(mp_start_method='fork', opencv_num_threads=0), | ||||||
|  |     # set distributed parameters | ||||||
|  |     dist_cfg=dict(backend='nccl'), | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | # set visualizer | ||||||
|  | visualizer = None | ||||||
|  | 
 | ||||||
|  | # set log level | ||||||
|  | log_level = 'INFO' | ||||||
|  | 
 | ||||||
|  | # load from which checkpoint | ||||||
|  | load_from = None | ||||||
|  | 
 | ||||||
|  | # whether to resume training from the loaded checkpoint | ||||||
|  | resume = False | ||||||
|  | 
 | ||||||
|  | # Defaults to use random seed and disable `deterministic` | ||||||
|  | randomness = dict(seed=None, deterministic=False) | ||||||
|  | 
 | ||||||
|  | log_processor = dict( | ||||||
|  |     by_epoch=False, | ||||||
|  |     window_size=1, | ||||||
|  |     mean_pattern=r'.*(loss|time|data_time|grad_norm|tflops).*') | ||||||
							
								
								
									
										213
									
								
								xtuner_config/Qwen2-7B-Instruct_lora.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										213
									
								
								xtuner_config/Qwen2-7B-Instruct_lora.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,213 @@ | |||||||
|  | # Copyright (c) OpenMMLab. All rights reserved. | ||||||
|  | import torch | ||||||
|  | from datasets import load_dataset | ||||||
|  | from mmengine.dataset import DefaultSampler | ||||||
|  | from mmengine.hooks import (CheckpointHook, DistSamplerSeedHook, IterTimerHook, | ||||||
|  |                             LoggerHook, ParamSchedulerHook) | ||||||
|  | from mmengine.optim import AmpOptimWrapper, CosineAnnealingLR, LinearLR | ||||||
|  | from peft import LoraConfig | ||||||
|  | from torch.optim import AdamW | ||||||
|  | from transformers import (AutoModelForCausalLM, AutoTokenizer, | ||||||
|  |                           BitsAndBytesConfig) | ||||||
|  | 
 | ||||||
|  | from xtuner.dataset import process_hf_dataset | ||||||
|  | from xtuner.dataset.collate_fns import default_collate_fn | ||||||
|  | from xtuner.dataset.map_fns import alpaca_map_fn, template_map_fn_factory | ||||||
|  | from xtuner.engine.hooks import (DatasetInfoHook, EvaluateChatHook, | ||||||
|  |                                  VarlenAttnArgsToMessageHubHook) | ||||||
|  | from xtuner.engine.runner import TrainLoop | ||||||
|  | from xtuner.model import SupervisedFinetune | ||||||
|  | from xtuner.parallel.sequence import SequenceParallelSampler | ||||||
|  | from xtuner.utils import PROMPT_TEMPLATE, SYSTEM_TEMPLATE | ||||||
|  | 
 | ||||||
|  | ####################################################################### | ||||||
|  | #                          PART 1  Settings                           # | ||||||
|  | ####################################################################### | ||||||
|  | # Model | ||||||
|  | pretrained_model_name_or_path = 'Qwen2-7B-Instruct'  # your model path | ||||||
|  | use_varlen_attn = False | ||||||
|  | 
 | ||||||
|  | # Data | ||||||
|  | alpaca_en_path = '../datasets/aiwei.json' | ||||||
|  | prompt_template = PROMPT_TEMPLATE.qwen_chat | ||||||
|  | max_length = 1024 | ||||||
|  | pack_to_max_length = True | ||||||
|  | 
 | ||||||
|  | # parallel | ||||||
|  | sequence_parallel_size = 1 | ||||||
|  | 
 | ||||||
|  | # Scheduler & Optimizer | ||||||
|  | batch_size = 8  # per_device | ||||||
|  | accumulative_counts = 16 | ||||||
|  | accumulative_counts *= sequence_parallel_size | ||||||
|  | dataloader_num_workers = 4 | ||||||
|  | max_epochs = 3 | ||||||
|  | optim_type = AdamW | ||||||
|  | lr = 1e-5 | ||||||
|  | betas = (0.9, 0.999) | ||||||
|  | weight_decay = 0 | ||||||
|  | max_norm = 1  # grad clip | ||||||
|  | warmup_ratio = 0.03 | ||||||
|  | 
 | ||||||
|  | # Save | ||||||
|  | save_steps = 100 | ||||||
|  | save_total_limit = 2  # Maximum checkpoints to keep (-1 means unlimited) | ||||||
|  | 
 | ||||||
|  | # Evaluate the generation performance during the training | ||||||
|  | evaluation_freq = 100 | ||||||
|  | SYSTEM = "现在你是一个心理专家,我有一些心理问题,请你用专业的知识帮我解决。" | ||||||
|  | evaluation_inputs = [ | ||||||
|  |     '我压力很大', '生活没意思', "非常容易羡慕别人啊" | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | ####################################################################### | ||||||
|  | #                      PART 2  Model & Tokenizer                      # | ||||||
|  | ####################################################################### | ||||||
|  | tokenizer = dict( | ||||||
|  |     type=AutoTokenizer.from_pretrained, | ||||||
|  |     pretrained_model_name_or_path=pretrained_model_name_or_path, | ||||||
|  |     trust_remote_code=True, | ||||||
|  |     padding_side='right') | ||||||
|  | 
 | ||||||
|  | model = dict( | ||||||
|  |     type=SupervisedFinetune, | ||||||
|  |     use_varlen_attn=use_varlen_attn, | ||||||
|  |     llm=dict( | ||||||
|  |         type=AutoModelForCausalLM.from_pretrained, | ||||||
|  |         pretrained_model_name_or_path=pretrained_model_name_or_path, | ||||||
|  |         trust_remote_code=True, | ||||||
|  |         torch_dtype=torch.float16, | ||||||
|  |     ), | ||||||
|  |     lora=dict( | ||||||
|  |         type=LoraConfig, | ||||||
|  |         r=32, | ||||||
|  |         lora_alpha=16, | ||||||
|  |         lora_dropout=0.1, | ||||||
|  |         bias='none', | ||||||
|  |         task_type='CAUSAL_LM')) | ||||||
|  | 
 | ||||||
|  | ####################################################################### | ||||||
|  | #                      PART 3  Dataset & Dataloader                   # | ||||||
|  | ####################################################################### | ||||||
|  | alpaca_en = dict( | ||||||
|  |     type=process_hf_dataset, | ||||||
|  |     dataset=dict(type=load_dataset, path='json', | ||||||
|  |                  data_files=dict(train=alpaca_en_path)), | ||||||
|  |     tokenizer=tokenizer, | ||||||
|  |     max_length=max_length, | ||||||
|  |     dataset_map_fn=None, | ||||||
|  |     template_map_fn=dict( | ||||||
|  |         type=template_map_fn_factory, template=prompt_template), | ||||||
|  |     remove_unused_columns=True, | ||||||
|  |     shuffle_before_pack=True, | ||||||
|  |     pack_to_max_length=pack_to_max_length, | ||||||
|  |     use_varlen_attn=use_varlen_attn) | ||||||
|  | 
 | ||||||
|  | sampler = SequenceParallelSampler \ | ||||||
|  |     if sequence_parallel_size > 1 else DefaultSampler | ||||||
|  | 
 | ||||||
|  | train_dataloader = dict( | ||||||
|  |     batch_size=batch_size, | ||||||
|  |     num_workers=dataloader_num_workers, | ||||||
|  |     dataset=alpaca_en, | ||||||
|  |     sampler=dict(type=sampler, shuffle=True), | ||||||
|  |     collate_fn=dict(type=default_collate_fn, use_varlen_attn=use_varlen_attn)) | ||||||
|  | 
 | ||||||
|  | ####################################################################### | ||||||
|  | #                    PART 4  Scheduler & Optimizer                    # | ||||||
|  | ####################################################################### | ||||||
|  | # optimizer | ||||||
|  | optim_wrapper = dict( | ||||||
|  |     type=AmpOptimWrapper, | ||||||
|  |     optimizer=dict( | ||||||
|  |         type=optim_type, lr=lr, betas=betas, weight_decay=weight_decay), | ||||||
|  |     clip_grad=dict(max_norm=max_norm, error_if_nonfinite=False), | ||||||
|  |     accumulative_counts=accumulative_counts, | ||||||
|  |     loss_scale='dynamic', | ||||||
|  |     dtype='float16') | ||||||
|  | 
 | ||||||
|  | # learning policy | ||||||
|  | # More information: https://github.com/open-mmlab/mmengine/blob/main/docs/en/tutorials/param_scheduler.md  # noqa: E501 | ||||||
|  | param_scheduler = [ | ||||||
|  |     dict( | ||||||
|  |         type=LinearLR, | ||||||
|  |         start_factor=1e-5, | ||||||
|  |         by_epoch=True, | ||||||
|  |         begin=0, | ||||||
|  |         end=warmup_ratio * max_epochs, | ||||||
|  |         convert_to_iter_based=True), | ||||||
|  |     dict( | ||||||
|  |         type=CosineAnnealingLR, | ||||||
|  |         eta_min=0.0, | ||||||
|  |         by_epoch=True, | ||||||
|  |         begin=warmup_ratio * max_epochs, | ||||||
|  |         end=max_epochs, | ||||||
|  |         convert_to_iter_based=True) | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | # train, val, test setting | ||||||
|  | train_cfg = dict(type=TrainLoop, max_epochs=max_epochs) | ||||||
|  | 
 | ||||||
|  | ####################################################################### | ||||||
|  | #                           PART 5  Runtime                           # | ||||||
|  | ####################################################################### | ||||||
|  | # Log the dialogue periodically during the training process, optional | ||||||
|  | custom_hooks = [ | ||||||
|  |     dict(type=DatasetInfoHook, tokenizer=tokenizer), | ||||||
|  |     dict( | ||||||
|  |         type=EvaluateChatHook, | ||||||
|  |         tokenizer=tokenizer, | ||||||
|  |         every_n_iters=evaluation_freq, | ||||||
|  |         evaluation_inputs=evaluation_inputs, | ||||||
|  |         system=SYSTEM, | ||||||
|  |         prompt_template=prompt_template) | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | if use_varlen_attn: | ||||||
|  |     custom_hooks += [dict(type=VarlenAttnArgsToMessageHubHook)] | ||||||
|  | 
 | ||||||
|  | # configure default hooks | ||||||
|  | default_hooks = dict( | ||||||
|  |     # record the time of every iteration. | ||||||
|  |     timer=dict(type=IterTimerHook), | ||||||
|  |     # print log every 10 iterations. | ||||||
|  |     logger=dict(type=LoggerHook, log_metric_by_epoch=False, interval=10), | ||||||
|  |     # enable the parameter scheduler. | ||||||
|  |     param_scheduler=dict(type=ParamSchedulerHook), | ||||||
|  |     # save checkpoint per `save_steps`. | ||||||
|  |     checkpoint=dict( | ||||||
|  |         type=CheckpointHook, | ||||||
|  |         by_epoch=False, | ||||||
|  |         interval=save_steps, | ||||||
|  |         max_keep_ckpts=save_total_limit), | ||||||
|  |     # set sampler seed in distributed evrionment. | ||||||
|  |     sampler_seed=dict(type=DistSamplerSeedHook), | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | # configure environment | ||||||
|  | env_cfg = dict( | ||||||
|  |     # whether to enable cudnn benchmark | ||||||
|  |     cudnn_benchmark=False, | ||||||
|  |     # set multi process parameters | ||||||
|  |     mp_cfg=dict(mp_start_method='fork', opencv_num_threads=0), | ||||||
|  |     # set distributed parameters | ||||||
|  |     dist_cfg=dict(backend='nccl'), | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | # set visualizer | ||||||
|  | visualizer = None | ||||||
|  | 
 | ||||||
|  | # set log level | ||||||
|  | log_level = 'INFO' | ||||||
|  | 
 | ||||||
|  | # load from which checkpoint | ||||||
|  | load_from = None | ||||||
|  | 
 | ||||||
|  | # whether to resume training from the loaded checkpoint | ||||||
|  | resume = False | ||||||
|  | 
 | ||||||
|  | # Defaults to use random seed and disable `deterministic` | ||||||
|  | randomness = dict(seed=None, deterministic=False) | ||||||
|  | 
 | ||||||
|  | # set log processor | ||||||
|  | log_processor = dict(by_epoch=False) | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 xzw
						xzw