news 2026/8/2 13:58:37

04-从零训练语言模型小模型跑通全流程再说大的

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 + 因果掩码
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/2 13:49:43

如何高效绕过iOS激活锁:applera1n免费工具完整指南

如何高效绕过iOS激活锁:applera1n免费工具完整指南 【免费下载链接】applera1n icloud bypass for ios 15-16 项目地址: https://gitcode.com/gh_mirrors/ap/applera1n 你是否遇到过购买二手iPhone后无法激活的困境?或者忘记了旧设备的Apple ID密…

作者头像 李华
网站建设 2026/8/2 13:49:38

DSO Quad示波器校准全攻略:从原理到实践,提升测量精度

1. 从一次测量偏差说起:为什么你的DSO Quad需要校准?手头这台DSO Quad示波器,相信很多电子爱好者和硬件工程师都不陌生。它小巧、便携,价格亲民,是调试单片机、传感器、电源电路的得力助手。但不知道你有没有遇到过这样…

作者头像 李华
网站建设 2026/8/2 13:47:01

[Agent的评估-08]整合MEAI针对安全合规相关的评估器

在NuGet包Microsoft.Extensions.AI.Evaluation.Safety中定义了一个名为ContentSafetyEvaluator的抽象类,这是一个实现了IEvaluator接口的评估器。它主要应用于内容审核、合规过滤、企业内部安全管控,旨在检测模型输出是否包含敏感或违规内容。覆盖范围&a…

作者头像 李华
网站建设 2026/8/2 13:43:27

Unity跨平台读取StreamingAssets资源:原理、实现与避坑指南

1. 项目概述:为什么StreamingAssets跨平台读取是个“坑”? 如果你在Unity里做过资源加载,尤其是需要把一些配置文件、JSON数据或者文本文件打包进应用,那你肯定用过或者至少听说过 StreamingAssets 这个文件夹。它被设计成存放“…

作者头像 李华
网站建设 2026/8/2 13:43:07

3步搞定!跨平台下载macOS安装文件的终极解决方案

3步搞定!跨平台下载macOS安装文件的终极解决方案 【免费下载链接】gibMacOS Py2/py3 script that can download macOS components direct from Apple 项目地址: https://gitcode.com/gh_mirrors/gi/gibMacOS 还在为如何在Windows或Linux电脑上获取官方macOS系…

作者头像 李华