尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

LitGPT 预训练实战指南:从零训练、自定义数据续训到 TinyLlama 级模型

发布时间:2026/9/14 22:38:12

资讯中心
01
ARTICLE

LitGPT 预训练实战指南:从零训练、自定义数据续训到 TinyLlama 级模型

LitGPT 预训练实战指南:从零训练、自定义数据续训到 TinyLlama 级模型
LitGPT 预训练实战指南从零训练、自定义数据续训到 TinyLlama 级模型【免费下载链接】litgpt20 high-performance LLMs with recipes to pretrain, finetune and deploy at scale.项目地址: https://gitcode.com/GitHub_Trending/li/litgpt导读本指南围绕 LitGPT 的litgpt pretrain命令展开系统讲解如何使用仓库内置架构从零预训练大语言模型、如何用纯文本文件TextFiles在自定义数据集上从头训练与继续预训练并深入剖析训练参数、学习率调度、断点续训与 checkpoint 转换的底层实现。读完本文你将掌握从下载 tokenizer、运行预训练、中断恢复、换数据集续训到输出可推理 checkpoint 的完整实操链路。预训练入口litgpt pretrain命令LitGPT 的预训练功能统一由litgpt pretrain命令提供其底层实现位于 litgpt/pretrain.py并在 litgpt/main.py 中被注册为 CLI 子命令。运行时不带任何模型参数即可列出所有受支持的模型架构litgpt pretrain list[!TIP] 预训练前请先安装全部依赖pip install litgpt[all]。输出为模型名列表节选ValueError: Please specify --model_name model_name. Available values: Camel-Platypus2-13B ... Gemma-2b ... Llama-2-7b-hf ... Mixtral-8x7B-v0.1 ... pythia-14m从零预训练的最小示例文档给出一个最小可行示例在小型 TinyStories 数据集上预训练一个 1400 万参数的 Pythia 模型配置文件为仓库内的 config_hub/pretrain/debug.yamllitgpt pretrain pythia-14m \ --config config_hub/pretrain/debug.yaml说明原文档中的--config指向远端 URL在本仓库中使用本地相对路径config_hub/pretrain/debug.yaml等价。CLI 层的--config参数负责加载 YAML 并覆盖默认参数其解析逻辑可参考 litgpt/parser_config.py。在源码层面pretrain子命令最终会调用 litgpt/pretrain.py 中的setup()函数其关键流程为若model_name list打印name_to_config中注册的全部可用模型见 litgpt/pretrain.py通过Config.from_name(model_name)解析模型配置默认数据模块为litgpt.data.TinyLlama见 litgpt/pretrain.py在devices * num_nodes 1时自动启用 FSDP 混合分片策略HYBRID_SHARD见 litgpt/pretrain.py单卡则使用auto策略初始化模型后调用main()进入训练循环并在训练结束后于out_dir/final/lit_model.pth保存最终 checkpoint见 litgpt/pretrain.py。训练循环结束时控制台会输出 Total tokens、Training Time、Tok/sec 与显存占用等性能指标见 litgpt/pretrain.py。debug.yaml 配置速览config_hub/pretrain/debug.yaml 面向快速调试而设计关键参数如下参数值含义model_namepythia-14m预训练模型架构out_dirout/pretrain/debugcheckpoint 与日志输出目录precisionbf16-mixed混合精度另有bf16-true、32-true可选dataTinyStories数据模块名train.global_batch_size125跨数据并行 rank 的全局 batch 大小train.micro_batch_size5单 rank 单次前向的样本数train.lr_warmup_steps100学习率线性 warmup 迭代数train.max_tokens100000000训练总 token 数1 亿train.max_norm1.0梯度裁剪范数train.min_lr6e-5余弦退火的最低学习率optimizer.class_pathtorch.optim.AdamW优化器optimizer.init_args.lr6e-4峰值学习率tokenizer_dircheckpoints/EleutherAI/pythia-14mtokenizer 目录logger_nametensorboard日志后端seed42随机种子optimizer采用 Lightning 的类路径写法betas为(0.9, 0.95)、weight_decay为0.1。注意global_batch_size需能被devices * num_nodes * micro_batch_size整除源码中TrainArgs.gradient_accumulation_iters()会据此计算梯度累积步数见 litgpt/args.py。在自定义数据上从零预训练TextFiles 数据模块纯文本即数据集预训练自定义数据最快捷的方式是TextFiles数据模块它从包含纯文本文件的文件夹读取数据并产出定长 token 批次。其实现位于 litgpt/data/text_files.py核心行为包括用 LitData 的optimize将文本分块为约 50MB 的 token 流并缓存到train_data_path/train与train_data_path/val子目录见 litgpt/data/text_files.py每个样本经tokenizer.encode(text, bosTrue, eosFalse)处理即仅在每个文本文件开头添加 BOS token不添加 EOS见 litgpt/data/text_files.pymax_seq_length在内部被加 1因为训练需要每个 token 的下一 token 作为目标见 litgpt/data/text_files.py。[!NOTE] 该方法会在每个文本文件开头加入 BOS token但假设你已经清洗过文本例如移除无关字符若一个文本文件包含多个文档应自行按需插入 BOS/EOS token。[!WARNING]TextFiles仅推荐用于小数据集。文本数据压缩率高通常以压缩格式存储且许多格式支持逐行加载而非一次性读入整个文件纯文本存储仅在小数据规模下可行。对于数 GB 以上的数据集建议先用 LitData 预处理再通过--data LitData从本地目录或 S3 读取。数据组织建议将文本合并为尽量大的文件建议每个至少 50MB避免大量小文件拖慢 IO。文档中的示例目录如下~ ls -lh custom_pretraining_data total 3225M -rw-r--r-- 1 sebastian 50M Apr 2 18:31 combined_1.txt -rw-r--r-- 1 sebastian 50M Apr 2 18:31 combined_2.txt -rw-r--r-- 1 sebastian 50M Apr 2 18:31 combined_3.txt -rw-r--r-- 1 sebastian 50M Apr 2 18:31 combined_4.txt -rw-r--r-- 1 sebastian 50M Apr 2 18:31 combined_5.txt ...实现层面TextFiles.prepare_data()要求训练目录至少存在一个*.txt文件若未单独指定验证集目录val_data_path会把第一个文件切出作为验证集其余作为训练集见 litgpt/data/text_files.py。已缓存预处理结果的目录会被跳过重处理见 litgpt/data/text_files.py。完整命令litgpt download EleutherAI/pythia-14m \ --tokenizer_only true litgpt pretrain pythia-14m \ --tokenizer_dir EleutherAI/pythia-14m \ --data TextFiles \ --data.train_data_path custom_pretraining_data \ --train.lr_warmup_steps200 \ --optimizer AdamW \ --optimizer.lr 0.005注意TextFiles模块要求提供有效的--tokenizer_dir否则会在prepare_data阶段抛出 Tokenizer is None 错误见 litgpt/data/text_files.py。命令行中所有参数均可用--前缀覆盖如--optimizer.lr。[!TIP] 使用litgpt pretrain --data.help TextFiles可查看该数据模块的全部可选参数。从源码可见TextFiles支持train_data_path、val_data_path、seed、num_workers等字段见 litgpt/data/text_files.py。继续预训练三种典型场景继续预训练Continued Pretraining在已有模型权重基础上用自有数据进一步训练已有模型既可以是自己训出的也可以来自模型中心。三种典型场景如下[!NOTE] 同样假设文本已清洗移除无关字符、按需插入 BOS/EOS。 [!WARNING] 与从零预训练一致TextFiles只适合小数据集GB 级数据建议用 LitData 预处理后以--data LitData --data.path path/to/your/data读取。1) 从下载的基础模型开始续训首先下载一个 Pythia 基础模型litgpt download EleutherAI/pythia-160m然后通过--initial_checkpoint_dir指定初始化权重进行续训litgpt pretrain pythia-160m \ --initial_checkpoint_dir EleutherAI/pythia-160m \ --tokenizer_dir EleutherAI/pythia-160m \ --out_dir ./new_pretrained_checkpoint \ --data TextFiles \ --data.train_data_path custom_pretraining_data \ --train.max_tokens 1_000_000源码层面setup()会通过fabric.load_raw(initial_checkpoint_dir / lit_model.pth, model)将原始权重载入模型见 litgpt/pretrain.py之后从零开始训练循环不恢复优化器状态。--initial_checkpoint_dir与--resume互斥同时提供会直接报错见 litgpt/pretrain.py。2) 中断后续训断点续训训练被打断时可用--resume从out_dir中最新的 checkpoint 继续litgpt pretrain pythia-160m \ --resume auto \ --tokenizer_dir EleutherAI/pythia-160m \ --out_dir ./new_pretrained_checkpoint \ --data TextFiles \ --data.train_data_path custom_pretraining_data \ --train.max_tokens 1_000_000--resume的语义见 litgpt/pretrain.py 与 litgpt/pretrain.pyTrue从out_dir最新 checkpoint 恢复找不到 checkpoint 时报错auto从最新 checkpoint 恢复找不到时不报错直接从头训练显式路径从指定 checkpoint 目录恢复。恢复时通过fabric.load(resume, state)同时加载模型、优化器、数据加载器与迭代计数iter_num、step_count从而无缝接续训练见 litgpt/pretrain.py。训练过程中checkpoint 会按train.save_interval默认每 1000 个优化步保存为out_dir/step-{step:08d}/lit_model.pth见 litgpt/pretrain.py。3) 在新数据集上继续预训练若已用上述示例训出模型想换一个新数据集续训需要先把 checkpoint 转换为可加载的权重litgpt convert_pretrained_checkpoint ./new_pretrained_checkpoint/final ./new_pretrained_checkpoint_converted该命令实现在 litgpt/scripts/convert_pretrained_checkpoint.py预训练 checkpoint 中仍包含优化器状态等训练元数据此脚本仅导出模型 state-dict 并写入输出目录lit_model.pth同时清理torch.compile引入的_orig_mod.前缀见 litgpt/scripts/convert_pretrained_checkpoint.py。注意输出目录必须为空否则会报FileExistsError见 litgpt/scripts/convert_pretrained_checkpoint.py。随后在第二个数据集上续训litgpt pretrain pythia-160m \ --initial_checkpoint_dir ./new_pretrained_checkpoint_converted \ --tokenizer_dir EleutherAI/pythia-160m \ --out_dir ./new_pretrained_checkpoint_2 \ --data TextFiles \ --data.train_data_path custom_pretraining_data_2 \ --train.max_tokens 1_000_000[!TIP] 同样可用litgpt pretrain --data.help TextFiles查看该数据模块的更多选项。预训练 1.1B TinyLlama 模型针对 TinyLlama 1.1B 的端到端预训练教程详见 tutorials/pretrain_tinyllama.md。仓库同时提供了配套的 config_hub/pretrain/tinyllama.yaml其核心配置为model_name: tiny-llama-1.1b、data: TinyLlama、train.max_seq_length: 2048、train.global_batch_size: 512、train.micro_batch_size: 4、train.max_tokens: 30000000000003 万亿与原版 TinyLlama 对齐、optimizer.init_args.lr: 4e-4、tokenizer_dir: checkpoints/meta-llama/Llama-2-7b-hfTinyLlama 复用 Llama 2 的 tokenizer。训练机制与关键参数原理学习率调度线性 Warmup 余弦退火训练循环中每个迭代都会依据 litgpt/pretrain.py 的get_lr()计算当前学习率前lr_warmup_steps步执行线性 warmuplr peak_lr * it / warmup_iters超过max_iters后固定为min_lr中间区间按余弦曲线从峰值衰减至min_lr。max_iters由train.max_tokens除以设备数再除以每迭代 token 数得到见 litgpt/pretrain.py。实际 warmup 迭代数还会乘以梯度累积步数见 litgpt/args.py。训练循环中的关键环节梯度累积global_batch_size / (devices * num_nodes)得到每 rank 的 batch再除以micro_batch_size得到累积步数累积期间用fabric.no_backward_sync跳过梯度同步见 litgpt/pretrain.py梯度裁剪累积完成后以train.max_norm裁剪并执行optimizer.step()见 litgpt/pretrain.py损失计算采用chunked_cross_entropy分块交叉熵降低显存峰值见 litgpt/pretrain.py验证训练开始时先做 2 次迭代的 sanity check之后按eval.interval评估验证集记录val_loss与困惑度val_ppl见 litgpt/pretrain.py 与 litgpt/pretrain.py吞吐监控使用ThroughputMonitor统计 tok/s 与 TFLOPs见 litgpt/pretrain.py。参数校验规则validate_args()见 litgpt/pretrain.py强制约束train.max_tokens与train.max_norm必须设置pretrain不支持epochs与eval.max_new_tokenstrain.max_steps仅用于 profiling/调试完整预训练建议用max_tokens--resume与--initial_checkpoint_dir二选一。用 Lightning Thunder 加速预训练Lightning Thunder 提供了完整扩展包括策略实现extensions/thunder/strategies/thunder_fsdp.py、extensions/thunder/strategies/thunder_ddp.py、预训练入口extensions/thunder/pretrain.py以及 unsloth 内核extensions/thunder/unsloth/kernels。在实验对比中Thunder 相比常规 PyTorch 在 7B Llama 2 微调上取得了约 40% 的加速。更多信息见 extensions/thunder/README.md 与 extensions/thunder/init.py。预训练项目模板以下 Lightning Studio 模板提供了可复现的多 GPU / 多节点预训练项目环境模板主题Prepare the TinyLlama 1T token dataset准备 TinyLlama 1T token 数据集Pretrain LLMs - TinyLlama 1.1BTinyLlama 1.1B 从零预训练Continued Pretraining with TinyLlama 1.1BTinyLlama 1.1B 继续预训练进阶参考仓库内其他预训练配置除debug.yaml与tinyllama.yaml外config_hub/pretrain 还提供两类可直接套用的配置config_hub/pretrain/tinystories.yaml复现 GPT-NeoX 风格 TinyStories 15M 模型使用自定义model_config6 层、6 头、n_embd288、block_size256并开启tie_embeddings: true、micro_batch_size: 128、max_tokens: 9700000000日志后端为csvconfig_hub/pretrain/microllama.yaml300M 参数的 MicroLlama 配置注释中说明其 batch 设置按 4 × 24G 4090 调参global_batch_size: 48、micro_batch_size: 12供参考按 GPU 数与显存自行缩放。这些 YAML 中每条参数都带有类型、默认值与取值范围注释是排查命令行参数问题的权威参考。总结本文完整覆盖了 LitGPT 预训练的实操全流程litgpt pretrain的用法与架构列表、基于TextFiles的自定义文本数据预训练、三种继续预训练场景下载模型续训、断点续训、换数据集续训、TinyLlama 1.1B 配置参考以及学习率调度、梯度累积、checkpoint 转换等底层原理。结合 litgpt/pretrain.py、litgpt/args.py 与 config_hub/pretrain 中的配置你可以据此搭建自己的预训练流水线并进一步查阅 tutorials/pretrain_tinyllama.md 走通完整的 TinyLlama 训练项目。【免费下载链接】litgpt20 high-performance LLMs with recipes to pretrain, finetune and deploy at scale.项目地址: https://gitcode.com/GitHub_Trending/li/litgpt创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。