Spaces:
Sleeping
Sleeping
Commit
·
732221f
1
Parent(s):
0c06fc0
Add files
Browse files- app.py +83 -0
- data/README_zh-CN.md +184 -0
- 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
|