将LLaMA 13B权重转换为HuggingFace格式时出错求助
LLaMA 13B权重转HF格式时shape不匹配错误的解决方法
问题描述
已下载LLaMA 7B和13B模型权重,使用HuggingFace转换脚本成功将7B模型转为torch二进制文件,但转换13B时触发以下错误:
Fetching all parameters from the checkpoint at /content/drive/MyDrive/User/NLP/Base_Models/Llama_weights/13B. Traceback (most recent call last): File "/content/drive/MyDrive/User/NLP/Base_Models/convert_llama_weights_to_hf.py", line 278, in <module> main() File "/content/drive/MyDrive/User/NLP/Base_Models/convert_llama_weights_to_hf.py", line 268, in main write_model( File "/content/drive/MyDrive/User/NLP/Base_Models/convert_llama_weights_to_hf.py", line 151, in write_model [ File "/content/drive/MyDrive/User/NLP/Base_Models/convert_llama_weights_to_hf.py", line 152, in <listcomp> loaded[i][f"layers.{layer_i}.attention.wq.weight"].view(n_heads_per_shard, dims_per_head, dim) RuntimeError: shape '[20, 128, 5120]' is invalid for input of size 16777216
使用环境为Google Colab,初始安装命令:
!pip install git+https://github.com/zphang/transformers.git@llama_push torch
需解决该问题以获取基于LLaMA 13B的StableVicuna模型。
解决步骤
1. 检查13B权重文件完整性
- 确认13B权重目录下存在
consolidated.00.pth、consolidated.01.pth两个分片文件,以及params.json配置文件 - 核对文件大小:每个
consolidated文件约20GB,若文件缺失、大小不符,重新下载完整权重
2. 更换兼容的transformers版本
原安装的第三方旧分支存在兼容性问题,替换为官方最新版:
!pip uninstall -y transformers !pip install --upgrade transformers accelerate torch
重新获取官方转换脚本:
!wget https://raw.githubusercontent.com/huggingface/transformers/main/src/transformers/models/llama/convert_llama_weights_to_hf.py
3. 正确执行转换命令(指定分片数量)
13B模型默认分为2个分片,转换时必须明确指定--num_shards 2,同时添加--low_cpu_mem_usage降低内存占用:
python convert_llama_weights_to_hf.py \ --input_dir /content/drive/MyDrive/User/NLP/Base_Models/Llama_weights/13B \ --output_dir /content/drive/MyDrive/User/NLP/Base_Models/Llama_hf/13B \ --num_shards 2 \ --low_cpu_mem_usage
注:若Colab内存不足,建议切换到高RAM实例(Colab Pro/Pro+)
4. 验证转换结果
转换完成后,用以下代码测试模型是否能正常加载:
from transformers import AutoModelForCausalLM, AutoTokenizer model = AutoModelForCausalLM.from_pretrained("/content/drive/MyDrive/User/NLP/Base_Models/Llama_hf/13B", low_cpu_mem_usage=True) tokenizer = AutoTokenizer.from_pretrained("/content/drive/MyDrive/User/NLP/Base_Models/Llama_hf/13B")
加载成功后,即可基于该HF格式LLaMA 13B模型获取StableVicuna(可通过加载LoRA权重合并或直接使用合并后的模型)
内容的提问来源于stack exchange,提问作者Kadri
相关产品推荐
相关产品推荐

