大语言模型---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()
相关推荐
冬奇Lab7 小时前
代码库知识库系列(13):评测——怎么知道知识库够不够好
人工智能
字节跳动视频云技术团队7 小时前
把 AI 视频的钱花在刀刃上,不是每一刀上
人工智能·音视频开发
jufeng13077 小时前
【系列:手搓自主 AI Agent:Hermes 架构原理剖析 · 第 1 篇】
人工智能·python·架构·agent
制造业的搬运工7 小时前
智能窗帘PCB低功耗设计方案:架构要点与设计建议
人工智能·科技·架构·制造·pcb工艺
意图共鸣7 小时前
意图共鸣科技8月10日正式发布《AI协作记忆系统 · 认知架构白皮书》
人工智能·科技·microsoft
牧羊人.3338 小时前
计算机视觉基础|第2章 OpenCV图像基础操作(读写、窗口、像素操作)
人工智能·opencv·计算机视觉
avi91118 小时前
[AI教做人]AI平台做2项目;一个3D模型展示,另一个框架多人
javascript·人工智能·ai·3d模型·3d引擎·顶点和法线
焱童鞋8 小时前
基于DJL的LSTM水文预报模型训练完整指南
人工智能·rnn·lstm
猎嘤一号8 小时前
博弈论(Game Theory)的理论、算法与工程
人工智能·算法·安全·博弈论
V哥AI增长8 小时前
Schema.org 结构化数据与GEO技术落地:AI引擎引用机制与JSON-LD部署实证研究
大数据·运维·人工智能