zhiyun.xu
commited on
Commit
·
5d1ff8c
1
Parent(s):
d573b56
update demo
Browse files
README.md
CHANGED
|
@@ -1,239 +1,13 @@
|
|
| 1 |
-
# 🐒悟了悟了🐒 — 《黑神话:悟空》AI助手
|
| 2 |
-
|
| 3 |
-
<br />
|
| 4 |
-
<!-- PROJECT LOGO -->
|
| 5 |
-
|
| 6 |
-
<p align="center">
|
| 7 |
-
<a href="https://github.com/xzyun2011/wulewule/">
|
| 8 |
-
<img src="./assets/sd_wulewule.webp" alt="Logo" width="30%">
|
| 9 |
-
</a>
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
<h3 align="center"> 悟了悟了</h3>
|
| 14 |
-
<p align="center">
|
| 15 |
-
<br />
|
| 16 |
-
<a href="https://github.com/xzyun2011/wulewule/">查看Demo</a>
|
| 17 |
-
·
|
| 18 |
-
<a href="https://github.com/xzyun2011/wulewule/issues">报告Bug & 提出新特性</a>
|
| 19 |
-
</p>
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
## 📜 前言
|
| 24 |
-
|
| 25 |
-
国产3A游戏《黑神话:悟空》自发布以来,以其精美绝伦的画面、流畅自如的战斗机制、精心雕琢的设计、深厚的文化底蕴等,在全网引发热潮。开发这款“悟了悟了”AI小助手的初衷,是想帮助玩家深入探索游戏的文化内涵,丰富游戏体验。通过解析游戏中的故事情节、角色渊源、与原著的巧妙联系、游戏隐藏细节以及有趣的彩蛋等内容,让玩家更了解游戏背后的中国传统文化,为玩家在酣畅淋漓的战斗之余,带来一场精神上的盛宴。此外,小助手还提供详尽的游戏攻略,助力玩家轻松通关,尽享游戏乐趣。
|
| 26 |
-
|
| 27 |
-
悟了悟了的模型使用 [xtuner](https://github.com/InternLM/xtuner)在 [InternLM2.5](https://github.com/InternLM/InternLM) 微调得到, 首先在一些网络数据(如《西游记》中英文版、《悟空传》等)上进行**增量预训练**,再基于RAG生成的准确的问答对数据集,基于此数据集进行**QLoRA指令微调**。部署时集成了**RAG**和**LMDeploy 加速推理**
|
| 28 |
-
|
| 29 |
-
**项目亮点总结:**
|
| 30 |
-
|
| 31 |
-
1. 📊 基于RAG制作准确实时的新知识数据集
|
| 32 |
-
2. 📚 RAG 检索增强生成回答
|
| 33 |
-
3. 🚀 KV cache + Turbomind 推理加速
|
| 34 |
-
|
| 35 |
-
|
| 36 |
-
|
| 37 |
-
## 🎥 效果图
|
| 38 |
-
|
| 39 |
-
<video src="assets/wulewulev1_7b_4bit.mp4"></video>
|
| 40 |
-
|
| 41 |
-
https://github.com/user-attachments/assets/9e01d57a-96a9-4ca6-855c-2128010cd0c7
|
| 42 |
-
|
| 43 |
-
## 🗂️ 目录
|
| 44 |
-
- [📜 前言](#-前言)
|
| 45 |
-
- [🎥 图效果图](#-效果图)
|
| 46 |
-
- [📊 框架图](#-框架图)
|
| 47 |
-
- [🧩 Model Zoo](#-model-zoo)
|
| 48 |
-
- [🚀 快速使用](#-快速使用)
|
| 49 |
-
- [💻 本地部署](#-本地部署)
|
| 50 |
-
- [🌐 在线体验](#-在线体验)
|
| 51 |
-
- [📖 详细指南](#-详细指南)
|
| 52 |
-
- [🔍 数据集制作](#-数据集制作)
|
| 53 |
-
- [📚 增量预训练数据](#-增量预训练数据)
|
| 54 |
-
- [🤔 自我认知数据](#-自我认知数据)
|
| 55 |
-
- [💬 指令微调数据](#-指令微调数据)
|
| 56 |
-
- [🔄 模型训练](#-模型训练)
|
| 57 |
-
- [🎨 模型量化](#-模型量化)
|
| 58 |
-
- [🔎 RAG(检索增强生成)](#-rag检索增强生成)
|
| 59 |
-
- [📅 开发计划](#-开发计划)
|
| 60 |
-
- [🌟 初版功能](#-初版功能)
|
| 61 |
-
- [🤖 后续多模态版本](#-后续多模态版本)
|
| 62 |
-
- [🙏 致谢](#-致谢)
|
| 63 |
-
- [⚠️ 免责声明](#-免责声明)
|
| 64 |
-
|
| 65 |
---
|
| 66 |
-
|
| 67 |
-
|
| 68 |
-
|
| 69 |
-
|
| 70 |
-
|
| 71 |
-
|
| 72 |
-
|
| 73 |
-
|
| 74 |
-
|
| 75 |
-
|
| 76 |
-
|
| 77 |
-
|
| 78 |
-
| wulewule_v1_7b | internlm2_5_chat_7b | 预训练+QLoRA微调 | [wulewule_v1_7b](https://modelscope.cn/models/xzyun2011/wulewule_v1_7b) | [wulewule_v1_7b](https://openxlab.org.cn/models/detail/xzyun2011/wulewule_v1_7b) |
|
| 79 |
-
| wulewule_v1_7b-w4a16-4bit | internlm2_5_chat_7b | 预训练+QLoRA微调+w4a16量化 | [wulewule_v1_7b-w4a16-4bit](https://modelscope.cn/models/xzyun2011/wulewule_v1_7b-w4a16-4bit) | [wulewule_v1_7b-w4a16-4bit](https://openxlab.org.cn/models/detail/xzyun2011/wulewule_v1_7b-w4a16-4bit) |
|
| 80 |
-
|
| 81 |
-
|
| 82 |
-
|
| 83 |
-
## 🚀 快速使用
|
| 84 |
-
|
| 85 |
-
### 💻 本地部署
|
| 86 |
-
|
| 87 |
-
```shell
|
| 88 |
-
git clone https://github.com/xzyun2011/wulewule.git
|
| 89 |
-
cd wulewule
|
| 90 |
-
conda create -n wulewule python=3.10.0 -y
|
| 91 |
-
conda activate wulewule
|
| 92 |
-
conda install pytorch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 pytorch-cuda=12.1 -c pytorch -c nvidia
|
| 93 |
-
pip install -r requirements.txt
|
| 94 |
-
apt-get install git-lfs
|
| 95 |
-
streamlit run app.py
|
| 96 |
-
```
|
| 97 |
-
|
| 98 |
-
### 🌐 在线体验
|
| 99 |
-
|
| 100 |
-
制作中...
|
| 101 |
-
|
| 102 |
-
wulewule_InternLM2-Chat-1_8版体验地址:https://openxlab.org.cn/apps/detail/xzyun2011/wulewule_v1
|
| 103 |
-
|
| 104 |
-
## 📖 详细指南
|
| 105 |
-
|
| 106 |
-
### 🔍 数据集制作
|
| 107 |
-
|
| 108 |
-
数据制作代码讲解见[数据制作流程](data/readme.md),使用脚本直接制作数据集:
|
| 109 |
-
|
| 110 |
-
#### 📚 增量预训练数据
|
| 111 |
-
|
| 112 |
-
将网络收集到的文本数据切分,执行脚本,得到`incremental_pretraining.jsonl`增量预训练数据
|
| 113 |
-
|
| 114 |
-
```
|
| 115 |
-
conda activate wulewule
|
| 116 |
-
cd wulewule/data
|
| 117 |
-
python3 generate_incremental_pretraining.py --root-path ./ --save-path ./incremental_pretraining.jsonl
|
| 118 |
-
```
|
| 119 |
-
|
| 120 |
-
#### 🤔 自我认知数据
|
| 121 |
-
|
| 122 |
-
将`data_utils.py`中的"api_key"换成自己的,执行脚本,将得到`self_cognition.jsonl`自我认知数据
|
| 123 |
-
|
| 124 |
-
```
|
| 125 |
-
python3 generate_selfcognition.py --save-path ./self_cognition.jsonl
|
| 126 |
-
```
|
| 127 |
-
|
| 128 |
-
#### 💬 指令微调数据
|
| 129 |
-
|
| 130 |
-
开启茴香豆server服务后,执行脚本,将得到`huixiangdou_conversations.jsonl`准确的问答对数据
|
| 131 |
-
|
| 132 |
-
```
|
| 133 |
-
python3 huixiangdou_rag_QA.py
|
| 134 |
-
```
|
| 135 |
-
|
| 136 |
-
### 🔄 模型训练
|
| 137 |
-
|
| 138 |
-
训练配置代码讲解见[训练配置](xtuner_config/readme.md),
|
| 139 |
-
🚨其中有个参数需要注意一下:accumulative_counts = 1 #单卡训练切记改成1,不然会有问题,🚨切记切记!!!
|
| 140 |
-
|
| 141 |
-
命令行直接如下操作:
|
| 142 |
-
|
| 143 |
-
**QLoRA+deepspeed训练**
|
| 144 |
-
|
| 145 |
-
```
|
| 146 |
-
#增量预训练
|
| 147 |
-
xtuner train ./xtuner_config/pretrain/internlm2_5-1_8b-chat_pretrain.py --work-dir ./pretrain --deepspeed deepspeed_zero1
|
| 148 |
-
|
| 149 |
-
#指令微调
|
| 150 |
-
xtuner train ./xtuner_config/finetune/internlm2_5_chat_1_8b_qlora_wulewule_all_test.py --work-dir ./finetune --deepspeed deepspeed_zero1
|
| 151 |
-
```
|
| 152 |
-
|
| 153 |
-
**模型转换 + LoRA 合并**
|
| 154 |
-
|
| 155 |
-
```
|
| 156 |
-
export MKL_SERVICE_FORCE_INTEL=1
|
| 157 |
-
export MKL_THREADING_LAYER=GNU
|
| 158 |
-
##指令微调为例子,先获取最后保存的一个pth文件
|
| 159 |
-
pth_file=`ls -t ./finetune/internlm2_5_chat_1_8b_qlora_wulewule_all_test.py/*.pth | head -n 1| sed 's/:$//' `
|
| 160 |
-
# 转换格式
|
| 161 |
-
xtuner convert pth_to_hf ./internlm2_5_chat_1_8b_qlora_wulewule_all_test.py ${pth_file} ./hf
|
| 162 |
-
# 合并参数
|
| 163 |
-
xtuner convert merge /root/models/internlm2_5-1_8b-chat ./hf /root/wulewule/models/wulewule_v1_1_8b --max-shard-size 2GB
|
| 164 |
-
```
|
| 165 |
-
|
| 166 |
-
### 🎨 模型量化
|
| 167 |
-
|
| 168 |
-
使用一下命令对模型采取w4a16量化,更多操作请参考[lmdeploy官网文档](https://lmdeploy.readthedocs.io/en/latest/)
|
| 169 |
-
|
| 170 |
-
```
|
| 171 |
-
lmdeploy lite auto_awq \
|
| 172 |
-
/root/wulewule/models/wulewule_v1_1_8b \
|
| 173 |
-
--calib-dataset 'ptb' \
|
| 174 |
-
--calib-samples 128 \
|
| 175 |
-
--calib-seqlen 2048 \
|
| 176 |
-
--w-bits 4 \
|
| 177 |
-
--w-group-size 128 \
|
| 178 |
-
--batch-size 1 \
|
| 179 |
-
--search-scale False \
|
| 180 |
-
--work-dir /root/wulewule/models/wulewule_v1_1_8b-w4a16-4bit
|
| 181 |
-
```
|
| 182 |
-
|
| 183 |
-
**量化前后速度对比**
|
| 184 |
-
|
| 185 |
-
| Model | Toolkit | Speed (words/s) |
|
| 186 |
-
| --------------------------- | -------------------- | --------------- |
|
| 187 |
-
| wulewule_v1_1_8b | transformer | 68.0986 |
|
| 188 |
-
| wulewule_v1_1_8b-w4a16-4bit | LMDeploy (Turbomind) | 667.8319 |
|
| 189 |
-
|
| 190 |
-
修改`configs/model_cfg.yaml`文件开启基于lmdeploy的w4a16-4bit模型(默认开启);`deploy/lmdeploy_model.py`里是一个简单的demo,修改配置后可以直接执行
|
| 191 |
-
|
| 192 |
-
```
|
| 193 |
-
python3 deploy/lmdeploy_model.py
|
| 194 |
-
```
|
| 195 |
-
|
| 196 |
-
### 🔎 RAG(检索增强生成)
|
| 197 |
-
|
| 198 |
-
默认`data`目录为txt数据源目录,开启RAG后,会使用bce-embedding-base_v1自动将`data`目录下的txt数据转为换chroma向量库数据,存放在`rag/chroma `目录下(如果该目录下已有数据库文件,则跳过数据库创建),然后使用bce-reranker-base_v1对检索到的信息重排序后,将问题和上下文一起给模型得到最终输出。`rag/simple_rag.py`里是一个简单的demo,参数配置见`configs/rag_cfg.yaml`。
|
| 199 |
-
|
| 200 |
-
RAG代码讲解见[rag配置](rag/readme.md)。
|
| 201 |
-
|
| 202 |
-
|
| 203 |
-
## 📅 开发计划
|
| 204 |
-
|
| 205 |
-
### 🌟 初版功能
|
| 206 |
-
|
| 207 |
-
- [x] 游戏角色、背景故事、原著联系等知识问答助手
|
| 208 |
-
|
| 209 |
-
- [x] 使用RAG支持游戏攻略、菜单、网络梗等新鲜知识的更新
|
| 210 |
-
|
| 211 |
-
- [x] 基于OpenXLab使用LMDepoly实现初版demo部署
|
| 212 |
-
|
| 213 |
-
- [ ] 增加history记忆,增加标准测试集,opencompass评估模型性能
|
| 214 |
-
|
| 215 |
-
### 🤖 后续多模态版本
|
| 216 |
-
|
| 217 |
-
- [ ] 加入语音多模态,如ASR(用户语音输入)、TTS(猴哥语音回答问题)
|
| 218 |
-
|
| 219 |
-
- [ ] 加入图像生成,接入别人的[SD+LoRA模型]( https://www.qpipi.com/73996/ ),判断用户意图生成对应prompt的天命人
|
| 220 |
-
|
| 221 |
-
- [ ] 加入音乐多模态,接类似[SUNO-AI](https://suno-ai.org/),生成古典风格游戏配乐
|
| 222 |
-
|
| 223 |
-
|
| 224 |
-
## 🙏 致谢
|
| 225 |
-
|
| 226 |
-
非常感谢以下这些开源项目给予我们的帮助:
|
| 227 |
-
|
| 228 |
-
- [InternLM](https://github.com/InternLM/InternLM)
|
| 229 |
-
- [Xtuner](https://github.com/InternLM/xtuner)
|
| 230 |
-
- [Imdeploy](https://github.com/InternLM/lmdeploy)
|
| 231 |
-
- [InternlM-Tutorial](https://github.com/InternLM/Tutorial)
|
| 232 |
-
- [HuixiangDou](https://github.com/InternLM/HuixiangDou)
|
| 233 |
-
- [Streamer-Sales](https://github.com/PeterH0323/Streamer-Sales)
|
| 234 |
-
|
| 235 |
-
最后感谢上海人工智能实验室推出的书生·浦语大模型实战营,为我们的项目提供宝贵的技术指导和强大的算力支持!
|
| 236 |
-
|
| 237 |
-
## ⚠️ 免责声明
|
| 238 |
-
|
| 239 |
-
**本项目相关资源仅供学术研究之用,严禁用于商业用途。** 使用涉及第三方代码的部分时,请严格遵循相应的开源协议。模型生成的内容受模型计算、随机性和量化精度损失等因素影���,本项目不对其准确性作出保证。对于模型输出的任何内容,本项目不承担任何法律责任,亦不对因使用相关资源和输出结果而可能产生的任何损失承担责任。本项目由个人及协作者业余时间发起并维护,因此无法保证能及时回复解决相应问题。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
---
|
| 2 |
+
title: 🐒悟了悟了🐒 — 《黑神话:悟空》AI助手
|
| 3 |
+
emoji: 🐒
|
| 4 |
+
colorFrom: purple
|
| 5 |
+
colorTo: red
|
| 6 |
+
sdk: streamlit
|
| 7 |
+
sdk_version: 1.36.0
|
| 8 |
+
app_file: app.py
|
| 9 |
+
license: apache-2.0
|
| 10 |
+
short_description: 基于InterLM的《黑神话:悟空》AI小助手,了解更多背后的故事-
|
| 11 |
+
pinned: true
|
| 12 |
+
disable_embedding: true
|
| 13 |
+
---
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|