josStorer / RWKV-Runner

A RWKV management and startup tool, full automation, only 8MB. And provides an interface compatible with the OpenAI API. RWKV is a large language model that is fully open source and available for commercial use.
https://www.rwkv.com
MIT License
5.05k stars 481 forks source link

最新的rwkv-6-world模型转换后运行出错 #344

Open CJJ-amateur-programmer opened 3 months ago

CJJ-amateur-programmer commented 3 months ago

模型下载链接: https://modelscope.cn/models/Blink_DL/rwkv-6-world/file/view/master?fileName=RWKV-x060-World-7B-v2.1-20240507-ctx4096.pth&status=2

下载后以cuda fp16i8 -> cuda fp16 *1策略直接运行,没有问题; 以同样的策略转换,然后切换至转换完毕的量化模型,以同样策略运行,最后会报错: {"detail":"failed to load: 'types.SimpleNamespace' object has no attribute 'n_head'"} 无论是否开启“使用自定义CUDA算子加速”均出现该问题。

用同样的配置转换RWKV-5-World并运行,没有问题。

所使用的RWKV-Runner版本1.8.2,1.8.1版本测试结果也类似。

code-noob-li commented 2 months ago

我没有AI和向量基础,仅供参考

首先CUDA这块应该是和BlinkDL/ChatRWKV这个仓库相关的,用ChatRWKV跑的话完整报错是

File "/usr/local/lib/python3.10/site-packages/rwkv/model.py", line 1034, in forward
    state[i*3+1] = torch.zeros((args.n_head, args.n_att//args.n_head, args.n_att//args.n_head), dtype=torch.float, requires_grad=False, device=dev).contiguous()
AttributeError: 'types.SimpleNamespace' object has no attribute 'n_head'

所以关键是这个model.py的1034行(WIN下的路径应该是python安装目录的Lib\site-packages\rwkv\model.py),这个args.n_head在直接运行时是存在的,但先量化后再运行加载则会找不到 先在model.py里的243行后面插入一个print('args.n_head:',w[x].shape[0]),进行一次直接运行,我这里可以看的args.n_head的值是40 最后只要在model.py的1034行, state[i*3+1] = torch.zeros((args.n_head, args.n_att//args.n_head, args.n_att//args.n_head), dtype=torch.float 这一行的前面插入一行args.n_head=40

7B模型应该是args.n_head=64 反正就是这么个套路,哪块n_head报错就改哪,保存后即可,注意备份原文件