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

【人工智障生成日记1】从零开始训练本地小语言模型


🎯 从零开始训练本地小语言模型:MiniGPT + TinyStories(4090Ti)

🧭 项目背景

本项目旨在以学习为目的,从头构建一个完整的本地语言模型训练管线。目标是:

  • ✅ 不依赖外部云计算
  • ✅ 完全本地运行(RTX 4090Ti)
  • ✅ 从零构建数据加载、模型结构、训练与推理逻辑
  • ✅ 阶段性掌握 LLM 微调与部署的关键技能

🛠️ 开发环境

项目配置
操作系统Windows 10
GPUNVIDIA RTX 4090Ti
CUDA 驱动版本 12.1(cu121
Python 版本3.10
虚拟环境.venv310(指定 Python 3.10)

📦 项目结构

toy-transformer/
├── data_loader.py        # 加载 TinyStories 数据集
├── model.py              # MiniGPT 模型实现
├── train_resume.py       # 支持断点训练的主循环
├── generate.py           # 推理与生成函数
├── checkpoint_latest.pth # 自动保存的训练权重
├── .venv310/             # 虚拟环境

🧠 技术路线

1. 数据加载

  • 使用 HuggingFace datasets 加载 TinyStories
  • Tokenizer 使用 GPT-2 默认分词器
  • 启用 paddingtruncation,统一 max_length=128

2. 模型构建

  • 自定义实现 MiniGPT

    • 小型 Transformer(Embedding + 多层 Self-Attention + Linear head)
    • 使用 GPT-2 的 vocab
    • 无 pretraining,全从零学起

3. 模型训练

  • 使用 torch.nn.CrossEntropyLoss,忽略 pad_token_id
  • 优化器为 AdamW
  • 使用 PyTorch AMP (torch.amp.autocast) 启用混合精度
  • 使用 GradScaler 动态控制精度
  • 使用 tqdm 进度条显示训练状态
  • 支持自动保存断点(checkpoint_latest.pth

4. 推理逻辑

  • 自定义 generate_text() 实现逐 token 自回归生成
  • 使用 softmax + sampling,多轮测试发现 collapse 问题

✅ 成果展示

训练状态

  • 成功训练了 10000 steps,loss 降至 0.05 以下
  • 支持断点恢复训练,训练速度约 25 it/s

在这里插入图片描述

推理结果(初步)

在这里插入图片描述

Prompt: "Once upon a time"
Output: time time time time time time...

Prompt: "Deng Chao is"
Output: is is is is is is is is is...

🚨 模型已出现 token collapse 问题(复读)——为后续结构调整和防过拟合提供重要依据。


🚧 存在问题与后续优化

问题原因计划
文本输出高度重复模型 collapse,过拟合高频 token使用 dropout,top-k sampling,减少训练步数
模型容量不足结构太小,表达力差增加 embedding 和层数;或微调现成模型
学不到语义没有预训练语料带来的 inductive bias尝试 distilgpt2 + TinyStories 微调

📅 今日工作小结

  • ✅ 成功建立 GPU 环境并启用 CUDA(Python 3.10 + PyTorch cu121)
  • ✅ 完整实现数据加载、tokenizer、模型结构与训练管线
  • ✅ 训练了 10000 steps,保存了断点模型
  • ✅ 实现推理接口并测试多个 prompt
  • ✅ 发现模型陷入 token collapse,为后续优化积累经验

🚀 明日计划

  • 替换 softmax 采样为 top-k + temperature 采样,缓解 collapse
  • 加入 dropout / layernorm 防止模型坍缩
  • 尝试使用 distilgpt2 微调,比较从零训练 vs 微调效果
  • 训练可视化(tensorboard / wandb)

🧨 本地语言模型训练踩坑记录(2025.05)


🧱 环境搭建相关

❌ 坑 1:安装了 PyTorch,但无法使用 CUDA

  • 表现torch.cuda.is_available() 返回 False,训练跑在 CPU 上,GPU 利用率为 0%

  • 原因:初始环境为 Python 3.13,而 PyTorch GPU 版本不支持该版本

  • 解决方案

    1. 安装 Python 3.10(py -3.10

    2. 使用 python3.10 -m venv .venv310 创建虚拟环境

    3. 使用官方源安装支持 CUDA 的 PyTorch:

      pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
      

🧪 数据处理与训练相关

❌ 坑 2:模型在 GPU 上训练速度不升反降

  • 表现:CUDA 激活后训练反而更慢

  • 原因:虽然模型 to(device),但输入数据没有显式 .to(device)

  • 解决方案

    • 使用:

      input_ids = batch["input_ids"].to(device)
      

      而不是:

      batch["input_ids"].to(device)  # ⚠ 无效!
      

❌ 坑 3:tqdm 报错 IProgress not found

  • 表现:使用 from tqdm.notebook import tqdm 报错

  • 解决方案

    • 快速替换为:

      from tqdm import tqdm
      
    • 或安装依赖:

      pip install ipywidgets
      jupyter nbextension enable --py widgetsnbextension
      

📦 模型训练相关

❌ 坑 4:训练 loss 降不下来 or 降到 0.0000 太快

  • 表现:训练 1 个 epoch 后 loss ≈ 0,后续 epoch 训练跳过

  • 原因:训练步数被 step_count >= max_steps 提前终止,epoch 实际未执行

  • 解决方案

    • 使用 total_step 替代 step_count 并每轮累加
    • 或改为基于 max_epochs 控制训练轮数

❌ 坑 5:训练后模型生成“词语复读机”(collapse)

  • 表现:生成 output 全是 "time time time...""is is is..."

  • 原因

    • 模型太小,表达能力差
    • 学习率太大或步数太多导致过拟合高频 token
  • 解决方案

    • 启用 dropout 正则
    • 使用 top-k + temperature 控制采样策略
    • 更换为 distilgpt2 微调方案或扩大学习语料

🔐 安全性提示

❌ 坑 6:PyTorch 警告 torch.load() 存在安全隐患

  • 表现:加载 checkpoint 时出现 FutureWarning: weights_only=False

  • 解决方案(建议但非必须):

    • 明确添加参数:

      torch.load(checkpoint_path, weights_only=True)
      

相关文章:

【人工智障生成日记1】从零开始训练本地小语言模型

🎯 从零开始训练本地小语言模型:MiniGPT TinyStories(4090Ti) 🧭 项目背景 本项目旨在以学习为目的,从头构建一个完整的本地语言模型训练管线。目标是: ✅ 不依赖外部云计算✅ 完全本地运行…...

Selenium-Java版(frame切换/窗口切换)

frame切换/窗口切换 前言 切换到frame 原因 解决 切换回原来的主html 切换到新的窗口 问题 解决 回到原窗口 法一 法二 示例 前言 参考教程:Python Selenium Web自动化 2024版 - 自动化测试 爬虫_哔哩哔哩_bilibili 上期文章:Sel…...

一文深度解析:Pump 与 PumpSwap 的协议机制与技术差异

在 Solana 链上,Pump.fun 和其延伸产品 PumpSwap 构成了 meme coin 发行与流通的两大核心场景。从初期的游戏化发行模型,到后续的自动迁移与交易市场,Pump 系列协议正在推动 meme coin 从“爆发性投机”走向“协议化运营”。本文将从底层逻辑…...

星云智控v1.0.0产品发布会圆满举行:以创新技术重构物联网监控新生态

星云智控v1.0.0产品发布会圆满举行:以创新技术重构物联网监控新生态 2024年5月15日,成都双流蛟龙社区党群服务中心迎来了一场备受业界瞩目的发布会——优雅草科技旗下”星云智控v1.0.0”物联网AI智控系统正式发布。本次发布会吸引了包括沃尔沃集团、新希…...

SpringBoot(一)--- Maven基础

目录 前言 一、初始Maven 1.依赖管理 2.项目构建 3.统一项目结构 二、IDEA集成Maven 1.Maven安装 2.创建Maven项目 2.1全局设置 2.2 创建SpringBoot项目 2.3 常见问题 三、单元测试 1.JUnit入门 2.断言 前言 Maven 是一款用于管理和构建Java项目的工具&#xff…...

基于FPGA控制电容阵列与最小反射算法的差分探头优化设计

在现代高速数字系统测试中,差分探头的信号完整性直接影响测量精度。传统探头存在阻抗失配导致的信号反射问题,本文提出一种通过FPGA动态控制电容阵列,结合最小反射算法的优化方案,可实时调整探头等效容抗,将信号反射损…...

kakfa 基本了解

部署结构 Kafka 使用zookeeper来协商和同步,但是kafka 从版本3.5正式开始deprecate zookeeper, 同时推荐使用自带的 kraft. 而从4.0 开始则不再支持 zookeeper。 所以 kafka 是有control plane 和 data plane 的。 data plane 就是broker,control plane…...

基于Browser Use + Playwright 实现AI Agent操作Web UI自动化

Browser Use是什么 Browser Use是一个开源项目官网:Browser Use - Enable AI to control your browser,专为大语言模型(LLM)设计的只能浏览器工具,能够让AI像人类一样自然的浏览和操作网页,支持多标签页管…...

Origin绘制多因子柱状点线图

多因子柱状点线图是一种结合柱状图和点线图的复合图表,常用于同时展示多个因子(变量)在不同分组下的分布和趋势变化。 适用场景: (1)比较多个因子在不同分组中的数值大小(柱状图)&a…...

Web漏洞扫描服务的特点与优势:守护数字时代的安全防线

在数字化浪潮中,Web应用程序的安全性已成为企业业务连续性和用户信任的核心要素。随着网络攻击手段的不断升级,Web漏洞扫描服务作为一种主动防御工具,逐渐成为企业安全体系的标配。本文将从特点与优势两方面,解析其价值与应用场景…...

iOS 直播技术及优化

iOS直播技术的实现和优化涉及多个技术环节,需结合协议选择、编解码方案、播放器技术及性能调优等多方面。 一、核心技术实现 协议选择与传输优化 HLS(HTTP Live Streaming):苹果官方推荐,基于HTTP分片传输&#xff0c…...

抛弃传统P2P技术,EasyRTC音视频基于WebRTC打造教育/会议/远程巡检等场景实时通信解决方案

一、方案背景 随着网络通信发展,实时音视频需求激增。传统服务器中转方式延迟高、资源消耗大,WebP2P技术由此兴起。EasyRTC作为高性能实时通信平台,集成WebP2P技术,实现低延迟、高效率音视频通信,广泛应用于教育、医疗…...

俄罗斯军总参情报局APT28组织瞄准援乌后勤供应链发起全球网络攻击

2025年5月,由美国、英国、欧盟和北约网络安全与情报机构联合发布的最新网络安全公告披露,俄罗斯军总参情报局(GRU)第85特别服务中心第26165部队(又称APT28、Fancy Bear、Forest Blizzard和BlueDelta)正持续…...

杰发科技AC7801——PWM获取固定脉冲个数

测试通道6 在初始化时候打开通道中断 void PWM1_GenerateFrequency(void) {PWM_CombineChConfig combineChConfig[1]; //组合模式相关结构体PWM_IndependentChConfig independentChConfig[2];//独立模式相关结构体PWM_ModulationConfigType pwmConfig; //PWM模式相关结构体PWM…...

MacBookPro上macOS安装第三方应用报错解决方案:遇到:“无法打开“XXX”,因为无法确定(验证)开发者身份?怎么解决

MacBook Pro 上 macOS 安装第三方应用报错解决方案 —— 彻底搞定「无法打开“XXX”,因为无法确定开发者身份」 适用系统:macOS Catalina 10.15 ~ macOS Sonoma 14.x 适用机型:Intel / Apple Silicon 全系 MacBook Pro 文章目录 **MacBook P…...

MVC和MVVM架构的区别

MVC和MVVM都是前端开发中常用的设计模式,都是为了解决前端开发中的复杂性而设计的,而MVVM模式则是一种基于MVC模式的新模式。 MVC(Model-View-Controller)的三个核心部分:模型、视图、控制器相较于MVVM(Model-View-ViewModel)的三个核心部分…...

RAG(Retrieval-Augmented-Generation)检索增强生成

什么是RAG(检索增强生成)? RAG是一种AI框架,结合传统的数据检索技术和LLM(大语言模型)的优势,通过将外部数据和LLM生成语言技能集合,对LLM的输出进行优化,使输出更准确、…...

黑马点评前端Nginx启动失败问题解决记录

Nginx启动失败问题解决记录 问题描述 在学习黑马Redis课程时,启动黑马点评Nginx前端项目发现: 无法访问8080端口检查Windows端口占用情况(无占用)结论:Nginx服务未成功启动 错误日志分析 在nginx安装目录下的logs…...

第12天-Python+Qt5开发实战:10大经典案例与深度解析

1. 基础窗口与信号槽机制 python 复制 下载 import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButtonclass MainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("信号槽示例")btn = QPushButton("…...

软件开发命名避开保留关键字指南

在软件开发中,命名时避开保留关键字至关重要,否则可能导致语法错误、逻辑混乱或兼容性问题。以下是需要注意事项及具体建议: 1. 识别保留关键字 数据库系统:不同数据库的保留关键字不同,需查阅官方文档。 MySQL&#x…...

力扣第450场周赛

Q1. 数位和等于下标的最小下标 给你一个整数数组 nums 。 返回满足 nums[i] 的数位和(每一位数字相加求和)等于 i 的 最小 下标 i 。 如果不存在满足要求的下标,返回 -1 。 示例 1: 输入:nums [1,3,2] 输出&#xff1…...

React-改变当前页class默认的样式

比如antd for mobile&#xff0c;已经定义了默认的ui的class样式&#xff0c;如果想在当前页面的控件显示特殊的样式&#xff0c;除了指定style外&#xff0c;还可以强制改变默认class的样式&#xff0c;比如我想改变list.item的字体。 在返回渲染布局里面加上 return (<&…...

zabbix 常见问题

一、zabbix主动模式和被动模式可以同时使用吗&#xff1f; Zabbix 的主动模式&#xff08;Active Mode&#xff09;和被动模式&#xff08;Passive Mode&#xff09;可以同时启用并共存&#xff0c;但需要满足以下条件&#xff1a; 1、agent配置 在 Zabbix Agent 的配置文件…...

人工智能培训:解锁未来职场竞争力的核心路径与课程内容解析

当AI绘画工具在几秒内生成一幅媲美专业画师的作品&#xff0c;当AI程序员自主优化代码逻辑&#xff0c;当AI客服精准解答复杂问题——一个现实愈发清晰&#xff1a;人工智能正在重新定义“专业能力”的边界。 对于普通人而言&#xff0c;这场变革既带来焦虑&#xff0c;也孕育机…...

深入解析Java泛型:从定义到实战应用

目录 &#x1f680;前言&#x1f914;泛型的定义&#x1f427;泛型类&#x1f31f;泛型接口✍️泛型方法、通配符、上下限&#x1f4af;泛型方法&#x1f4af; 通配符与上下限⚙️通配符&#xff08;Wildcard&#xff09;⚙️泛型上下限⚙️应用场景 &#x1f99c;泛型支持的类…...

【开源】一个基于 Vue3 和 Electron 开发的第三方网易云音乐客户端,具有与官方客户端相似的界面布局

&#x1f3b5; XCMusic&#xff1a;高颜值第三方网易云音乐客户端 &#x1f3b6; &#x1f4cd; 项目亮点 XCMusic 是一款基于Vue3Electron开发的开源、跨平台网易云音乐客户端。 此音乐播放器基于 Electron 开发&#xff0c;旨在为用户提供简洁、美观、兼容多平台的音乐体验。…...

【云实验】Excel文件转存到RDS数据库

实验名称&#xff1a;Excel文件转存到RDS数据库 说明&#xff1a;把Excel的数据通过数据管理服务DMS&#xff08;Data Management Service&#xff09;导入到RDS MySQL数据库中。 流程&#xff1a;创建一个RDS for MySQL的实例&#xff0c;再创建数据库和账号&#xff0c;通过D…...

从零开始:用Python语言基础构建宠物养成游戏:从核心知识到完整实战

一、代码分段拆解与知识点映射 1. 初始化游戏数据&#xff1a;变量与数据类型的综合应用 # 用字典存储宠物信息&#xff08;嵌套字典数字/字符串类型&#xff09; pet {"name": "小雪", # 字符串&#xff1a;宠物名字"age": 1, …...

labview设计一个虚拟信号发生器

目标&#xff1a;设计一个虚拟信号发生器&#xff0c;通过功能键的设置可以产生正弦波、三角波、方波和锯齿波&#xff0c;并可以通过输入控件设置采集信号的频率、幅值、相位等参数。 一、正弦波 &#xff08;1&#xff09;创建一个枚举 &#xff08;2&#xff09;点击属性后…...

工业路由器WiFi6+5G的作用与使用指南,和普通路由器对比

工业路由器的技术优势 在现代工业环境中&#xff0c;网络连接的可靠性与效率直接影响生产效率和数据处理能力。WiFi 6&#xff08;即802.11ax&#xff09;和5G技术的结合&#xff0c;为工业路由器注入了强大的性能&#xff0c;使其成为智能制造、物联网和边缘计算的理想选择。…...