AI大模型随机初始化权重并打印网络结构方法(以Deepseekv3为例,单机可跑)

embedded/2025/2/12 21:06:52/

背景

当前大模型的权重加载和调用,主要是通过在HuggingFace官网下载并使用transformer的库来加以实现;其中大模型的权重文件较大(部分>100GB),若只是快速研究网络结构和数据流变化,则无需下载权重。本文基于这个背景,做了如下尝试,实现了在无需下载权重的情况下打印模型结构和网络的输入输出

一、基本介绍

1 HuggingFace的文件说明

一般而言,在HuggingFace官网,打开对应的模型,然后点击Files and versions,就会出现模型权重文件和一些相对应的代码和json文件。
config.json文件:模型的配置文件,包含模型的架构和参数配置信息。
configuration_deepseek.py文件:DeepSeekv3模型的配置脚本,定义了模型的具体配置和参数。
model-00001-of-000163.safetensors文件:模型的权重文件之一,存储了模型的部分参数(这里表示总共有163个权重文件,特别庞大)
model.safetensors.index.json文件:模型权重文件的索引文件,记录了各个权重文件的分片信息
modeling_deepseek.py文件:DeepSeekv3模型的实现脚本,包含模型的定义和相关函数
tokenizer.json文件:分词器的配置文件,定义了分词器的词汇表和相关参数
tokenizer_config.json文件:分词器的配置文件,包含分词器的配置信息
在这里插入图片描述

2 加载模型的Python库说明

这里展示一段加载模型权重并打印网络结构的代码示例

from transformers import AutoModelForCausalLM
model_path = "model.safetensors"
model = AutoModelForCausalLM.from_pretrained(model_path)
print(model)

其中,AutoModelForCausalLM 是 Hugging Face 的 transformers 库中的一个类,用于加载预训练的因果语言模型。以下是 AutoModelForCausalLM.from_pretrained 方法的入参说明

pretrained_model_name_or_path:预训练模型的名称或路径,可以是Hugging Face模型库中的模型名称,也可以是本地模型文件夹的路径。
config:自定义的模型配置对象,可以传入一个PretrainedConfig对象,用于手动配置模型。如果未提供,系统会从pretrained_model_name_or_path自动加载相应的配置。
state_dict:预加载的模型权重字典,用于初始化模型权重。
cache_dir:指定缓存目录,用于下载和存储模型文件。
from_tf:是否从TensorFlow模型加载权重。
force_download:是否强制重新下载模型权重。
resume_download:在下载过程中,如果发生中断,是否从中断点继续下载。

二、Deepseekv3的随机权重加载和网络结构分析

硬件说明:一台RTX4090显卡(24GB显存)
工程目录
在这里插入图片描述
其中,config.json、configuration_deepseek.py和modeling_deepseek.py都是从hugging face直接下载的。

2.1 编辑config.json

由于显存受限,因此这里将hidden_size、intermediate_size和moe_intermediate_size,使得61层的网络能够加载在单卡上。

hidden_size: 模型中隐藏层的维度,通常与模型的输入维度相同;原始为7168,现修改为256
intermediate_size: 模型中MLP的中间层维度;原始为18432,现修改为1024
moe_intermediate_size: 模型中MOE的中间层维度;原始为2048,现修改为128

2.2 编写py脚本

import torch
from configuration_deepseek import DeepseekV3Config
from modeling_deepseek import DeepseekV3ForCausalLMdevice = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")config_file = "config.json"model_config = DeepseekV3Config.from_pretrained(config_file)
model = DeepseekV3ForCausalLM(config=model_config).to(torch.float16).eval()
model = model.to(device)# 打印模型结构
print(model)dummy_input = torch.randint(low=0, high=129280, size=(4, 64), dtype=torch.long).to(device)
output = model(dummy_input)
# 打印输出张量的形状
print(output.logits.shape)

2.3 打印网络结构

显存占用情况
在这里插入图片描述
Deepseekv3网络结构和输入输出shape

DeepseekV3ForCausalLM((model): DeepseekV3Model((embed_tokens): Embedding(129280, 256)(layers): ModuleList((0-2): 3 x DeepseekV3DecoderLayer((self_attn): DeepseekV3Attention((q_a_proj): Linear(in_features=256, out_features=1536, bias=False)(q_a_layernorm): DeepseekV3RMSNorm()(q_b_proj): Linear(in_features=1536, out_features=24576, bias=False)(kv_a_proj_with_mqa): Linear(in_features=256, out_features=576, bias=False)(kv_a_layernorm): DeepseekV3RMSNorm()(kv_b_proj): Linear(in_features=512, out_features=32768, bias=False)(o_proj): Linear(in_features=16384, out_features=256, bias=False)(rotary_emb): DeepseekV3YarnRotaryEmbedding())(mlp): DeepseekV3MLP((gate_proj): Linear(in_features=256, out_features=1024, bias=False)(up_proj): Linear(in_features=256, out_features=1024, bias=False)(down_proj): Linear(in_features=1024, out_features=256, bias=False)(act_fn): SiLU())(input_layernorm): DeepseekV3RMSNorm()(post_attention_layernorm): DeepseekV3RMSNorm())(3-60): 58 x DeepseekV3DecoderLayer((self_attn): DeepseekV3Attention((q_a_proj): Linear(in_features=256, out_features=1536, bias=False)(q_a_layernorm): DeepseekV3RMSNorm()(q_b_proj): Linear(in_features=1536, out_features=24576, bias=False)(kv_a_proj_with_mqa): Linear(in_features=256, out_features=576, bias=False)(kv_a_layernorm): DeepseekV3RMSNorm()(kv_b_proj): Linear(in_features=512, out_features=32768, bias=False)(o_proj): Linear(in_features=16384, out_features=256, bias=False)(rotary_emb): DeepseekV3YarnRotaryEmbedding())(mlp): DeepseekV3MoE((experts): ModuleList((0-255): 256 x DeepseekV3MLP((gate_proj): Linear(in_features=256, out_features=128, bias=False)(up_proj): Linear(in_features=256, out_features=128, bias=False)(down_proj): Linear(in_features=128, out_features=256, bias=False)(act_fn): SiLU()))(gate): MoEGate()(shared_experts): DeepseekV3MLP((gate_proj): Linear(in_features=256, out_features=128, bias=False)(up_proj): Linear(in_features=256, out_features=128, bias=False)(down_proj): Linear(in_features=128, out_features=256, bias=False)(act_fn): SiLU()))(input_layernorm): DeepseekV3RMSNorm()(post_attention_layernorm): DeepseekV3RMSNorm()))(norm): DeepseekV3RMSNorm())(lm_head): Linear(in_features=256, out_features=129280, bias=False)
)
input shape: torch.Size([4, 64])
output shape: torch.Size([4, 64, 129280])

四、 参考链接

Deepseekv3权重路径
https://huggingface.co/deepseek-ai/DeepSeek-V3/tree/main

附:671B全量的Deepseekv3网络结构

DeepseekV3ForCausalLM((model): DeepseekV3Model((embed_tokens): Embedding(129280, 7168)(layers): ModuleList((0-2): 3 x DeepseekV3DecoderLayer((self_attn): DeepseekV3Attention((q_a_proj): Linear(in_features=7168, out_features=1536, bias=False)(q_a_layernorm): DeepseekV3RMSNorm()(q_b_proj): Linear(in_features=1536, out_features=24576, bias=False)(kv_a_proj_with_mqa): Linear(in_features=7168, out_features=576, bias=False)(kv_a_layernorm): DeepseekV3RMSNorm()(kv_b_proj): Linear(in_features=512, out_features=32768, bias=False)(o_proj): Linear(in_features=16384, out_features=7168, bias=False)(rotary_emb): DeepseekV3YarnRotaryEmbedding())(mlp): DeepseekV3MLP((gate_proj): Linear(in_features=7168, out_features=18432, bias=False)(up_proj): Linear(in_features=7168, out_features=18432, bias=False)(down_proj): Linear(in_features=18432, out_features=7168, bias=False)(act_fn): SiLU())(input_layernorm): DeepseekV3RMSNorm()(post_attention_layernorm): DeepseekV3RMSNorm())(3-60): 58 x DeepseekV3DecoderLayer((self_attn): DeepseekV3Attention((q_a_proj): Linear(in_features=7168, out_features=1536, bias=False)(q_a_layernorm): DeepseekV3RMSNorm()(q_b_proj): Linear(in_features=1536, out_features=24576, bias=False)(kv_a_proj_with_mqa): Linear(in_features=7168, out_features=576, bias=False)(kv_a_layernorm): DeepseekV3RMSNorm()(kv_b_proj): Linear(in_features=512, out_features=32768, bias=False)(o_proj): Linear(in_features=16384, out_features=7168, bias=False)(rotary_emb): DeepseekV3YarnRotaryEmbedding())(mlp): DeepseekV3MoE((experts): ModuleList((0-255): 256 x DeepseekV3MLP((gate_proj): Linear(in_features=7168, out_features=2048, bias=False)(up_proj): Linear(in_features=7168, out_features=2048, bias=False)(down_proj): Linear(in_features=2048, out_features=7168, bias=False)(act_fn): SiLU()))(gate): MoEGate()(shared_experts): DeepseekV3MLP((gate_proj): Linear(in_features=7168, out_features=2048, bias=False)(up_proj): Linear(in_features=7168, out_features=2048, bias=False)(down_proj): Linear(in_features=2048, out_features=7168, bias=False)(act_fn): SiLU()))(input_layernorm): DeepseekV3RMSNorm()(post_attention_layernorm): DeepseekV3RMSNorm()))(norm): DeepseekV3RMSNorm())(lm_head): Linear(in_features=7168, out_features=129280, bias=False)
)

http://www.ppmy.cn/embedded/161692.html

相关文章

【开源项目】数字孪生武汉~超经典智慧城市CIM/BIM数字孪生可视化项目——开源工程及源码

飞渡科技数字孪生武汉CIM管理平台,基于自研数字孪生引擎,结合数字孪生、物联网IOT、云计算等信息技术,以城市数据资源融合共享为主线,打造感知、联结、计算、运用“四位一体”的城市大脑,赋能经济社会高质量可持续发展…

亚马逊数据采集API教程:如何使用Pangolin Scrape API高效获取Amazon商品数据

为什么需要专业的Amazon Scrape API? 亚马逊是全球最大的电子商务平台之一,商家和数据分析师需要实时获取商品数据以优化业务决策。然而,由于亚马逊的严格反爬机制,传统的爬虫方法面临诸多挑战: 反爬机制复杂&#xff…

荣耀手机Magic3系列、Magic4系列、Magic5系列、Magic6系列、Magic7系列详情对比以及最新二手价格预测

目录 荣耀Magic系列手机详细对比 最新二手价格预测 性价比分析 总结 以下是荣耀Magic系列手机的详细对比以及最新二手价格预测: 荣耀Magic系列手机详细对比 特性荣耀Magic3系列荣耀Magic4系列荣耀Magic5系列荣耀Magic6系列荣耀Magic7系列处理器骁龙888&#x…

【开源免费】基于SpringBoot+Vue.JS社区养老服务平台(JAVA毕业设计)

本文项目编号 T 190 ,文末自助获取源码 \color{red}{T190,文末自助获取源码} T190,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

ffmpeg -formats

1. ffmpeg -formats -loglevel quiet 显示ffmpeg支持的格式 2. 输出 选取部分输出结果 File formats: D. Demuxing supported .E Muxing supported -- D aac raw ADTS AAC (Advanced Audio Coding) E mov QuickTime / MOV D mov,mp4,m4a,3gp,3g2,mj2 QuickTime / MOV…

JUnit 5 TestInstanceFactory 功能与使用详解

JUnit 5 TestInstanceFactory 功能与使用详解 TestInstanceFactory 是 JUnit 5 的扩展接口,允许开发者自定义测试类实例的创建逻辑。默认情况下,JUnit 会为每个测试方法创建一个新的测试类实例(PER_METHOD 模式),但通…

使用STM32F103C8T6和ESP8266链接阿里云

一、项目简介 基于 STM32F103C8T6 单片机和 ESP8266 Wi-Fi 模块,旨在实现通过 Wi-Fi 连接阿里云物联网平台,进行数据上传和远程控制 STM32F103C8T6:作为核心控制单元,负责系统的运算、数据处理和与外设的交互。STM32F103C8T6 具有…

Linux 资源监控:优化与跟踪系统性能

在 Evoxt,我们深知有效的 Linux 资源监控对于优化服务器性能至关重要。本指南将介绍关键工具和策略,帮助您监控 CPU、内存、磁盘和网络使用情况,确保您的 Linux 系统始终保持高效运行。 实时系统监控 使用 top(交互式系统监控&am…