You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决加载QFormer预训练权重时的KeyError: 'model.embed_tokens.weight'?

问题解决:KeyError: 'model.embed_tokens.weight'

核心原因

你加载的权重文件checkpoint-15000_embeddings_qformer.bin中不存在model.embed_tokens.weight这个键,要么是键名和代码预期不符,要么该文件本身就不包含LLaMA的词嵌入权重。

解决步骤

1. 先确认权重文件的所有键

在加载权重后添加打印代码,查看文件里实际存在的键:

weights = torch.load(SD_QFormer_conversation_33tokens, map_location="cpu")
# 新增打印所有键
print("权重文件包含的键:", list(weights.keys()))

运行后就能看到该权重文件里的所有可用键,对比代码里的调用,找到对应词嵌入的正确键名。

2. 修改代码中的键名匹配实际情况

如果打印后发现词嵌入的键是embed_tokens.weight(没有model.前缀),就把代码中对应行修改为:

LLaMA_word2vec = weights.pop('embed_tokens.weight')

如果实际键名是其他形式,替换成对应的名称即可。

3. 确认权重文件是否包含LLaMA词嵌入

如果打印后发现权重文件里根本没有词嵌入相关的键,说明这个QFormer checkpoint只保存了QFormer、mm_projector等组件的权重,没有包含LLaMA的词嵌入。这种情况下,你需要从原始LLaMA模型权重中读取model.embed_tokens.weight,或者检查是否应该从LLaVA_00002文件中提取该权重(比如尝试LLaVA_00002_weights['model.embed_tokens.weight'])。

额外验证

修改后可以添加判断,避免直接pop报错:

if 'model.embed_tokens.weight' in weights:
    LLaMA_word2vec = weights.pop('model.embed_tokens.weight')
elif 'embed_tokens.weight' in weights:
    LLaMA_word2vec = weights.pop('embed_tokens.weight')
else:
    # 从其他来源加载或者抛出明确提示
    raise ValueError("权重文件中未找到词嵌入权重")

内容的提问来源于stack exchange,提问作者hshsh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 10:44:52