M40显卡通过lora微调国产开源模型RWKV

专栏 / M40显卡通过lora微调国产开源模型RWKV

M40显卡通过lora微调国产开源模型RWKV

2023年03月16日 17:27 --阅读 · --喜欢 · czhko
粉丝: 69 文章: 3

(自己复盘了一遍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


投诉或建议
莎头/【如果能忍住01】
私设2028洛奥后孙颖莎大满贯退役 王楚钦继续征战破镜重圆 微虐He 一切皆为颅内产物假假假别上升!! 001 “让我们来欢迎大满贯得主及CHAMPIONPOINT创始人孙颖莎为我们致辞” “各位媒体朋友、现场的球迷,大家下午好。首次为自己的新场馆剪彩致辞还是有很多感慨,但究其根本依旧很高兴大家能来支持新球馆的开业典礼。 自退役后,我在家人及朋友的支持下开创了CHAMPIONPOINT俱乐部,冠军点在一年之内火速启航并在成都、上海、苏州、石家庄开设分馆都离不开大家的支持,新馆落户北京更让我忆起在北京集训训
卡西欧首款温度传感器双显——Casio Thermo Meter aw10
在我的印象里,卡西欧在早期一般的感器型号都以大直径,厚机身,并且大致都是想方设法将传感器模块用最显眼的方式冲击你的视觉。而使用传统手表样式并搭载传感器的型号,可谓是少之又少。或许是审美疲劳,在接触了一系列标新立异的传感器外型号外观后,偶然看到一款常规款式平淡无奇的外观却又是另一番风味。发行于大概1987年左右的aw10,属于卡西欧早期的wrist instrument系列支线,搭载了温度传感器,可以测量温度范围:-10到60摄氏度。并且搭配了八十年代卡西欧常常用的双时间功能。aw10使用全塑料机身,传统圆