LLM 训练原理、L20 单卡训练可行性与 nanoGPT 入门
范围① LLM 大模型怎么训练预训练/后训练全流程与工具栈、② 训练产物的本质与使用方式、③ L20 48GB 单卡能否训练最小 LLM从零预训练 vs 微调的规模边界、④ nanoGPT 是什么、怎么工作。1. LLM 是怎么训练出来的1.1 预训练pretraining——90% 以上的算力数据准备爬取网页、书籍、代码、论文清洗去重用 tokenizer 切成 token词元。Llama 3 用了 15 万亿 token。模型结构Transformer 解码器堆几十上百层 attention MLP 层。训练时给定前文预测下一个 token 的概率分布算交叉熵损失反向传播更新权重。循环取一小批 token → 前向计算 → 算损失 → 反向传播 → 更新参数 → 下一批。要跑几百亿步。规模Llama 3 70B 用约 10,000 张 H100 跑数周花费数千万美元7B 小模型也要几百张卡跑几周。1.2 后训练post-training——让模型会对话、讲规矩SFT监督微调几万~几十万条高质量问题-回答对话数据学会对话格式和指令遵循。对齐早期主流是 RLHF人类打分 → 训 reward model → PPO 强化学习现在主流转向DPO/GRPO直接偏好优化不用训奖励模型、更省算力。Qwen、DeepSeek 的开源模型基本都是 DPO 或 GRPO 路线。长思维链训练可选用推理题目 强化学习如 DeepSeek-R1 的做法让模型学会慢慢想。1.3 工具栈总览环节主流工具基础框架PyTorch绝对主流、JAX部分实验室分布式并行Megatron-LM张量并行、DeepSpeed ZeRO/FSDP、3D 并行TPPPDP数据管线Tokenizers、Data-Juicer预训练代码各家自研居多开源Llama-Factory微调/训练一体微调LLaMA-Factory、Axolotl、TRLSFT/DPO/GRPO推理部署vLLMPagedAttention吞吐之王、TensorRT-LLM、llama.cppGGUF 量化、消费级显卡、Ollama、TGI量化bitsandbytes、AWQ、GGUF 导出llama.cpp 自带硬件NVIDIA 为主CUDAH100/H800 训练消费卡只能跑小模型或量化推理2. 训练出来的大模型到底是什么一堆矩阵的数值文件qwen3-8b/ ├── config.json # 结构定义层数、hidden size、注意力头数 ├── model-00001.safetensors # 权重分片几十 GB ├── model-00002.safetensors ├── tokenizer.json # token ↔ 文本的字典 └── generation_config.json“8B 参数” 80 亿个浮点数存在各层 attention/MLP 矩阵里Q4 量化后 4.4GBFP16 是 16GB。没有任何知识以文字形式存在——知识、语言能力、风格全部隐式编码在数字里。同一套权重可量化成 GGUFllama.cpp、AWQvLLM、FP8 等格式本质是同一堆数字的压缩表示。例本机跑的Qwen3.8-27B-MTP-Q4_K_M 270 亿参数压到 4bit 的 ~16GB GGUF 文件。3. 怎么使用大模型A. 起推理服务生产/团队用# vLLML20 规划的主力方案vllm serve Qwen/Qwen3-8B--port8080--tensor-parallel-size1OpenAI 兼容 APIimportopenai clientopenai.OpenAI(base_urlhttp://localhost:8080/v1,api_keyEMPTY)respclient.chat.completions.create(modelQwen3-8B,messages[{role:user,content:你好}])B. 本地跑个人/无 GPU 服务器ollama run qwen3:8b# 或 llama.cpp./llama-server-mQwen3-8B-Q4_K_M.ggufC. 二次开发微调LLaMA-Factory / TRL 加载基座权重 → 喂自有数据做 SFT/DPO → 产出新权重 → 走 A/B 部署。D. Agent/工具底座推理服务 框架如 Hermes 工具调用function calling。一句话总结训练 用海量文本把几百万个矩阵调到能接上下文产物 装矩阵数值的文件夹使用 加载进推理引擎喂 token 进去、收 token 出来。4. L20 48GB 单卡能训练最小 LLM 吗结论能。分两层——从零预训练和微调都可行规模差几个数量级。4.1 从零预训练最小 LLM完全可行经验公式训练成本 ≈6 × 参数量 × token 数FLOPs。规模典型配置数据量预计耗时单 L20显存nanoGPT 玩具50M~125M 参数~5B tokenThe Pile 子集/FineWeb-Edu 抽样2~6 天8~16GBGPT-2 Small124M 参数10~20B token1~2 周~16GBGPT-2 Medium350M 参数~100B token1~2 个月~30GB7B 级别从头训需 1.4T token不可行单卡要几年超出单卡50M 模型 × 5B token ≈ 3 PFLOPsL20 有效算力按 ~15 TFLOPs 算约 5~6 天。7B × 1.4T token ≈ 5.9 EFLOPs单卡几年——这就是没人单卡训 7B 的原因。工具路线最透明# 1. 数据The Pile 子集或 FineWeb-Edu 小样本tokenizer 预处理# 2. 训练nanoGPTKarpathy 的 PyTorch 实现单文件最适合学习gitclone https://github.com/karpathy/nanoGPT# 改 model_config.pyn_layer/n_head/n_embdbf16 单卡直接跑# 3. 评测lm-eval-harness 跑几个 benchmark# 更工程化HuggingFace Transformers FSDP或 Axolotl / LLaMA-Factory pretrain 模式训出来的 50M 模型语言能力有限补全短句、学文体但流程完整数据 → tokenizer → 前向/反向 → 权重文件 → 加载推理与训 70B 无本质区别只是规模小。4.2 微调现成模型L20 的真正主场实际工作里 99% 的训练48GB 单卡很舒服方式能跑的规模显存说明QLoRA4bit 基座 LoRA7B~14B轻松32B 紧10~30GB最主流bitsandbytes PEFTLoRAbf16 基座7B 舒服13B 上限20~40GB效果略好于 QLoRA全参 SFT1B~3B30~45GB带激活检查点7B 全参单卡勉强够、无余量# 典型 QLoRA 微调 Qwen3-8B# LLaMA-Factory 或 TRL(SFTTrainer bitsandbytes nf4 PEFT)# 数据几十~几万条 {instruction, input, output}# 产出adapter 几百 MB合并后得到完整模型文件4.3 针对本机环境的建议双 2080 Ti L20学原理/走流程2080 Ti 上跑 nanoGPT 训 50M~125M11GB 显存够一周内完整走通、看到 loss 收敛。实际产出L20 上用 LLaMA-Factory 做 Qwen3-8B QLoRA 微调运维日志、截图检索描述等业务数据一天内训完部署回 vLLM 即用。注意L20 已规划 FP8 vLLM 做推理训练占满显存会顶掉推理服务——要么分时要么训练放 2080 TiQLoRA 7B 能跑慢。5. nanoGPT是什么、怎么工作5.1 定位Andrej Karpathy前 OpenAI 创始成员写的极简 GPT 训练框架——定位教学 可跑通不是生产系统。核心代码量极小但结构完整是理解 LLM 训练最透明的公开实现。对比生产级训练栈Megatron-LM / DeepSpeed 自研脚本几十万行nanoGPT 把真实的 GPT 怎么训压缩到一个人几小时能读完全部源码。nanoGPT/ ├── model.py # GPT 模型本体~300 行CausalSelfAttention、MLP、GPT 类 ├── train.py # 训练循环~300 行 ├── sample.py # 推理加载 checkpoint 自回归生成文本 ├── bench.py # 性能基准TFLOPs 测量 ├── config/ # 超参预设GPT-Small、GPT-Medium 等 └── data/ # 数据预处理脚本莎士比亚字符级、WikiText-103、OpenWebText5.2 工作流程数据侧data/ 脚本用 HuggingFacetokenizers做 BPE 分词或玩具任务字符级→ 存成train.bin/val.bin纯 int32 数组每个数一个 token id→ 训练时按固定块读取numpy memmap 切片无 DataLoader 框架。模型侧model.py标准 decoder-only Transformertoken_embeddingtoken id → 向量position_embedding位置编码N 层Block 多头因果自注意力mask 未来位置 MLP4 倍 hidden 残差 LayerNorm末层 Linear隐藏态 → 词表输出每位置下一个 token 的概率分布训练循环train.py核心约 20 行forstepinrange(max_iters):X,Yget_batch(train)# 采样一块 tokenY X 右移一位logits,lossmodel(X,Y)# 前向交叉熵损失model.zero_grad(set_to_noneTrue)loss.backward()# 反向torch.nn.utils.clip_grad_norm_(params,1.0)optimizer.step()# AdamW 更新权重# 每 1000 步存 checkpoint.pt工程部分学习率 warmup → cosine 衰减bf16 混合精度 fp32 主权重 梯度缩放梯度检查点重算换显存小显存训深模型的关键开关FlashAttention 可选checkpoint 存完整优化器状态 step 号可中断续跑TensorBoard / WB 日志。推理侧sample.py加载 checkpoint → 起始文本 → 循环预测下一个 token → 采样 → 拼回序列temperature / top-k 控制随机性。5.3 能力边界能力nanoGPT生产栈Megatron/DeepSpeed单卡 / 简单多卡DDP 数据并行✅✅张量并行 / 流水线并行模型切多卡❌✅ZeRO 优化器分片❌✅复杂数据管线 / 动态采样❌故意不做✅10B 参数训练❌✅适用边界模型小、能塞进单卡或几卡数据并行——即从零训 50M~350M 的场景。5.4 入门路径# 经典入门字符级莎士比亚几分钟跑通全流程python data/shakespeare_char/prepare.py python train.py config/shakespeare_char.py# 十几分钟8GB 显存够python sample.py--out_dirout-shakespeare-char# 升级到真实语言WikiText-103GPT-Small50M几十小时训完直接看 loss 曲线、生成质量、bench.pyTFLOPs完整闭环一周内可走一遍。可自由改造换 RoPE、加 GQA、试新 attention 变体社区不少论文复现基于它。5.5 延伸nanochatKarpathy 于 2025 年发布的nanochat是 nanoGPT 的完整版预训练 → SFT → RLHF 对齐 → Web UI 一条龙约 10 万行号称最小可运行 ChatGPT 复刻。目标若是走通含后训练的完整流程看完 nanoGPT 后看它。下一步2080 Ti 上跑通 nanoGPT 莎士比亚字符级 demo记录显存/耗时准备 FineWeb-Edu/The Pile 小样本L20 或 2080 Ti 训 50M~124M 模型LLaMA-Factory Qwen3-8B QLoRA 微调业务数据试点运维日志/截图描述训练与 vLLM 推理的 L20 分时/分卡排期