← 返回列表

LoRA Lab:从零用 NumPy 实现 LoRA 微调并做基座/适配器 A/B 对比的教学项目

otawfik/lora-lab · LoRA from scratch in NumPy: a frozen tiny language model plus a rank-8 adapter, A/B'd side by side

GitHub原文发布 未知首次收录 2026-10-12上架 2026-10-12 09:01

☆ 收藏查看项目 ↗

ELI5:它是什么,解决什么问题

LoRA Lab 是一个从零实现的 LoRA 教学项目,不依赖 PyTorch 或 transformers 库,也不调用任何 API。它用 NumPy 手写了一个小型 n-gram 神经语言模型,并叠加一个真实的低秩适配器(W_new = W_base + (alpha/rank) * B @ A),基座权重在训练中始终保持冻结,只有低秩矩阵 B、A 获得梯度。项目提供小批量 Adam 训练流程(含训练/验证集划分与损失日志)、基座模型与适配器并排生成对比的 CLI 和 Flask 网页界面、困惑度评测与损失曲线/困惑度图表,并附带了中性英文与海盗语两套语料。文档记录了自带训练运行的结果:可训练参数从 35,799 降至 3,448(约 9.6%),留出的海盗语语句困惑度从 1288.7 降到 105.5。README 明确说明这是一个教学玩具而非生产级微调方案,并提供 SCALING.md 说明如何用 peft 与 Hugging Face transformers 做真实规模的 LoRA。

核心能力与快速开始

★ 0 · Python

能做什么
用 NumPy 从零实现小型神经语言模型(embedding + tanh MLP + softmax,手写反向传播)与 LoRA 风格适配器:基座权重按构造冻结,仅低秩矩阵 B、A 接收梯度,且 B 零初始化使适配器在训练前等价于基座模型;采用标准 alpha/rank 缩放,在输出投影上做精确的 LoRA 重参数化。包含小批量 Adam 训练流程(训练/验证划分、损失日志)、基座与适配器并排 A/B 生成 CLI(compare.py)、带温度和长度控制的 Flask 网页界面(app.py)、困惑度对比与 matplotlib 图表,以及覆盖分词器、梯度、适配器等价性、冻结基座训练和确定性生成的 pytest 测试集。生成采样支持 top-k 与温度采样、<unk> 抑制和 <eos> 停止。
适用场景
适合在 CPU 上快速动手理解 LoRA 机制:阅读并运行自带训练(README 称约 10 秒),观察基座模型与 rank-8 海盗语适配器在同一提示、同一种子下的并排输出差异;用自带语料或自行替换语料复现“冻结基座 + 训练低秩增量”的流程并测量困惑度变化;作为课堂或自学材料逐模块阅读 tokenizer、model、adapter、train、metrics 的实现;通过 SCALING.md 了解如何把同一机制迁移到 peft 与 Hugging Face transformers 的生产方案。
项目形态
研究实现
部署方式
未说明生产部署方式;README 提供本地运行方式:pip 安装 requirements.txt 后运行 train.py 训练、compare.py 做命令行对比、app.py 启动本地 Flask 网页界面(http://127.0.0.1:5000)。仓库另有 Vercel 上的在线演示页面(homepage 指向 https://lora-lab.vercel.app/),其托管与资源限制未说明。
主要依赖
Python 环境与 requirements.txt 中的依赖;README 称自带训练在 CPU 上约 10 秒完成。未说明具体 Python 版本、内存/磁盘要求或是否需要 GPU。
使用限制
README 明确说明这是教学玩具而非生产级微调:模型仅有约两个词的上下文,训练语料仅几百行,因此生成结果较为粗糙。仓库元数据中未提供 license 字段,许可与商用条件未说明。未说明 API 成本、硬件要求与部署上限。
许可证
未说明
最近推送
2026-10-11 09:56

资料检查:2026-10-12 07:00 · 卡片整理:2026-10-12 09:00
卡片由 AI 根据仓库资料整理,未进行安装或运行验证 · 本次更新未完成,保留上次成功内容

这是基于来源内容整理的摘要。原文链接失效后,本页摘要和讨论仍会保留。

讨论 0

登录后参与讨论,阅读资讯无需注册。

还没有评论,来分享第一个看法。