最新的rwkv-6-world模型转换后运行出错
CJJ-amateur-programmer opened this issue · 1 comments
下载后以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版本测试结果也类似。
我没有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报错就改哪,保存后即可,注意备份原文件