欢迎光临散文网 会员登陆 & 注册

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

2023-03-16 17:27 作者:czhko  | 我要投稿

第一部分:准备阶段

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 numpy flask libopenmpi-dev


2.安装依赖

pip install torch --extra-index-url https://download.pytorch.org/whl/cu117 --upgrade

pip install -r requirements/requirements.txt

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"} 

python3 t2jsonl.py(代码如下)

------------------------------------------------------------

import json

# Generate a list of dictionaries

lines = []

with open("训练文件.txt", encoding="utf8") as f:

    for line in f.read().splitlines():

        if line:

            lines.append({"text": line})


# Convert to a list of JSON strings

json_lines = [json.dumps(l) for l in lines]

# Join lines and save to .jsonl file

json_data = '\n'.join(json_lines)

with open('训练文件.jsonl', 'w') as f:

    f.write(json_data)

------------------------------------------------------------


4.预处理

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训练需要的训练集


第三部分: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

pip install deepspeed

pip install transformers

pip install rwkv


3.训练

训练格式:

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(看显存,越大越好) --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大模型可以参考以下参数,我的内存条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


5.测试

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


M40显卡通过lora微调国产开源模型RWKV的评论 (共 条)

分享到微博请遵守国家法律