(自己复盘了一遍neox环境的部署…也是很很曲折)
第一部分:准备阶段
1.系统:Ubuntu22或20或其他Linux系统(win系统有各种各样问题,目前没看到谁成功过)
2.显卡:M40 24G
3.内存:32G
4.显卡驱动:525 (cuda≥11.7即可)
5.cuda:11.7(必须)
6.环境:conda
准备过程就不作赘述了,网上都搜得到
第二部分:neox部署-预处理数据
从https://github.com/ridgerchu/gpt-neox-RWKV上pull后进入该目录下
1.搭建预处理环境
conda create -n pre-t python=3.8(neox官方GitHub推荐用)
2.安装依赖
pip3 install torch==1.13.1 --extra-index-url https://download.pytorch.org/whl/cu117 --upgrade(由
负责吐槽的
发现需要指定一个较低版本的torch,因为发文的时候torch还没更新到那么高,现在已经是2.0反而不能用了)
pip3 install -r requirements/requirements.txt(强烈建议用魔法出国的方式,不要用国内镜像,因为neox官方说他们自己改了一些模块,国内下的镜像有些根本用不了)
export all_proxy="http://127.0.0.1:8889"
export https_proxy="http://127.0.0.1:8889"
export https_proxy="https://127.0.0.1:8889"
pip3 install lm_dataformat
pip3 install tqdm
pip3 install ftfy
pip3 install protobuf==3.19.0
pip3 install numpy
pip3 install deepspeed
(上面几个也是安装过程会出现的……甚至有些依赖里面也有,居然还提示缺失)
mpi4py安装报错时:sudo apt install libopenmpi-dev,pip3 install mpi4py
依赖安装完就直接安装就行
sudo apt-get install make gcc g++
python ./megatron/fused_kernels/setup.py install
3.TXT转换jsonl
预处理需要的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"}
代码如下
------------------------------------------------------------
ss = json.dumps({"meta": meta, "text": text}, ensure_ascii=False)
out.write(ss + "\n")
------------------------------------------------------------
4.预处理
需要提前下载20B_tokenizer.json(rwkv和lora的GitHub上面都有)放在目录下
python3 tools/preprocess_data.py --input ./训练文件.jsonl --output-prefix ./data/训练文件 --vocab ./20B_tokenizer.json --dataset-impl mmap --tokenizer-type HFTokenizer --append-eod
微调完成后会生成相应的bin文件和idx文件,即为lora训练需要的训练集
如果提示有模块缺失就再下一次requirements:pip3 install -r requirements/requirements.txt
第三部分:lora训练
从https://github.com/Blealtan/RWKV-LM-LoRA上pull后进入 RWKV-LM-LoRA / RWKV-v4neo /目录下,将以上bin文件和idx文件复制进该目录(或从绝对路径调用)
1.环境
conda create -n train python=3.10.6 numpy tokenizers prompt_toolkit
2.依赖
pip install torch --extra-index-url https://download.pytorch.org/whl/cu117 --upgrade
pip install pytorch_lightning==1.6.0
pip install deepspeed
pip install transformers
pip install rwkv
3.训练
(如过提示deepspeed没找到就把train.py的235行# Found deepspeed {deepspeed.__version__ if importlib.util.find_spec('deepspeed') else 'None'}, recommend 0.7.0 (faster than newer versions))
训练格式:
python3 train.py --load_model 底模型.pth --lora_load lora模型.pth --proj_dir lora_checkpoints --data_file 预处理数据(不需要加bin或idx,只要文件名) --data_type binidx --vocab_size 50277 --ctx_len 1024(看显存,越大越好,模型文件名有最大ctx_len) --accumulate_grad_batches 8 --epoch_steps 1000 --epoch_count 20 --epoch_begin 0 --epoch_save 5 --micro_bsz 1(改大应该会更好些,显存占用更大) --n_layer 32(看模型) --n_embd 2560(看模型) --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 fp16 --strategy ddp_find_unused_parameters_false --grad_cp 1(开启加速) --lora --lora_r 8 --lora_alpha 32 --lora_dropout 0.01 --lora_parts=att,ffn,time,ln
对于7B大模型可以参考以下参数,内存估计45G,显存估计32G
python3 train.py --load_model RWKV-4-Pile-7B-EngChn-testNovel-2119-ctx2048-20230313.pth --lora_load rwkv-0 --proj_dir lora_checkpoints --data_file 11 --data_type binidx --vocab_size 50277 --ctx_len 512 --accumulate_grad_batches 8 --epoch_steps 1000 --epoch_count 20 --epoch_begin 0 --epoch_save 5 --micro_bsz 1 --n_layer 32 --n_embd 4096 --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 fp16 --strategy ddp_find_unused_parameters_false --grad_cp 1 --lora --lora_r 8 --lora_alpha 32 --lora_dropout 0.01 --lora_parts=att,ffn,time,ln
对于3B大模型可以参考以下参数,内存占用20G,显存16G
python3 train.py --load_model RWKV-4-Pile-3B-Chn-testNovel-done-ctx2048-20230312.pth --lora_load rwkv-0 --proj_dir lora_checkpoints --data_file 11 --data_type binidx --vocab_size 50277 --ctx_len 2048 --accumulate_grad_batches 8 --epoch_steps 1000 --epoch_count 20 --epoch_begin 0 --epoch_save 5 --micro_bsz 1 --n_layer 32 --n_embd 2560 --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 fp16 --strategy ddp_find_unused_parameters_false --grad_cp 1 --lora --lora_r 8 --lora_alpha 32 --lora_dropout 0.01 --lora_parts=att,ffn,time,ln
4.测试
RWKV_JIT_ON=1 python chat.py(需要在chat.py文件里提前写好相应配置,包括:模型地址、lora地址、lora训练参数、n_layer、n_embd等)
参考资料:
neox预处理(转格式binidx):https://github.com/ridgerchu/gpt-neox-RWKV#training-and-finetuning
lora训练:https://github.com/Blealtan/RWKV-LM-LoRA#lora-fork-of-rwkv-lm
rwkv:https://github.com/BlinkDL/RWKV-LM#training--fine-tuning