README.md 5.0 KB
Newer Older
CSDN-Ada助手's avatar
CSDN-Ada助手 已提交
1

CSDN-Ada助手's avatar
readme  
CSDN-Ada助手 已提交
2 3
## ChatCSDN
ChatCSDN基于RWKV1.5B基模型
CSDN-Ada助手's avatar
CSDN-Ada助手 已提交
4 5 6 7
源码来源于:https://github.com/BlinkDL/RWKV-LM/tree/main/RWKV-v4neo  
主要是在RWKV提供的1.5B参数的基础之上,使用CSDN的问答数据和博客数据进行增量预训练,经过指令微调,得到拥有IT行业知识体系的大语言模型。   
原始模型参数地址:https://huggingface.co/BlinkDL/rwkv-4-pile-1b5   
微调后的模型参数地址:https://huggingface.co/zxm2023/ChatCSDN   
CSDN-Ada助手's avatar
CSDN-Ada助手 已提交
8
介绍博客地址:https://blog.csdn.net/zxm2015/article/details/130227450
U
u010280923 已提交
9
<br>人类反馈强化学习 (RLHF) 博客:https://blog.csdn.net/u010280923/article/details/130283628
CSDN-Ada助手's avatar
CSDN-Ada助手 已提交
10

CSDN-Ada助手's avatar
CSDN-Ada助手 已提交
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
## 硬件需求
训练时采用的机器配置:  
内存:256G  
显卡:Nvidia Quadro RTX 6000 24G   
但是实际上是用不完的,推理4G显存,训练10G显存足够。同时推理也是支持CPU的,只是速度较慢。

## 快速开始
1、安装依赖
pip install -m requirements.txt   
2、[下载模型参数](https://huggingface.co/zxm2023/ChatCSDN)   
3、修改chat.py,将model_path修改为下载好的模型地址替换   
args.MODEL_NAME = 'model_path'   
4、运行python chat.py


CSDN-Ada助手's avatar
CSDN-Ada助手 已提交
26
## 预处理数据
CSDN-Ada助手's avatar
readme  
CSDN-Ada助手 已提交
27
使用项目 https://github.com/EleutherAI/gpt-neox 提供的数据转换工具将.jsonl文件转换为.bin和.idx文件,目前已经将代码全部移植过来,放在tools文件夹中。词典使用的是20B_tokenizer.json。
CSDN-Ada助手's avatar
CSDN-Ada助手 已提交
28 29 30 31 32 33
jsonl文件格式示例:
```
{"meta": {"ID": 101}, "text": "This is the first document."}
{"meta": {"ID": 102}, "text": "Hello\nWorld"}
{"meta": {"ID": 103}, "text": "1+1=2\n1+2=3\n2+2=4"}
```
CSDN-Ada助手's avatar
readme  
CSDN-Ada助手 已提交
34

CSDN-Ada助手's avatar
CSDN-Ada助手 已提交
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
使用clean_data.py中的clean_ask_data和clean_blog_data方法可以将从odps中拉取的数据转换成jsonl文件。
进入tools文件夹下使用如下命令进行转换:
```
python preprocess_data.py \
            --input ../data/data.txt \
            --output-prefix ../data/blog \
            --vocab ../20B_tokenizer.json \
            --dataset-impl mmap \
            --tokenizer-type HFTokenizer \
            --append-eod

python preprocess_data.py \
            --input ../data/ask.json \
            --output-prefix ../data/ask \
            --vocab ../20B_tokenizer.json \
            --dataset-impl mmap \
            --tokenizer-type HFTokenizer \
            --append-eod
```

CSDN-Ada助手's avatar
readme  
CSDN-Ada助手 已提交
55
## 预训练示例
CSDN-Ada助手's avatar
CSDN-Ada助手 已提交
56 57

```
CSDN-Ada助手's avatar
readme  
CSDN-Ada助手 已提交
58
python train.py  --load_model "RWKV-4-Pile-1B5-EngChn-test4-20230115.pth" --wandb "" --proj_dir "out" \
CSDN-Ada助手's avatar
CSDN-Ada助手 已提交
59 60 61 62 63 64 65
--data_file "data/blog_text_document" --data_type "binidx" --vocab_size 50277 \
--ctx_len 1024 --epoch_steps 200 --epoch_count 1000 --epoch_begin 0 --epoch_save 10 \
--micro_bsz 8 --n_layer 24 --n_embd 2048 --pre_ffn 0 --head_qk 0 \
--lr_init 1e-5 --lr_final 1e-5 --warmup_steps 0 --beta1 0.9 --beta2 0.999 --adam_eps 1e-8 \
--accelerator gpu --devices 1 --precision bf16 --strategy deepspeed_stage_2_offload --grad_cp 1
```

CSDN-Ada助手's avatar
fix bug  
CSDN-Ada助手 已提交
66 67 68

## 接入Instruction Tuning

CSDN-Ada助手's avatar
readme  
CSDN-Ada助手 已提交
69
使用指令数据集进行监督训练,精调语言模型,指令数据可以看成是问答对,训练时对答案部分进行loss计算。这部分数据来源于BELLE(https://github.com/LianjiaTech/BELLE)开源的数据集。
CSDN-Ada助手's avatar
fix bug  
CSDN-Ada助手 已提交
70 71

```
CSDN-Ada助手's avatar
readme  
CSDN-Ada助手 已提交
72
python train_sft.py  --load_model "out/rwkv-790.pth" --wandb "" --proj_dir "out_sft" \
CSDN-Ada助手's avatar
fix bug  
CSDN-Ada助手 已提交
73
--data_file "data/prompts.csv" --data_type "utf-8" --vocab_size 50277 \
CSDN-Ada助手's avatar
readme  
CSDN-Ada助手 已提交
74
--ctx_len 1024 --epoch_steps 200 --epoch_count 1000 --epoch_begin 0 --epoch_save 20 \
CSDN-Ada助手's avatar
fix bug  
CSDN-Ada助手 已提交
75 76 77 78 79 80 81
--micro_bsz 8 --n_layer 24 --n_embd 2048 --pre_ffn 0 --head_qk 0 \
--lr_init 1e-5 --lr_final 1e-5 --warmup_steps 0 --beta1 0.9 --beta2 0.999 --adam_eps 1e-8 \
--accelerator gpu --devices 1 --precision bf16 --strategy deepspeed_stage_2_offload --grad_cp 1 \
--my_qa_mask 1
```


CSDN-Ada助手's avatar
CSDN-Ada助手 已提交
82 83
## TODO

CSDN-Ada助手's avatar
fix bug  
CSDN-Ada助手 已提交
84 85
### Reward Model

U
u010280923 已提交
86
```
U
u010280923 已提交
87
python train_rm.py  --load_sft_model "./out_sft/rwkv-190.pth" --wandb "" --proj_dir "out_rm" \
U
u010280923 已提交
88
--data_file "data/rm_mock_data.csv" --data_type "utf-8" --vocab_size 50277 \
U
u010280923 已提交
89
--ctx_len 1024 --epoch_steps 200 --epoch_count 1000 --epoch_begin 0 --epoch_save 2 \
U
u010280923 已提交
90 91 92 93 94 95
--micro_bsz 2 --n_layer 24 --n_embd 2048 --pre_ffn 0 --head_qk 0 \
--lr_init 1e-5 --lr_final 1e-5 --warmup_steps 0 --beta1 0.9 --beta2 0.999 --adam_eps 1e-8 \
--accelerator gpu --devices 1 --precision bf16 --strategy deepspeed_stage_2_offload --grad_cp 1 \
--my_qa_mask 1
```

CSDN-Ada助手's avatar
CSDN-Ada助手 已提交
96

U
u010280923 已提交
97 98 99
### PPO Model (Reinforcement learning from Human Feedback)

```
U
u010280923 已提交
100
python train_ppo.py  --load_sft_model "./out_sft/rwkv-190.pth" --load_rm_model "./out_rm/rm-2.pth" --wandb "" \
U
u010280923 已提交
101 102 103 104 105
--proj_dir "out_rlhf" \
--data_file "data/rm_mock_data.csv" --data_type "utf-8" --vocab_size 50277 \
--ctx_len 1024 --epoch_steps 200 --epoch_count 1000 --epoch_begin 0 --epoch_save 2 \
--micro_bsz 2 --n_layer 24 --n_embd 2048 --pre_ffn 0 --head_qk 0 \
--lr_init 1e-5 --lr_final 1e-5 --warmup_steps 0 --beta1 0.9 --beta2 0.999 --adam_eps 1e-8 \
U
u010280923 已提交
106
--accelerator gpu --devices 1 --precision bf16 --strategy deepspeed_stage_2_offload --grad_cp 1 \
U
u010280923 已提交
107 108
--my_qa_mask 1
```
CSDN-Ada助手's avatar
CSDN-Ada助手 已提交
109

CSDN-Ada助手's avatar
CSDN-Ada助手 已提交
110 111 112
### 协议
本仓库的代码依照 [Apache-2.0](LICENSE) 协议开源,模型参数同样需要遵循相应的开源协议。
模型受限于参数量和训练数据,可能会产生与事实相违背/有危害性的答案,因此本项目仅供学习研究使用。
CSDN-Ada助手's avatar
CSDN-Ada助手 已提交
113

CSDN-Ada助手's avatar
fix bug  
CSDN-Ada助手 已提交
114