04-从零训练语言模型小模型跑通全流程再说大的
从零训练语言模型:小模型跑通全流程再说大的很多人上来就想训7B、13B模型,结果环境配不好、OOM、loss不收敛,到处踩坑。我的建议是:先用小模型跑通整个训练流程,确认每一步都理解了、没问题了,再放大。这篇从零开始,手写一个完整的语言模型训练代码。不依赖HuggingFace Trainer,不用任何封装,每一步都看得见摸得着。模型:一个极简的语言模型先写一个最小的语言模型:Embedding + 4层Transformer + LM Head。这里不展开Transformer的实现细节(下篇专门讲),先用PyTorch内置的nn.TransformerEncoder。importtorchimporttorch.nnasnnimportmathclassSmallLM(nn.Module):"""一个小型因果语言模型"""def__init__(self,vocab_size:int=32000,d_model:int=512,n_heads:int=8,n_layers:int=4,max_seq_len:int=2048,dropout:float=0.1,):super().__init__()self.d_model=d_model# Token embedding + 位置编码self.token_embedding=nn.Embedding(vocab_size,d_model)self.pos_embedding=nn.Embedding(max_seq_len,d_model)self.dropout=nn.Dropout(dropout)# Transformer编码器encoder_layer=nn.TransformerEncoderLayer(d_model=d_model,nhead=n_heads,dim_feedforward=d_model*4,dropout=dropout,activation="gelu",batch_first=True,# 输入格式 (batch, seq, dim)norm_first=True,# Pre-LN,大模型标配)self.encoder=nn.TransformerEncoder(encoder_layer,num_layers=n_layers,norm=nn.LayerNorm(d_model),# 最后加一个LayerNorm)# 语言模型头:映射回词表空间self.lm_head=nn.Linear(d_model,vocab_size,bias=False)# 权重共享:embedding和lm_head用同一套权重self.lm_head.weight=self.token_embedding.weight# 因果掩码:下三角矩阵,防止看到未来的tokenself.register_buffer("causal_mask",torch.tril(torch.ones(max_seq_len,max_seq_len)).bool())# 初始化权重self.apply(self._init_weights)def_init_weights(self,module:nn.Module):"""GPT风格的权重初始化"""ifisinstance(module,nn.Linear):torch.nn.init.normal_(module.weight,mean=0.0,std=0.02)ifmodule.biasisnotNone:torch.nn.init.zeros_(module.bias)elifisinstance(module,nn.Embedding):torch.nn.init.normal_(module.weight,mean=0.0,std=0.02)defforward(self,input_ids:torch.Tensor,labels:torch.Tensor|None=None,)-dict:B,T=input_ids.shape# Embeddingpositions=torch.arange(T,device=input_ids.device).unsqueeze(0)# (1, T)x=self.token_embedding(input_ids)+self.pos_embedding(positions)x=self.dropout(x)# Transformer + 因果掩码

相关新闻

Rust开源语法检查器Harper:本地优先的隐私友好替代方案

Rust开源语法检查器Harper:本地优先的隐私友好替代方案

在撰写技术文档、邮件或代码注释时,语法和拼写错误不仅影响专业性,还可能引发误解。虽然 Grammarly 等工具功能强大,但其云端处理模式让许多注重数据隐私的开发者望而却步。今天,我们将深入探讨一个由 Rust 语言编写的开源解决方案…

2026/10/17 16:58:57 阅读更多 →
树莓派驱动9.7英寸墨水屏:从硬件连接到信息看板实战

树莓派驱动9.7英寸墨水屏:从硬件连接到信息看板实战

1. 项目概述:当墨水屏遇上树莓派 如果你手头有一块树莓派,并且对低功耗、常显、护眼的显示方案感兴趣,那么“9.7inch e-Paper HAT”这个项目绝对值得你深入了解。这不仅仅是一块简单的屏幕,它是一个完整的硬件与软件解决方案&…

2026/10/13 16:25:06 阅读更多 →
Python图形界面(GUI)Tkinter笔记(二十九):OptionMenu下拉式列表控件方法

Python图形界面(GUI)Tkinter笔记(二十九):OptionMenu下拉式列表控件方法

在Tkinter库中,OptionMenu是提供下拉选择功能的界面组件,支持用户从预设选项集合中选取单一数值。 一、OptionMenu下拉式列表控件的核心应用场景: 1. 单选交互:提供预定义选项列表,供用户单选(如语言、主题设置)。 2. 数据绑定与响应:通过 StringVar 自动同步选中值…

2026/10/9 1:42:43 阅读更多 →

最新新闻

AI辅助专著写作全流程:从选题到定稿的实操指南

AI辅助专著写作全流程:从选题到定稿的实操指南

写一本专著,对绝大多数人来说,第一反应都是“这事太大了”。从选题、搭框架、找文献、写初稿,到来回改格式、统一术语、核对引用,随便哪一环拎出来都够磨掉几个月。更要命的是,很多内容领域里的资深从业者,…

2026/10/17 16:58:03 阅读更多 →
STM32F107实现IEEE1588v2 PTP纳秒级时间同步解析

STM32F107实现IEEE1588v2 PTP纳秒级时间同步解析

简介:面向STM32嵌入式开发者,这份资源提供了在STM32F107上基于LwIP协议栈实现IEEE 1588v2精确时间协议(PTP)的完整方案,包含设计文档与Keil工程代码,适用于工业自动化、电力系统等需要高精度时钟同步的场景…

2026/10/17 16:58:02 阅读更多 →
Ubuntu安装GCC踩坑记:搞懂工具链才能一劳永逸

Ubuntu安装GCC踩坑记:搞懂工具链才能一劳永逸

在 Ubuntu 里装 gcc,乍一听是个三分钟就能搞定的基础操作,网上教程也是一抓一大把。但上周我在一台新拿到的 Ubuntu 工作站上装 gcc,前后折腾了小半天,问题一个接一个:先是最基础的源更新出问题,再是包名找…

2026/10/17 16:58:02 阅读更多 →
威胁情报AI落地实战:从情报处理到检测响应自动化

威胁情报AI落地实战:从情报处理到检测响应自动化

1. 先搞清楚:威胁情报AI到底要解决什么我前前后后做了六年多安全运营,带过SOC,也搭过威胁情报平台,一个特别深的感受是:蓝队真正缺的不是告警,不是规则,更不是又一个炫酷的仪表盘,而…

2026/10/17 16:58:02 阅读更多 →
UE4内存管理实战:深入理解垃圾回收与UObject引用追踪

UE4内存管理实战:深入理解垃圾回收与UObject引用追踪

1. 开篇:UE4内存管理,绕不开的必修课但凡在UE4里做过中大型项目的开发者,都会对内存管理这块有切肤之痛。UE4的垃圾回收机制不是我们平时理解的"GC自动帮你清理一切",它有一套基于UObject和反射系统的标记-清除&#xf…

2026/10/17 16:58:02 阅读更多 →
GNSS/INS松组合导航Matlab实现:卡尔曼滤波与误差状态详解

GNSS/INS松组合导航Matlab实现:卡尔曼滤波与误差状态详解

简介:面向航空航天、自动驾驶与航海等导航应用场景,这份GNSS/INS松组合导航Matlab程序适合需要研究卫星/惯性组合导航算法的工程师与在校生。程序围绕GNSS与INS数据融合展开:先由GNSS轨迹生成模拟惯导输出,再经卡尔曼滤波、四元数…

2026/10/17 16:56:54 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/17 1:44:59 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →