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

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 + 因果掩码
http://www.cnnetsun.cn/news/3799312.html

相关文章:

  • 如何高效绕过iOS激活锁:applera1n免费工具完整指南
  • DSO Quad示波器校准全攻略:从原理到实践,提升测量精度
  • [Agent的评估-08]整合MEAI针对安全合规相关的评估器
  • 大模型时代的设计断舍离:用“3-2-1决策框架”砍掉83%冗余交互(附内部评审SOP模板)
  • Unity跨平台读取StreamingAssets资源:原理、实现与避坑指南
  • 3步搞定!跨平台下载macOS安装文件的终极解决方案
  • Skill-Omni:为AI技能注入视觉能力,构建原生多模态技能范式
  • 动作识别大模型
  • CTF入门实战:Web安全与密码学核心漏洞解析与靶场搭建
  • PyCharm与Anaconda:Python开发环境搭建与高效管理指南
  • Qt文本精确测量:QFontMetrics核心原理与自适应UI开发实践
  • 3大技术挑战与开源应对方案:抖音下载器的工程化实践
  • UE4 Visual Logger:AI行为与复杂Bug的可视化调试实战指南
  • 2.8英寸DPI LCD驱动实战:从接口原理到STM32/树莓派应用
  • 网络热梗对青少年素养的影响及家庭数字内容管理策略
  • 从DSO Quad拆解学习嵌入式系统设计:ADC采样、PWM DAC与实时波形显示
  • 5分钟快速上手:DouK-Downloader抖音TikTok数据采集终极指南
  • 免费开源条码字体:5分钟掌握Libre Barcode专业条码生成技巧
  • Grove入门套件全解析:从传感器原理到Arduino环境监测站实战
  • 5分钟解锁全网资源下载:这款智能工具如何彻底改变你的内容收集方式
  • 3步解锁WeMod专业版:Wand-Enhancer本地增强终极指南
  • 5分钟免费安装VideoDownloadHelper:浏览器视频下载终极指南
  • 在趋动云部署Stable Diffusion整合包:低成本搭建云端AI绘画工作站
  • 基于STM32的UART监视器设计:硬件选型、软件架构与调试实践
  • Jetson Nano/TX2/NX边缘AI开发实战:从选型到YOLO模型部署优化
  • VMware虚拟机安装macOS全攻略:解锁补丁、系统镜像与拖拽功能配置
  • SVM预测模型原理与Matlab实战应用指南
  • 生物信息学博士申请指南:从课题组评估到职业规划
  • AI 治理伦理 · 赋能每个人,而非取代任何人
  • 如何彻底解决多语言字体显示问题:Noto字体终极指南