ylxtesting commited on
Commit
732221f
·
1 Parent(s): 0c06fc0
Files changed (3) hide show
  1. app.py +83 -0
  2. data/README_zh-CN.md +184 -0
  3. requirements.txt +11 -0
app.py ADDED
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, Settings
3
+ from llama_index.embeddings.huggingface import HuggingFaceEmbedding
4
+ from llama_index.legacy.callbacks import CallbackManager
5
+ from llama_index.llms.openai_like import OpenAILike
6
+
7
+ # Create an instance of CallbackManager
8
+ callback_manager = CallbackManager()
9
+
10
+ api_base_url = "https://internlm-chat.intern-ai.org.cn/puyu/api/v1/"
11
+ model = "internlm2.5-latest"
12
+ api_key = "eyJ0eXBlIjoiSldUIiwiYWxnIjoiSFM1MTIifQ.eyJqdGkiOiI1MDE5NzIzMCIsInJvbCI6IlJPTEVfUkVHSVNURVIiLCJpc3MiOiJPcGVuWExhYiIsImlhdCI6MTczNjE1NzM5OCwiY2xpZW50SWQiOiJlYm1ydm9kNnlvMG5semFlazF5cCIsInBob25lIjoiMTc4MTE5NjU2MTgiLCJ1dWlkIjoiNmU4ZjEwZDYtNWJhZS00NmU2LWFlZDMtNzg3MWViNDMzMmFkIiwiZW1haWwiOiIiLCJleHAiOjE3NTE3MDkzOTh9.sw0QdqNBBBF_WHDBtNaTb12rmu3uhKlJzuWqRKxOD-RCZTdydao03TaTXY0EvXO4xPv-RWKgdBLloKMF4UgTUg"
13
+
14
+ # api_base_url = "https://api.siliconflow.cn/v1"
15
+ # model = "internlm/internlm2_5-7b-chat"
16
+ # api_key = "请填写 API Key"
17
+
18
+ llm =OpenAILike(model=model, api_base=api_base_url, api_key=api_key, is_chat_model=True,callback_manager=callback_manager)
19
+
20
+
21
+
22
+ st.set_page_config(page_title="llama_index_demo", page_icon="🦜🔗")
23
+ st.title("llama_index_demo")
24
+
25
+ # 初始化模型
26
+ @st.cache_resource
27
+ def init_models():
28
+ embed_model = HuggingFaceEmbedding(
29
+ model_name="sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2"
30
+ )
31
+ Settings.embed_model = embed_model
32
+
33
+ #用初始化llm
34
+ Settings.llm = llm
35
+
36
+ documents = SimpleDirectoryReader("./data").load_data()
37
+ index = VectorStoreIndex.from_documents(documents)
38
+ query_engine = index.as_query_engine()
39
+
40
+ return query_engine
41
+
42
+ # 检查是否需要初始化模型
43
+ if 'query_engine' not in st.session_state:
44
+ st.session_state['query_engine'] = init_models()
45
+
46
+ def greet2(question):
47
+ response = st.session_state['query_engine'].query(question)
48
+ return response
49
+
50
+
51
+ # Store LLM generated responses
52
+ if "messages" not in st.session_state.keys():
53
+ st.session_state.messages = [{"role": "assistant", "content": "你好,我是你的助手,有什么我可以帮助你的吗?"}]
54
+
55
+ # Display or clear chat messages
56
+ for message in st.session_state.messages:
57
+ with st.chat_message(message["role"]):
58
+ st.write(message["content"])
59
+
60
+ def clear_chat_history():
61
+ st.session_state.messages = [{"role": "assistant", "content": "你好,我是你的助手,有什么我可以帮助你的吗?"}]
62
+
63
+ st.sidebar.button('Clear Chat History', on_click=clear_chat_history)
64
+
65
+ # Function for generating LLaMA2 response
66
+ def generate_llama_index_response(prompt_input):
67
+ return greet2(prompt_input)
68
+
69
+ # User-provided prompt
70
+ if prompt := st.chat_input():
71
+ st.session_state.messages.append({"role": "user", "content": prompt})
72
+ with st.chat_message("user"):
73
+ st.write(prompt)
74
+
75
+ # Gegenerate_llama_index_response last message is not from assistant
76
+ if st.session_state.messages[-1]["role"] != "assistant":
77
+ with st.chat_message("assistant"):
78
+ with st.spinner("Thinking..."):
79
+ response = generate_llama_index_response(prompt)
80
+ placeholder = st.empty()
81
+ placeholder.markdown(response)
82
+ message = {"role": "assistant", "content": response}
83
+ st.session_state.messages.append(message)
data/README_zh-CN.md ADDED
@@ -0,0 +1,184 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+
3
+ GitHub Repo starslicensePyPIDownloadsissue resolutionopen issues
4
+
5
+ 👋 加入我们:Static BadgeStatic BadgeStatic Badge
6
+
7
+ 🔍 探索我们的模型:Static BadgeStatic BadgeStatic BadgeStatic Badge
8
+
9
+ English | 简体中文
10
+
11
+ 🚀 Speed Benchmark
12
+ XTuner 与 LLaMA-Factory 在 Llama2-7B 模型上的训练效率对比
13
+
14
+ XTuner 与 LLaMA-Factory 在 Llama2-70B 模型上的训练效率对比
15
+
16
+ 🎉 更新
17
+ [2024/07] 支持 MiniCPM 模型!
18
+ [2024/07] 支持训练 DPO, ORPO 还有 Reward Model ! 并且能够支持打包数据以及序列并行功能! 请参考 文档 了解更多信息。
19
+ [2024/07] 支持 InternLM 2.5 模型!
20
+ [2024/06] 支持 DeepSeek V2 models! 训练速度提升一倍!
21
+ [2024/04] 多模态大模型 LLaVA-Phi-3-mini 发布!快速开始请查阅此文档!
22
+ [2024/04] 多模态大模型 LLaVA-Llama-3-8B 和 LLaVA-Llama-3-8B-v1.1 发布!快速开始请查阅此文档!
23
+ [2024/04] 支持 Llama 3 模型!
24
+ [2024/04] 支持序列并行训练策略以实现语言模型超长上下文训练![文档] [速度基准]
25
+ [2024/02] 支持 Gemma 模型!
26
+ [2024/02] 支持 Qwen1.5 模型!
27
+ [2024/01] 支持 InternLM2 模型!同时,最新版的多模态大模型 LLaVA-Internlm2-7B / 20B 发布,其表现出强大的性能!
28
+ [2024/01] 支持 DeepSeek-MoE 模型!20GB 显存即可实现 QLoRA 微调,4x80GB 即可实现全参数微调。快速开始请查阅相关配置文件!
29
+ [2023/12] 🔥 支持多模态模型 VLM(LLaVA-v1.5)预训练和指令微调!快速开始请查阅此文档!
30
+ [2023/12] 🔥 支持 Mixtral 8x7B 模型!快速开始请查阅此文档!
31
+ [2023/11] 支持 ChatGLM3-6B 模型!
32
+ [2023/10] 支持 MSAgent-Bench 数据集,并且微调所得大语言模型可应用至 Lagent 框架!
33
+ [2023/10] 优化数据处理逻辑以兼容 system 字段,相关细节请查阅文档!
34
+ [2023/09] 支持 InternLM-20B 系列模型!
35
+ [2023/09] 支持 Baichuan2 系列模型!
36
+ [2023/08] XTuner 正式发布!众多微调模型已上传至 HuggingFace!
37
+ 📖 介绍
38
+ XTuner 是一个高效、灵活、全能的轻量化大模型微调工具库。
39
+
40
+ 高效
41
+
42
+ 支持大语言模型 LLM、多模态图文模型 VLM 的预训练及轻量级微调。XTuner 支持在 8GB 显存下微调 7B 模型,同时也支持多节点跨设备微调更大尺度模型(70B+)。
43
+ 自动分发高性能算子(如 FlashAttention、Triton kernels 等)以加速训练吞吐。
44
+ 兼容 DeepSpeed 🚀,轻松应用各种 ZeRO 训练优化策略。
45
+ 灵活
46
+
47
+ 支持多种大语言模型,包括但不限于 InternLM、Mixtral-8x7B、Llama 2、ChatGLM、Qwen、Baichuan。
48
+ 支持多模态图文模型 LLaVA 的预训练与微调。利用 XTuner 训得模型 LLaVA-InternLM2-20B 表现优异。
49
+ 精心设计的数据管道,兼容任意数据格式,开源数据或自定义数据皆可快速上手。
50
+ 支持 QLoRA、LoRA、全量参数微调等多种微调算法,支撑用户根据具体需求作出最优选择。
51
+ 全能
52
+
53
+ 支持增量预训练、指令微调与 Agent 微调。
54
+ 预定义众多开源对话模版,支持与开源或训练所得模型进行对话。
55
+ 训练所得模型可无缝接入部署工具库 LMDeploy、大规模评测工具库 OpenCompass 及 VLMEvalKit。
56
+ 🔥 支持列表
57
+ 模型 数据集 数据格式 微调算法
58
+ InternLM 2 / 2.5
59
+ Llama 2 / 3
60
+ Phi-3
61
+ ChatGLM2
62
+ ChatGLM3
63
+ Qwen
64
+ Baichuan2
65
+ Mixtral
66
+ DeepSeek V2
67
+ Gemma
68
+ MiniCPM
69
+ ...
70
+ MSAgent-Bench
71
+ MOSS-003-SFT 🔧
72
+ Alpaca en / zh
73
+ WizardLM
74
+ oasst1
75
+ Open-Platypus
76
+ Code Alpaca
77
+ Colorist 🎨
78
+ Arxiv GenTitle
79
+ Chinese Law
80
+ OpenOrca
81
+ Medical Dialogue
82
+ ...
83
+ Incremental Pre-training
84
+ Single-turn Conversation SFT
85
+ Multi-turn Conversation SFT
86
+ QLoRA
87
+ LoRA
88
+ 全量参数微调
89
+ DPO
90
+ ORPO
91
+ Reward Model
92
+ 🛠️ 快速上手
93
+ 安装
94
+ 推荐使用 conda 先构建一个 Python-3.10 的虚拟环境
95
+
96
+ conda create --name xtuner-env python=3.10 -y
97
+ conda activate xtuner-env
98
+ 通过 pip 安装 XTuner:
99
+
100
+ pip install -U xtuner
101
+ 亦可集成 DeepSpeed 安装:
102
+
103
+ pip install -U 'xtuner[deepspeed]'
104
+ 从源码安装 XTuner:
105
+
106
+ git clone https://github.com/InternLM/xtuner.git
107
+ cd xtuner
108
+ pip install -e '.[all]'
109
+ 微调
110
+ XTuner 支持微调大语言模型。数据集预处理指南请查阅文档。
111
+
112
+ 步骤 0,准备配置文件。XTuner 提供多个开箱即用的配置文件,用户可以通过下列命令查看:
113
+
114
+ xtuner list-cfg
115
+ 或者,如果所提供的配置文件不能满足使用需求,请导出所提供的配置文件并进行相应更改:
116
+
117
+ xtuner copy-cfg ${CONFIG_NAME} ${SAVE_PATH}
118
+ vi ${SAVE_PATH}/${CONFIG_NAME}_copy.py
119
+ 步骤 1,开始微调。
120
+
121
+ xtuner train ${CONFIG_NAME_OR_PATH}
122
+ 例如,我们可以利用 QLoRA 算法在 oasst1 数据集上微调 InternLM2.5-Chat-7B:
123
+
124
+ # 单卡
125
+ xtuner train internlm2_5_chat_7b_qlora_oasst1_e3 --deepspeed deepspeed_zero2
126
+ # 多卡
127
+ (DIST) NPROC_PER_NODE=${GPU_NUM} xtuner train internlm2_5_chat_7b_qlora_oasst1_e3 --deepspeed deepspeed_zero2
128
+ (SLURM) srun ${SRUN_ARGS} xtuner train internlm2_5_chat_7b_qlora_oasst1_e3 --launcher slurm --deepspeed deepspeed_zero2
129
+ --deepspeed 表示使用 DeepSpeed 🚀 来优化训练过程。XTuner 内置了多种策略,包括 ZeRO-1、ZeRO-2、ZeRO-3 等。如果用户期望关闭此功能,请直接移除此参数。
130
+
131
+ 更多示例,请查阅文档。
132
+
133
+ 步骤 2,将保存的 PTH 模型(如果使用的DeepSpeed,则将会是一个文件夹)转换为 HuggingFace 模型:
134
+
135
+ xtuner convert pth_to_hf ${CONFIG_NAME_OR_PATH} ${PTH} ${SAVE_PATH}
136
+ 对话
137
+ XTuner 提供与大语言模型对话的工具。
138
+
139
+ xtuner chat ${NAME_OR_PATH_TO_LLM} --adapter {NAME_OR_PATH_TO_ADAPTER} [optional arguments]
140
+ 例如:
141
+
142
+ 与 InternLM2.5-Chat-7B 对话:
143
+
144
+ xtuner chat internlm/internlm2-chat-7b --prompt-template internlm2_chat
145
+ 更多示例,请查阅文档。
146
+
147
+ 部署
148
+ 步骤 0,将 HuggingFace adapter 合并到大语言模型:
149
+
150
+ xtuner convert merge \
151
+ ${NAME_OR_PATH_TO_LLM} \
152
+ ${NAME_OR_PATH_TO_ADAPTER} \
153
+ ${SAVE_PATH} \
154
+ --max-shard-size 2GB
155
+ 步骤 1,使用任意推理框架部署微调后的大语言模型,例如 LMDeploy 🚀:
156
+
157
+ pip install lmdeploy
158
+ python -m lmdeploy.pytorch.chat ${NAME_OR_PATH_TO_LLM} \
159
+ --max_new_tokens 256 \
160
+ --temperture 0.8 \
161
+ --top_p 0.95 \
162
+ --seed 0
163
+ 🔥 追求速度更快、显存占用更低的推理?欢迎体验 LMDeploy 提供的 4-bit 量化!使用指南请见文档。
164
+
165
+ 评测
166
+ 推荐使用一站式平台 OpenCompass 来评测大语言模型,其目前已涵盖 50+ 数据集的约 30 万条题目。
167
+ 🤝 贡献指南
168
+ 我们感谢所有的贡献者为改进和提升 XTuner 所作出的努力。请参考贡献指南来了解参与项目贡献的相关指引。
169
+
170
+ 🎖️ 致谢
171
+ Llama 2
172
+ DeepSpeed
173
+ QLoRA
174
+ LMDeploy
175
+ LLaVA
176
+ 🖊️ 引用
177
+ @misc{2023xtuner,
178
+ title={XTuner: A Toolkit for Efficiently Fine-tuning LLM},
179
+ author={XTuner Contributors},
180
+ howpublished = {\url{https://github.com/InternLM/xtuner}},
181
+ year={2023}
182
+ }
183
+ 开源许可证
184
+ 该项目采用 Apache License 2.0 开源许可证。同时,请遵守所使用的模型与数据集的许可证。
requirements.txt ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ einops==0.7.0
2
+ protobuf==3.20.3
3
+ llama-index==0.11.20
4
+ llama-index-llms-replicate==0.3.0
5
+ llama-index-llms-openai-like==0.2.0
6
+ llama-index-embeddings-huggingface==0.3.1
7
+ llama-index-embeddings-instructor==0.2.1
8
+ torch==2.5.0
9
+ torchvision==0.20.0
10
+ torchaudio==2.5.0
11
+ streamlit==1.39.0