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

news/2024/11/29 4:21:20/

文章目录

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

1. 概要

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

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

from transformers import AutoTokenizer, AutoModelForCausalLMdef 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.shapeelse: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, AutoModelForCausalLMdef 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().Telse: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().Telse: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()

http://www.ppmy.cn/news/1550806.html

相关文章

2024年华为OD机试真题-路灯照明问题-Python-OD统一考试(E卷)

最新华为OD机试考点合集:华为OD机试2024年真题题库(E卷+D卷+C卷)_华为od机试题库-CSDN博客 每一题都含有详细的解题思路和代码注释,精编c++、JAVA、Python三种语言解法。帮助每一位考生轻松、高效刷题。订阅后永久可看,发现新题及时跟新。 题目描述: 在一条笔直的公…

英语知识网站开发:Spring Boot框架应用

3系统分析 3.1可行性分析 通过对本英语知识应用网站实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本英语知识应用网站采用SSM框架&#xff0c;JAVA作为开发语…

day2全局注册

全局注册代码&#xff1a; //文件核心作用&#xff1a;导入App.vue,基于App.vue创建结构渲染index.htmlimport Vue from vue import App from ./App.vue //编写导入的代码&#xff0c;往代码的顶部编写&#xff08;规范&#xff09; import HmButton from ./components/Hm-But…

探索 Docker 网络:编织容器间的通信纽带

在容器化技术蓬勃发展的今天&#xff0c;Docker 凭借其卓越的特性重塑了软件的开发、部署与运行模式。而 Docker 网络作为整个生态系统中不可或缺的关键部分&#xff0c;犹如一张无形却强大的蜘蛛网&#xff0c;巧妙地编织起容器间的通信纽带&#xff0c;确保各个容器能够在复杂…

在 Linux 系统中根据pid查找软件位置

在 Linux 系统中,如果您知道一个进程的 PID(进程标识符),并且想要找到该进程对应的可执行文件的位置,可以使用以下几种方法: 方法一:使用 ps 命令 ps 命令可以显示进程的详细信息,包括可执行文件的路径。假设您的 PID 是 1234,可以使用以下命令: ps -p 1234 -o co…

vue3.5

响应式属性解构 import { watchEffect } from vueconst { count } defineProps([count])watchEffect(() > {// 每次父组件中的 count 属性变化时都会触发这个日志console.log(count) }) useTemplateRef 获取 dom // MyComposable 封装的方法 获取dom export const useMy…

RabbitMQ学习-Three

RabbitMQ逻辑结构 RabbitMQ是一个消息队列系统&#xff0c;它的逻辑结构与传统的数据库&#xff08;如MySQL&#xff09;有所不同。在RabbitMQ中&#xff0c;主要的概念是“virtual host”&#xff08;虚拟主机&#xff09;和“queue”&#xff08;队列&#xff09;&#xff0…

CTF之密码学(费纳姆密码)

一、作为二进制替换密码的费纳姆密码 定义&#xff1a;费纳姆密码是一种由二进制产生的替换密码&#xff0c;也被称为弗纳姆密码&#xff08;Vernam cipher&#xff09;。它采用二进制表示法&#xff0c;将明文转化为二进制数字&#xff0c;并通过与密钥进行模2加法运算来产生密…