大语言模型---Llama不同系列的权重参数文件提取;Llama-7B权重文件提取;Llama-8B权重文件提取;主要代码功能解析

文章目录

  • [1. 概要](#1. 概要)
  • [2. Llama-7B权重文件提取](#2. Llama-7B权重文件提取)
  • [3. Llama-8B权重文件提取](#3. Llama-8B权重文件提取)
  • [4. 主要代码功能解析](#4. 主要代码功能解析)

1. 概要

Llama 系列模型(Meta 发布的大语言模型)在开源社区广受欢迎,不同版本(前文已经介绍过7B和8B的区别,详情请点击链接)在应用场景和硬件需求上各有不同,其权重文件的提取方式也略有差异。本文将通过代码讲解如何获取和提取 Llama 7B 和 8B 的权重参数文件。

2. Llama-7B权重文件提取

python 复制代码
from transformers import AutoTokenizer, AutoModelForCausalLM

def save_weight_int(int_weight: torch.Tensor, path):
    if path[-4:] != '.bin':
        raise ValueError('Path must end with .bin')
    int_weight.cpu().detach().numpy().astype(np.int32).tofile(path)

if __name__ == '__main__':

	tokenizer = AutoTokenizer.from_pretrained(model_card, local_files_only = True, cache_dir = "./model-storage")
    model = AutoModelForSequenceClassification.from_pretrained(model_card, local_files_only = True, cache_dir = "./model-storage")

	for (i, w) in model.model.layers[0].named_parameters():
	    if len(w.shape) == 2:
	        pp_size = w.shape[0]
	        pp_size <<= args.log_off_factor  # 位移操作
	    elif len(w.shape) == 1:
	        (pp_size,) = w.shape
	    else:
	        raise ValueError(f"Unexpected shape {w.shape} for parameter {i}")
        print(f"Layer {i}, Parameter {j}, Shape: {w_orig.shape}")
        save_weight_int(w_orig, f"./zkllm-workdir/Llama-2-{args.model_size}b/layer-{i}-{j}-int.bin")

3. Llama-8B权重文件提取

python 复制代码
from transformers import AutoTokenizer, AutoModelForCausalLM

def save_weight_int(int_weight: torch.Tensor, path):
    if path[-4:] != '.bin':
        raise ValueError('Path must end with .bin')
    int_weight.cpu().detach().numpy().astype(np.int32).tofile(path)

if __name__ == '__main__':
	for i, layer in enumerate(model.model.layers):
	    for j, w in layer.named_parameters():
	        # 中间层参数的处理
	        if len(w.shape) == 2:
	            w_orig = w.float().T
	        else:
	            w_orig = w.float()
	        print(f"Layer {i}, Parameter {j}, Shape: {w_orig.shape}")
	        save_weight_int(w_orig, f"./zkllm-workdir/Llama-2-{args.model_size}b/layer-{i}-{j}-int.bin")
	
	# 处理顶层参数(如输出层的 score.weight)
	for name, param in model.named_parameters():
	    if "score.weight" in name:  # 仅处理输出权重
	        if len(param.shape) == 2:
	            w_orig = param.float().T
	        else:
	            w_orig = param.float()
	        print(f"Processing Output Layer Parameter {name}, Shape: {w_orig.shape}")
	        save_weight_int(w_orig, f"./zkllm-workdir/Llama-2-{args.model_size}b/{name.replace('.', '-')}-int.bin")

4. 主要代码功能解析

  1. save_weight_int(int_weight: torch.Tensor, path) 函数

    作用:将权重量化为 int32 数据,并以 .bin 格式保存到指定路径。

  2. 遍历 model.model.layers 的所有参数

python 复制代码
for i, layer in enumerate(model.model.layers):
    for j, w in layer.named_parameters():
  • 遍历模型的每一层(model.model.layers),i是层索引,layer 是每一层的模块。
  • 使用 named_parameters() 遍历每层中的所有参数(权重和偏置)。
    • j 是参数名称(例如 self_attn.q_proj.weight)。
    • w 是参数张量
  1. 中间参数处理(可以去掉)
python 复制代码
if len(param.shape) == 2:
	w_orig = param.float().T
else:
	w_orig = param.float()
相关推荐
John_ToDebug19 分钟前
大模型提示词(Prompt)终极指南:从原理到实战,让AI输出质量提升300%
人工智能·chatgpt·prompt
居然JuRan20 分钟前
LangGraph从0到1:开启大模型开发新征程
人工智能
双向3329 分钟前
实战测试:多模态AI在文档解析、图表分析中的准确率对比
人工智能
用户51914958484531 分钟前
1989年的模糊测试技术如何在2018年仍发现Linux漏洞
人工智能·aigc
bug菌31 分钟前
当AI编程成为标配,Trae如何在激烈竞争中杀出重围?
aigc·ai编程·trae
人类发明了工具32 分钟前
【深度学习-基础知识】单机多卡和多机多卡训练
人工智能·深度学习
用户51914958484542 分钟前
检索增强生成(RAG)入门指南:构建知识库与LLM协同系统
人工智能·aigc
星期天要睡觉1 小时前
机器学习——CountVectorizer将文本集合转换为 基于词频的特征矩阵
人工智能·机器学习·矩阵
lxmyzzs1 小时前
【图像算法 - 14】精准识别路面墙体裂缝:基于YOLO12与OpenCV的实例分割智能检测实战(附完整代码)
人工智能·opencv·算法·计算机视觉·裂缝检测·yolo12
什么都想学的阿超1 小时前
【大语言模型 01】注意力机制数学推导:从零实现Self-Attention
人工智能·语言模型·自然语言处理