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

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

时间:2024-12-01 15:58:22浏览次数:11  
标签:提取 权重 weight int shape Llama model orig

文章目录

1. 概要

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

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

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权重文件提取

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 的所有参数

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. 中间参数处理(可以去掉)
if len(param.shape) == 2:
	w_orig = param.float().T
else:
	w_orig = param.float()

标签:提取,权重,weight,int,shape,Llama,model,orig
From: https://blog.csdn.net/weixin_43883448/article/details/144054045

相关文章

  • 【每天一篇深度学习论文】基于CNN和Transformer的局部和全局特征提取模块
    目录论文介绍题目:论文地址:创新点方法整体结构实验结果即插即用模块代码论文介绍题目:LEFormer:AHybridCNN-TransformerArchitectureforAccurateLakeExtractionfromRemoteSensingImagery论文地址:https://arxiv.org/pdf/2308.04397创新点这篇文章介......
  • 大语言模型(1)--LLaMA
    LLaMA(LargeLanguageModelMetaAI)是由MetaAI于2023年2月发布的大语言系列模型,它应该是近两年来影响力最大的自然语言处理大模型。在它的带动下,雨后春笋般地涌现出来不同语言、不同领域下的各种大模型。值得注意的是,最早Meta在非商业许可的情况下发布了LLaMA的模型权重,仅......
  • 使用 Amazon Data Firehose 一步将 CloudWatch 日志和指标提取到 Elastic Observabili
    作者:来自Elastic AkhileshPokhariyal•MykolaHarmash•KaiyanWhiteAWS用户现在可以利用新的引导式入门工作流程在ElasticCloud中提取CloudWatch日志和指标,并使用提供的CloudFormation模板在几分钟内探索二十多种AWS服务的使用情况和性能。新快速入门指导工......
  • ollama部署bge-m3,并实现与dify平台对接
    概述这几天为了写技术博客,各种组件可谓是装了卸,卸了装,只想复现一些东西,确保你们看到的东西都是可以复现的。(看在我这么认真的份上,求个关注啊,拜托各位观众老爷了。)这不,为了实验在windows上docker里运行pytorch,把docker重装了。dify也得重装:Dify基础:Dify平台的本地化部署......
  • 【优化】-审批任务候选人提取超时
    背景低代码审批流在创建审批任务时需要为审批任务分配审批人,在配置审批人的时候,可以选择不同维度的身份,如用户、岗位、角色、组织,可以同时配置多个维度,每个维度的结果取交集。在这个基础上还可以根据运行时环境不同选择不同组织下的用户,例如当前登录组织的上n级或者下n级,也可以......
  • Easy发票查验软件新增“铁路电子发票明细“表,全量、批量提取铁路电子发票信息
    铁路电子发票实行后,售票和退票的费用均可开具铁路电子发票,但两类业务的税率有所不同:售票税率为9%,退票税率为6%。由于铁路电子发票票面未显示税率和税额,给使用带来了一定不便。针对这一问题,Easy发票查验软件新增了“铁路电子发票明细”功能,可全量、批量提取发票信息至明细表中,包......
  • 如何具体实现商品详情的提取?
    在电商领域,获取商品详情信息对于市场分析、价格比较、商品推荐等应用场景至关重要。本文将详细介绍如何使用Java编写爬虫程序,以合法合规的方式获取淘宝商品的详情信息,并提供详细的代码示例。1.环境准备在开始编写爬虫之前,需要准备以下开发环境和工具:Java开发环境:确保你的......
  • Llamaindex中的聊天记录存储和记忆memory使用教程
    聊天存储(ChatStore)聊天存储(ChatStore)作为一个集中的接口,用于存储您的聊天记录。聊天历史与其他存储格式相比具有独特性,因为消息的顺序对于维持整个对话非常重要。聊天存储可以通过键(如用户ID或其他唯一标识字符串)来组织一系列的聊天消息,并处理删除、插入和获取等操作。......
  • 数据提取服务对企业的意义?
    在当下互联网时代,已经开始向数据化领域迈步,人工智能,大数据无不需要数据的支撑。而数据提取和爬虫也渐渐在企业占据重要位置。那数据提取服务对企业有什么意义,本文小编就为大家介绍一下?1、了解用户反馈通过对采集数据的分析,企业可以了解客户的反馈。例如,企业可以通过数据分析......
  • HTTP代理中的API提取链接解析?
    HTTP代理是网络中重要的组件,而API链接提取则是在HTTP代理中实现的一种关键功能。本文将深入探讨HTTP代理中的API链接提取,包括其工作原理、用途以及实现方法。我们将介绍API链接提取的背景和概念,详细说明其在代理服务器中的实现方式和应用场景。1、背景和概念HTTP代理充当了客......