#346·RWKV-LM

离域代号 ID 触发 CUDA 设备侧维护, 而不是验证错误

作者: piotrmaciejbednarski创建于 2026年7月24日更新于 2026年7月26日

□ 说明

在模型词汇之外向运行在CUDA上的RWKV-7模型传递一个代号ID会导致低水平的"device-side profile". 然后 CUDA 上下文仍然处于无效状态,所以 Python/Jupyter 进程必须重新启动.

运行时间目前直接索引嵌入式矩阵而不首先验证符号ID:

[Python] x = z ["emb. weight" [idx] (中文(简体) ).


这在使用与检查站不相容的活化剂时可能会不慎发生. 就我而言,这是在把65 536个托起的RWKV World 标语器与一个Pile 检查站(其词汇尺寸为50 304个)合并时发生的。

标致器不匹配是一个集成错误,但由此产生的故障模式可以通过运行时间安全处理.

□ 环境

* `rwkv==.31'
* Python 3.12 (英语).
* PyTorch 2.8.0+cu128 维基语录链接:名人名言 - 文学作品 - 谚语 - 谚语
* 团结与民主联盟 12.8
* NVIDIA L40S (英语).
* 乌邦图24.04
* 型号:`RWKV-x070-Pile-421M-20241127-ctx4096'
* 战略:`cuda fp16'

环境变量:

```(Python)
os.environ ["RWKV V7 ON"]="1" (韩语).
os.environ ["RWKV JIT ON"]="1" (韩语).
os.environ ["RWKV CUDA ON"]="1" (韩语).

□ 最小复制

4zz
导入 Os

os.environ ["RWKV V7 ON"]="1" (韩语).
os.environ ["RWKV JIT ON"]="1" (韩语).
os.environ ["RWKV CUDA ON"]="1" (韩语).

从rwkv.model导入 RWKV

型号 = RWKV(
型号="/path/to/RWKV-x070-Pile-421M-20241127-ctx4096",.
战略="cuda fp16",
(中文(简体) ).

打印 (“ 词汇大小 : ” , model. args.vocab  small)

第一个无效的代号:
无效  token=int(model.args.vocab size)

model.forward([无效 token],无)

□ 实际行为

无效的索引到达了 CUDA 嵌入式搜索,并触发类似以下的断言:

页:1 /pytorch/aten/src/ATen/native/cuda/IndexKernelUtils.cu:16: 向量化 gather 内核 : 缩写 : "超限的集合内核指数"失败.

运行时错误: CUDA 错误: 设备侧面声明被触发


由于CUDA操作是同步的,Python回溯可能指向后期在RWKV前行通道内无关的操作.

在断言后,后续的CUDA操作也失败了,必须重启Jupyter内核或Python进程.

□ 预期行为

运行时间应在启动任何CUDA操作前验证代号,并提出描述性Python例外,例如:

页:1
价值 Error:token ID 50304不在模型词汇范围 [0, 50303].
这可能表示符号/检查点不匹配 。

CUDA的上下文在例外之后仍然可以使用。

□ 建议修正

在“RWKV.forward”开头验证标尺和列出输入,然后拨打“forward 1”或“forward seq”:

8zz
def 前进( 自, idx, 状态, 完全  输出=虚假 ) :
order ids = idx if isintance(idx, list) 其它 [idx]

如果不是符号( ID):
提高值Error( “ 切入序列不能为空 ” )

最小 = 分( token  ids)
最大值 = 最大值 (token ids)
vocab 大小 = int(self.args.vocab 大小)

如果最小 < 0 或最大 >   vocab  大小:
提高值错误( R)
(f) 数据是:
. . . . . . .

内容来源: BlinkDL/RWKV-LM