微调RWKV6代7b的Lora,语料切好共1874500条,训练参数求建议!

根据群友的意见,“epoch_steps = 语料条目/micro_bsz”,我micro_bsz选4的话,epoch_steps就变成恐怖的468625……
训练参数如下图,求各位大佬的建议。我的显卡是4090,24gb显存,64g内存。cpu是i9。这么多语料,该怎么训练,求大佬指教!
以下是训练参数:

load_model='/mnt/f/AI_software/RWKV-Runner/models/RWKV-x060-World-7B-v3-20241112-ctx4096.pth'
proj_dir='/mnt/f/output_lora'
data_file='/mnt/f/json2binidx_tool-main/data/0.merged_output_text_document'

n_layer=32
n_embd=4096

micro_bsz=4
epoch_save=5
epoch_steps=468625
ctx_len=1024

lora_config='{"lora_load":"","lora_r":64,"lora_alpha":128,"lora_dropout":0.01}'

python train.py --load_model $load_model \
--proj_dir $proj_dir --data_file$data_file \
--vocab_size 65536 \
--n_layer $n_layer --n_embd$n_embd \
--data_type binidx --dataload pad --loss_mask pad \
--ctx_len $ctx_len --micro_bsz$micro_bsz \
--epoch_steps $epoch_steps --epoch_count 5 --epoch_begin 0 --epoch_save$epoch_save \
--lr_init 5e-5 --lr_final 5e-5 --warmup_steps 0 --beta1 0.9 --beta2 0.99 --adam_eps 1e-8 \
--accelerator gpu --devices 1 --precision bf16 --strategy deepspeed_stage_1 --grad_cp 1 \
--my_testing "x060" \
--peft lora --lora_config $lora_config

这样是完整过一轮你的数据,当然你可以不完整过一轮,你把steps调整为1000或者10000。–epoch_count 设置你要的轮数,然后测试不同轮数的效果,选择最符合的要求的一轮即可

3 Likes

【问题补充】
语料是我收集的总共3500多本言情小说,切成如下续写的格式:
{“text”: “User: 1024字节以内的段落开头\n\nAssistant: 3×1024个字节的后续文本”}

我希望炼成后能更擅长写言情一些,其中还包括NSFW的内容,我希望模型写这类内容的时候,能更偏向女性视角……lora以外,还有更推荐的微调模式吗?

1 Like

谢谢大佬!求问一下,steps和epoch_count分别影响什么?设置成1000,意思是,只阅读一千条语句吗?

steps 就是你这一轮训练多少数据(乘上你的bsz),epoch_count就是训练轮数。假设你一轮训练所有数据你设置epoch_count=3 就是重复训练3遍

1 Like

我推荐你使用bone微调,详细参考scripts

1 Like

谢谢大佬,我这个格式 → {“text”: “User: 1024字节以内的段落开头\n\nAssistant: 3×1024个字节的后续文本”} → 对应的ctx_len不是1024,而是1024*3!也就是ctx_len=4096,对吧!好的,我改一下,根据您的推荐,用bone试试看!

一个汉字占三个字节,所以上下文长度1536就够了

不是,我切的时候按照字节切的,所以精确是:前文1024+后文1024*3个字节。等等……嘶……ctx_len的单位应该是字节数,不是汉字数吧?

是token数,对于RWKV,每个汉字是一个token。

1 Like

这是Bone的训练教程里的内容:
image
上面写着Pissa建议,而不是Bone。呃……Pissa和Bone在这个参数上是一样的吗?

1 Like

微调这些都是一样的

1 Like

啊?真的吗?ctx_len是tooken???按照汉字来算!?(说明,我可以塞更多文字了?╰(°▽°)╯)

1 Like

当然!按照汉字来算,RWKV分词器基本上是一个汉字一个token。
但这里不建议微调不合适的内容或者让模型产生不良文学

1 Like

其实也多不了几个字,而且每条数据还要少一个token,因为结尾会自动在tokenize的时候加入\0

1 Like

多很多了,因为我以前以为这个东西装的是字节。现在改成以汉字为单位了,我的4090小水管终于跑起来了!!!