当前位置: 首页 > article >正文

实习07-混合大模型的学习

1 看架构(Configuration 配置文件)首先,拿到代码,看配置文件里面的架构选型,其中configuration.py文件里面包含了模型每层的选型,以下是layer构建的代码:@propertydeflayers_block_type(self):""" Returns a list of block types for each layer. Block types: - 'emb_adapter' : Embedding Adapter - 'qwen_attention': Qwen3 Attention with RoPE - 'qwen_mlp': Qwen3 MLP with gate/up/down structure - 'nq_adapter' : Nemotron + Qwen3 Adapter - 'mamba': Nemotron Mamba2 layer - 'mlp': Nemotron MLP - 'attention': Nemotron Attention """block_types=[]forcharinself.hybrid_override_pattern:ifchar=='':block_types.append('qwen_attention')elifchar=='^':block_types.append('qwen_mlp')elifchar=='M':block_types.append('mamba')elifchar=='-':block_types.append('mlp')elifchar=='*':block_types.append('attention')elifchar=='!':block_types.append('nq_adapter')elifchar=='#':block_types.append('emb_adapter')else:raiseValueError(f"Unknown pattern character:{char}")returnblock_types输入:模式字符串;输出:返回的是一个layer集合;然后我们再看hybrid_override_pattern的内容:hybrid_override_pattern="# ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ! M-M-M-M*-M-M-M-M*-M-",# Default 42-layer pattern#= emb_adapter(嵌入适配器)= qwen_attention(Qwen 注意力)^= qwen_mlp(Qwen MLP)!= nq_adapter(中间适配器)M/-/*= Nemotron 相关层(Mamba、MLP、Attention)2 看逻辑(QwenNemotronModel 的 forward)我们只看关键部分:第一部分:默认配置 边界条件检查(不看)#========== 1. 参数默认值配置 ==========# 是否输出注意力权重:使用传入值 or 配置文件默认值output_attentions=output_attentionsifoutput_attentionsisnotNoneelseself.config.output_attentions# 是否输出所有隐藏层状态output_hidden_states=(output_hidden_statesifoutput_hidden_statesisnotNoneelseself.config.output_hidden_states)# 是否使用缓存:推理开启、训练关闭(关键!训练时use_cache=False)use_cache=use_cacheifuse_cacheisnotNoneelse(self.config.use_cacheifnotself.trainingelseFalse)# 返回格式:字典 or 元组return_dict=return_dictifreturn_dictisnotNoneelseself.config.use_return_dict# ========== 2. 输入合法性检查 ==========# XOR 判断:必须只提供 input_ids 或 inputs_embeds 其中一个if(input_idsisNone)^(inputs_embedsisnotNone):raiseValueError("You must specify exactly one of input_ids or inputs_embeds")第二部分:词嵌入根据Tokenizer分词 chunk 后得到的input_ids([batch_size, max_length]),传给Embedding层(Shape 为 [vocab_size, hidden_size]),得到 [batch_size, max_length, hidden_size]:# ========== 3. 词嵌入层 ==========# 如果没给嵌入向量,就用 token ID 查嵌入表得到ifinputs_embedsisNone:inputs_embeds=self.embed_tokens(input_ids)第三部分:开启缓存之类的(不看)# ========== 4. 训练冲突处理:梯度检查点 ≠ 缓存 ==========# 梯度检查点(省显存)和 KV 缓存(加速推理)互斥,训练时强制关闭缓存ifself.gradient_checkpointingandself.traininganduse_cache:logger.warning_once("`use_cache=True` is incompatible with gradient checkpointing. Setting `use_cache=False`.")use_cache=False# ========== 5. 缓存初始化检查 ==========# 想开启缓存但没传缓存对象 → 警告ifuse_cacheandcache_paramsisNone:logger.warning_once("QwenNemotronModel requires an initialized `HybridQwenNemotronDynamicCache` to return a cache. ""None was provided, so no cache will be returned.")# 初始隐藏状态 = 词嵌入向量hidden_states=inputs_embeds# ========== 6. 位置与缓存索引 ==========# 缓存位置:默认从 0 到 序列长度-1ifcache_positionisNone:cache_position=torch.arange(hidden_states.shape[1],device=hidden_states.device)# 位置ID = 缓存位置(RoPE用)ifposition_idsisNone:position_ids=cache_position.unsqueeze(0)第四部分:生成位置编码# ========== 7. 生成 RoPE 旋转位置编码(给Qwen注意力用) ==========position_embeddings=self.rotary_emb(hidden_states,position_ids)根据Embedding的输出作为输入,算出 cos 和 sin 旋转矩阵,所以position_embeddings应该是一个形似 (cos, sin) 的元组;第五部分:创建 Full Attention 和 Mamba 的掩码矩阵这是第一点和传统Decoder不一样的地方:前者是用于Full Attention的位置编码,是一个矩阵,所以需要输入为inputs_embeds的max_length构建矩阵,目的是通过下三角进行掩码,输出为一个 N x N 的矩阵;后者是一个单行向量,只 padding 掩码(没有因果掩码!),因为Mamba天生就是串行、单向、看不到未来的!速度极快。# ========== 8. 创建两种掩码:分别给 Attention 和 Mamba 使用 ==========causal_mask=self._update_causal_mask(attention_mask,inputs_embeds,cache_position)# 因果掩码mamba_mask=self._update_mamba_mask(attention_mask,cache_position)# Mamba专用掩码第六部分:逐层循环 Loopforlayer_idx,layerinenumerate(self.layers):# 如果需要输出隐藏态,先把上一层结果存起来ifoutput_hidden_states:all_hidden_states=all_hidden_states+(hidden_states,)存储上一层的隐藏状态;第七部分:“梯度检查点” 换取 “低显存占用”模型在前向传播的时候,会有很多中间结果,如果都存储起来会导致显存爆炸;所以我们会采用 “懒加载” 的方式,不存中间结果,当在反向传播的时候,再重新算一遍;(时间换空间)ifisinstance(layer,QwenDecoderLayer):# 训练 + 梯度检查点:使用torch激活检查点省显存ifself.gradient_checkpointingandself.training:hidden_states=self._gradient_checkpointing_func(layer.__call__,hidden_states,causal_mask,position_embeddings,cache_params,cache_position,)else:# 正常前向:传入 隐藏态、因果掩码、RoPE、缓存hidden_states=layer(hidden_states,attention_mask=causal_mask,position_embeddings=position_embeddings,cache_params=cache_params,cache_position=cache_position,)然后我们看看QwenDecoderLayer是怎么做的:defforward(self,hidden_states:torch.Tensor,# 输入:上一层的输出向量attention_mask:Optional[torch.Tensor]=None,# 因果掩码position_ids:Optional[torch.LongTensor]=None,position_embeddings:Optional[Tuple[torch.Tensor,torch.Tensor]]=None,# RoPEcache_params:Optional[HybridQwenNemotronDynamicCache

相关文章:

实习07-混合大模型的学习

1 看架构(Configuration 配置文件) 首先,拿到代码,看配置文件里面的架构选型,其中 configuration.py 文件里面包含了模型每层的选型,以下是 layer 构建的代码: @propertydef layers_block_type(self):"""Returns a list of block types for each layer.…...

联邦学习实战:如何用Python快速搭建个性化推荐系统(附代码)

联邦学习实战:用Python构建隐私安全的个性化推荐系统 推荐系统早已渗透进我们数字生活的每个角落,从电商平台的"猜你喜欢"到视频网站的"推荐观看",背后都离不开算法的精准预测。但你是否想过,这些系统在收集和…...

如何用3秒将原神成就数据变成你的数字资产:YaeAchievement深度探索

如何用3秒将原神成就数据变成你的数字资产:YaeAchievement深度探索 【免费下载链接】YaeAchievement 更快、更准的原神数据导出工具 项目地址: https://gitcode.com/gh_mirrors/ya/YaeAchievement 想象一下,你在提瓦特大陆征战数百小时&#xff0…...

深入解析nvidia-smi命令:从GPU监控到显存优化实战

1. 认识nvidia-smi:GPU管理的瑞士军刀 第一次接触nvidia-smi是在大学实验室的服务器上,当时看着满屏跳动的数字完全摸不着头脑。现在回想起来,这个看似简单的命令行工具,其实是管理GPU资源最实用的利器。nvidia-smi全称NVIDIA Sys…...

运维人必备:用Docker Compose一键部署LibreSpeed,打造企业内部网络质量监控看板

企业级网络监控实战:基于Docker Compose与LibreSpeed构建智能测速平台 当企业网络规模扩张到数百个节点时,传统的"救火式"运维模式往往力不从心。某跨国公司的SRE团队曾发现,其亚太区办公室在每天上午10点的视频会议期间频繁出现卡…...

LRC歌词制作终极指南:如何用歌词滚动姬轻松制作专业歌词

LRC歌词制作终极指南:如何用歌词滚动姬轻松制作专业歌词 【免费下载链接】lrc-maker 歌词滚动姬|可能是你所能见到的最好用的歌词制作工具 项目地址: https://gitcode.com/gh_mirrors/lr/lrc-maker 歌词滚动姬(LRC Maker)是…...

Spring Boot项目实战:Flowable工作流引擎从入门到部署(附完整代码)

Spring Boot深度整合Flowable:企业级工作流开发实战指南 从业务流程管理到技术落地 在数字化转型浪潮中,业务流程自动化已成为企业提升运营效率的关键手段。想象这样一个场景:某跨国企业的员工报销流程涉及5个国家的12个审批环节,…...

多标签文本分类:损失函数设计、阈值调优与标签相关性建模

点击 “AladdinEdu,你的AI学习实践工作坊”,注册即送-H卡级别算力,沉浸式云原生集成开发环境,80G大显存多卡并行,按量弹性计费,教育用户更享超低价。 1. 引言:当一篇文档不只属于一个类别 在传…...

山西家长必看:这家本土机构把港澳升学做成了「保底选项」

山西家长必看:这家本土机构把港澳升学做成了「保底选项」去年太原五中家长群里疯传的案例:理科603分考生通过山西师泽教育的港澳通道,最终拿下香港城市大学计算机系录取。比同分段走内地批次的同学,院校排名直接提升47位。为什么山…...

Windows Cleaner终极指南:3分钟解决C盘爆红和电脑卡顿问题

Windows Cleaner终极指南:3分钟解决C盘爆红和电脑卡顿问题 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 你是否正在为C盘爆红而焦虑?电脑…...

终极免费QQ音乐QMC解码器:3分钟解锁加密音乐,实现跨平台播放自由

终极免费QQ音乐QMC解码器:3分钟解锁加密音乐,实现跨平台播放自由 【免费下载链接】qmc-decoder Fastest & best convert qmc 2 mp3 | flac tools 项目地址: https://gitcode.com/gh_mirrors/qm/qmc-decoder 还在为QQ音乐下载的加密音乐文件无…...

【OSG学习笔记】Day 46: CameraManipulator(相机操控器)

CameraManipulator 相机操控器 在 OpenSceneGraph(OSG)三维开发中,** 相机操控器(Camera Manipulator)** 是连接用户交互与三维视角变换的核心桥梁,它决定了用户如何通过鼠标、键盘控制虚拟相机在场景中移动…...

【OSG学习笔记】Day 45: osg::Camera::DrawCallback (抓取图片)

osg::Camera::DrawCallback (抓取图片) 在OpenSceneGraph(OSG)三维渲染开发中,相机(Camera) 是场景渲染的核心入口,控制着三维场景到二维屏幕的投影、绘制流程等关键逻辑。 而osg::C…...

第一篇:微信云开发宠物上门预约小程序:核心架构与实现思路

微信云开发宠物上门预约小程序:核心架构与实现思路本文已收录于专栏《微信小程序云开发实战:宠物上门预约系统全流程》,原创不易,欢迎点赞、收藏、关注,后续会持续拆解核心模块的代码实现。前言 随着宠物经济的爆发式增…...

【优化器】带动量 Momentum 的SGD算法

思想: 让参数更新具有惯性,每一步更新都是由前面梯度累积 vvv 和当前点梯度 ggg 组合而成 公式: 累计梯度(动量更新):v←αv(1−α)gv \leftarrow \alpha v (1-\alpha) gv←αv(1−α)g参数更新&#xf…...

29、css 哪些属性会继承

目录 一、先给面试里的标准回答 二、常见会继承的属性 1. 字体相关 2. 文本相关 3. 列表相关 4. 可见性/光标相关 三、常见不会继承的属性 1. 盒模型相关 2. 背景相关 3. 定位布局相关 4. 弹性布局 / 网格布局相关 四、最好记的一条规律 会继承的 不会继承的 五…...

FireRedASR-AED-L模型安全:对抗样本攻击与防御策略

FireRedASR-AED-L模型安全:对抗样本攻击与防御策略 1. 引言 语音识别技术已经深入到我们生活的方方面面,从智能助手到语音输入,再到各种语音交互场景。FireRedASR-AED-L作为一款工业级的自动语音识别模型,在普通话、方言和英语识…...

SITS2026权威发布:基于12家头部平台实测数据,多模态推荐提升GMV 18.7%的4个不可复制因子

第一章:SITS2026多模态推荐系统权威实测全景概览 2026奇点智能技术大会(https://ml-summit.org) SITS2026是面向下一代工业级推荐场景设计的开源多模态协同推理框架,由ML-Summit联合实验室于2025年Q4正式发布。本实测覆盖其在电商、短视频、新闻资讯三…...

28、absolute定位,如果父亲不是relative,那么是参考谁?

目录 一、先给一个标准面试回答 二、最关键的一句话 三、什么叫“已定位祖先元素”? 四、如果父元素不是 relative,到底参考谁? 情况 1:父元素不是 relative,但更上层祖先里有非 static 元素 情况 2:…...

10个Illustrator脚本工具:彻底改变你的设计工作流程

10个Illustrator脚本工具:彻底改变你的设计工作流程 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 你是否厌倦了在Adobe Illustrator中重复执行繁琐的操作?…...

如何快速为视频添加字幕:VideoSrt自动字幕生成完整指南

如何快速为视频添加字幕:VideoSrt自动字幕生成完整指南 【免费下载链接】video-srt-windows 这是一个可以识别视频语音自动生成字幕SRT文件的开源 Windows-GUI 软件工具。 项目地址: https://gitcode.com/gh_mirrors/vi/video-srt-windows 你是否正在为视频字…...

如何在绝地求生中配置罗技鼠标宏实现精准压枪:3分钟快速上手指南

如何在绝地求生中配置罗技鼠标宏实现精准压枪:3分钟快速上手指南 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg 你是否在《绝地求生…...

Windows上安装安卓应用的终极指南:告别模拟器的轻量级解决方案

Windows上安装安卓应用的终极指南:告别模拟器的轻量级解决方案 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾在Windows电脑上想要运行安卓应用&a…...

Python Celery + FastAPI + Vue 全栈异步任务实战

本文将手把手带你搭建FastAPI(后端 API) Celery(异步任务队列) Redis(消息中间件 / 结果存储) Vue(前端) 的全栈异步项目,实现异步任务提交、任务状态查询、前端实时查看…...

如何在3分钟内让Jellyfin媒体库显示中文电影信息?

如何在3分钟内让Jellyfin媒体库显示中文电影信息? 【免费下载链接】jellyfin-plugin-metashark jellyfin电影元数据插件 项目地址: https://gitcode.com/gh_mirrors/je/jellyfin-plugin-metashark MetaShark是一款专为Jellyfin设计的智能元数据插件&#xff…...

基于GEE与MODIS/006/MCD64A1的长时间序列林火动态监测与空间格局分析

1. 从零开始理解GEE与MODIS火点监测 第一次接触Google Earth Engine(GEE)平台时,我被它强大的云端计算能力震撼到了。这个由谷歌开发的免费平台,让普通研究者也能处理PB级的地理空间数据。而MODIS/006/MCD64A1数据集,就…...

数据结构--基于顺序表实现通讯录项目

欢迎阅读本篇学习笔记。 作为计算机专业的学习记录,本文将系统梳理通讯录项目的相关知识点,从基础概念到代码实现逐步展开,便于后续复习巩固,这里我们会用到上篇的知识,(如果其中有不懂的,大家可…...

企业级Windows日志监控架构设计:构建高可用分布式日志系统

企业级Windows日志监控架构设计:构建高可用分布式日志系统 【免费下载链接】visualsyslog Syslog Server for Windows with a graphical user interface 项目地址: https://gitcode.com/gh_mirrors/vi/visualsyslog 在当今复杂的IT环境中,企业级日…...

ECharts 从版本4升级到版本5的实战指南与常见问题解析

1. 为什么要升级到ECharts 5? 如果你还在使用ECharts 4,可能会遇到一些困扰:某些API突然报错、文档里找不到对应的配置项、或者看到控制台频繁弹出"DEPRECATED"警告。这些都是因为ECharts 5带来了大量优化和改动。我在去年负责公司…...

微信小程序文件缓存优化:从基础到高级的完整实践指南

1. 微信小程序文件缓存的核心挑战 第一次开发微信小程序时,我遇到了一个棘手的问题:用户反馈图片加载慢,尤其是重复访问时仍然需要等待。这才意识到文件缓存没做好,不仅影响用户体验,还浪费流量。微信小程序的缓存系统…...