## chatCSDN 源码来源于https://github.com/BlinkDL/RWKV-LM/tree/main/RWKV-v4neo 主要是在作者提供的1.5B参数的基础之上,使用CSDN的问答数据和博客数据进行再次训练,经过Prompt-tuning和Instruction-Tuning,以及RLHF等微调之后得到拥有IT行业知识体系的chatCSDN。 原始模型参数地址:https://huggingface.co/BlinkDL/rwkv-4-pile-1b5 ## 预处理数据 使用项目 https://github.com/EleutherAI/gpt-neox 提供的数据转换工具讲.jsonl文件转换为.bin和.idx文件,目前已经将代码全部移植过来,放在tools文件夹中。词典使用的是20B_tokenizer.json。 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"} ``` 使用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 ``` ## 训练示例 ``` python train.py --load_model "rwkv-80.pth" --wandb "" --proj_dir "out" \ --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 ``` ## 接入Instruction Tuning 使用指令数据集进行监督训练,精调语言模型,指令数据集格式为句子对。这部分数据需要由开发人员来进行编写,有的语料需要涉及到推理过程。 ``` python train_sft.py --load_model "rwkv-190.pth" --wandb "" --proj_dir "out_sft" \ --data_file "data/prompts.csv" --data_type "utf-8" --vocab_size 50277 \ --ctx_len 2048 --epoch_steps 200 --epoch_count 1000 --epoch_begin 0 --epoch_save 2 \ --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 ``` ## TODO ### Reward Model ``` python train_rm.py --load_sft_model "./out_sft/rwkv-190.pth" --wandb "" --proj_dir "out_rm" \ --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 \ --accelerator gpu --devices 1 --precision bf16 --strategy deepspeed_stage_2_offload --grad_cp 1 \ --my_qa_mask 1 ``` ### PPO Model (Reinforcement learning from Human Feedback) ``` python train_ppo.py --load_sft_model "./out_sft/rwkv-190.pth" --load_rm_model "./out_rm/rm-2.pth" --wandb "" \ --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 \ --accelerator gpu --devices 1 --precision bf16 --strategy deepspeed_stage_2_offload --grad_cp 1 \ --my_qa_mask 1 ```