ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

LitGPT 全量微调(Full Finetuning)实战指南:从权重下载、多卡训练到指令数据集定制

LitGPT 全量微调(Full Finetuning)实战指南:从权重下载、多卡训练到指令数据集定制 LitGPT 全量微调Full Finetuning实战指南从权重下载、多卡训练到指令数据集定制【免费下载链接】litgpt20 high-performance LLMs with recipes to pretrain, finetune and deploy at scale.项目地址: https://gitcode.com/GitHub_Trending/li/litgpt本篇技术指南以 LitGPT 开源仓库中的 finetune_full.md 为核心骨架系统讲解“全量微调”这一训练范式它与 Adapter、LoRA 等参数高效微调的本质区别、运行litgpt finetune_full的完整命令与参数、bfloat16/32-true精度选择、多 GPU 扩展、断点续训机制、生成验证以及如何用自定义 JSON 数据集进行指令微调。读完本文你将能独立完成一个 7B 级别大模型的完整微调闭环并理解其底层实现原理。全量微调 vs 参数高效微调先明确适用场景LitGPT 提供多种微调路径各自对应独立的 CLI 子命令见 litgpt/main.py 中的PARSER_DATA微调方式命令训练参数规模成本全量微调litgpt finetune_full模型全部参数最高LoRAlitgpt finetune_lora仅新增低秩适配矩阵低Adapter / Adapter v2litgpt finetune_adapter/finetune_adapter_v2仅新增适配器层低全量微调Full Finetuning会更新模型的所有权重因此对显存、算力、数据量的要求都显著高于参数高效微调。官方文档明确指出这种方式成本高昂通常只建议作为对比实验baseline的参照。如果目标是参数高效微调请参考 finetune_adapter.md 和 finetune_lora.md。需要特别提醒的是litgpt finetune_full对训练参数有严格的约束。在 litgpt/finetune/full.py 的validate_args中代码会主动校验并拒绝不支持的配置不支持train.max_tokens、train.max_norm、train.tie_embeddings、train.lr_warmup_fraction这几个参数会直接抛出ValueError必须设置train.epochs或train.max_steps二者至少其一以及eval.max_new_tokens。准备工作一次性安装与权重下载在开始训练前只需完成两步一次性准备按照仓库根目录 README.md 中的说明安装依赖LitGPT 基于 PyTorch 与 Lightning Fabric按照 download_model_weights.md 中的指南下载并转换预训练权重。LitGPT 内置了多种常见指令微调数据集可直接通过--data参数引用包括 Alpaca、Alpaca2k、AlpacaGPT4、LIMA、Dolly、Deita、LongForm、FLAN 等完整清单见 litgpt/data/init.py 中的__all__。你也可以选用自己的数据集见下文“使用自定义数据集微调”更多数据集准备细节可参考 prepare_dataset.md。运行全量微调命令与关键参数以 Falcon-7B 为例最基本的全量微调命令是litgpt finetune_full tiiuae/falcon-7b \ --data Alpaca \这里tiiuae/falcon-7b是基座模型的 checkpoint 目录也可以是本地已下载并转换好的路径。资源需求需要重点关注官方文档指出微调 Falcon-7B 至少需要8 张约 40 GB 显存的 GPU。如果资源不足应优先考虑 LoRA 或 Adapter 方案或将max_seq_length调小以降低显存占用。多 GPU 扩展与 batch 参数你可以通过--devices参数利用更多 GPU 加速训练litgpt finetune_full tiiuae/falcon-7b \ --data Alpaca \ --devices 8同时可以根据 GPU 显存大小调整--train.micro_batch_size每个数据并行 rank 上的样本数以更充分地利用显存。从 litgpt/finetune/full.py 可以看到默认训练参数save_interval1000每 1000 个优化器步保存一次 checkpointlog_interval1每个迭代打印一次日志global_batch_size16所有数据并行 rank 间每个优化器步的样本总数micro_batch_size1每个 rank 每轮前向/反向的样本数lr_warmup_steps100学习率 warmup 迭代数epochs5训练轮数max_seq_lengthNone不限样本长度。其中global_batch_size与micro_batch_size共同决定了梯度累积步数gradient_accumulation_iters global_batch_size / (devices × num_nodes) / micro_batch_size见 litgpt/args.py。训练循环在 litgpt/finetune/full.py 中实现每个微批次前向计算chunked_cross_entropy损失并反向累积到完整 batch 后才执行optimizer.step()与scheduler.step()。多卡策略与断点续训当devices × num_nodes 1时代码自动启用FSDPFully Sharded Data Parallel策略见 litgpt/finetune/full.py以Block为自动切分单元、开启激活检查点activation checkpointing、limit_all_gathersTrue以降低通信峰值这是全量微调大模型显存可控的关键机制。训练中断后可通过--resume恢复传入True会从out_dir中最新 checkpoint 恢复传入auto则在没有 checkpoint 时不报错。恢复逻辑litgpt/finetune/full.py会通过快进数据迭代器回到中断位置保证数据流与优化器状态一致。指定输出目录与精度选择脚本会周期性把 checkpoint 保存到out_dir。微调不同模型或使用自定义数据集时建议指定带含义的输出目录litgpt finetune_full tiiuae/falcon-7b \ --data Alpaca \ --out_dir out/full/my-model-finetuned如果你的 GPU 不支持bfloat16可以传入--precision 32-true改用 FP32 训练。例如在 MPS现代 Mac 的 GPU上进行微调litgpt finetune_full tiiuae/falcon-7b \ --data Alpaca \ --out_dir out/full/my-model-finetuned \ --precision 32-true在 Mac 上运行时Fabric 会自动识别mps作为加速器无需手动指定。LitGPT 支持的精度选项为bf16-true、bf16-mixed、32-true见 litgpt/finetune/full.py未显式指定时会通过get_default_supported_precision(trainingTrue)自动选择当前硬件支持的默认精度。checkpoint 目录结构从测试用例 tests/test_full.py 可以确认每次保存 checkpoint 时目录中会生成lit_model.pth模型权重model_config.yaml模型架构配置tokenizer_config.json/tokenizer.json分词器文件hyperparameters.yaml本次训练的超参数save_hyperparameters写入prompt_style.yaml使用的 prompt 模板save_prompt_style写入。此外训练结束后会在out_dir/final/lit_model.pth保存最终权重并在out_dir/logs/csv/version_0/metrics.csv中记录指标日志默认 CSV logger也可切换为 wandb、tensorboard、mlflow 等见 litgpt/args.py。测试微调后的模型训练完成后用litgpt generate_full子命令对应 litgpt/generate/full.py验证效果通过--finetuned_path指定微调产出的权重litgpt generate_full tiiuae/falcon-7b \ --prompt Recommend a movie to watch on the weekend. \ --finetuned_path out/full/my-model-finetuned/lit_model_finetuned.pth输出示例A good movie to watch on the weekend would be The Lion King, since its a classic family film that everyone can enjoy...如果你的 GPU 支持bfloat16脚本会自动启用。generate_full还支持以下采样参数见 litgpt/generate/full.py--max_new_tokens最大生成 token 数默认 100--top_kTop-K 采样候选数默认 50--top_p核采样概率阈值默认 1.0--temperature采样温度默认 0.8值越高生成越随机--quantize支持 bnb.nf4 / bnb.nf4-dq / bnb.fp4 / bnb.fp4-dq / bnb.int8 等量化方式以降低推理显存。注意generate_full只能加载由litgpt finetune_full产出的 checkpoint因为全量微调直接覆盖了全部权重与预训练权重结构一致但内容不同。使用自定义数据集微调LitGPT 支持直接训练自定义的 JSON 指令数据集流程分两步。第一步准备 JSON 数据文件创建 JSON 文件其中每一行条目对应一条「指令-回答」对。每个条目包含instruction和output字段input为可选字段。注意当前只有 Alpaca 聊天模板会用到input字段如果使用 Alpaca 模板且指令无需上下文input可以设为空字符串。示例格式如下[ { instruction: Arrange the given numbers in ascending order., input: 2, 4, 0, 8, 3, // Optional: only used in Alpaca chat template output: 0, 2, 3, 4, 8 }, ... ]第二步传入数据路径并启动训练litgpt finetune_full tiiuae/falcon-7b \ --data JSON \ --data.json_path data/mydata.json \ --out_dir data/mydata-finetuned从 litgpt/data/json_data.py 的实现看JSON数据模块支持两种组织方式单个文件传入一个.jsonJSON 数组或.jsonl逐行 JSON文件程序会按val_split_fraction默认 0.05自动切分训练/验证集并给出提示警告目录传入一个包含train.json或train.jsonl和val.json或val.jsonl的目录此时不应再设置val_split_fraction。JSON模块还支持--data.prompt_style默认alpaca、--data.mask_prompt是否用ignore_index屏蔽 prompt 部分的损失、--data.ignore_index默认 -100、--data.num_workers默认 4等参数。结合配置文件理解完整参数面除了命令行传参LitGPT 还支持通过配置文件驱动训练litgpt finetune_full --config ...。以仓库自带的 config_hub/finetune/llama-3.1-8b/full.yaml 为例可以完整看到全量微调的各维度参数checkpoint_dir: checkpoints/meta-llama/Meta-Llama-3.1-8B out_dir: out/finetune/full-llama-3.1-8b precision: bf16-true devices: 4 num_nodes: 1 resume: false data: class_path: litgpt.data.Alpaca2k init_args: mask_prompt: false prompt_style: alpaca ignore_index: -100 seed: 42 num_workers: 4 train: save_interval: 200 log_interval: 1 global_batch_size: 64 micro_batch_size: 4 lr_warmup_steps: 25 epochs: 1 max_tokens: max_steps: max_seq_length: 512 tie_embeddings: max_norm: min_lr: 6.0e-05 eval: interval: 25 max_new_tokens: 100 max_iters: 100 initial_validation: false final_validation: true logger_name: csv seed: 1337 optimizer: class_path: torch.optim.AdamW init_args: lr: 0.0002 weight_decay: 0.1 betas: [0.9, 0.95]几点值得关注的细节max_seq_length在训练前会被动态收紧代码会扫描训练与验证数据集中最长序列取min(longest_seq_length, train.max_seq_length)作为实际序列长度litgpt/finetune/full.py从而在保证覆盖所有样本的前提下尽量节省显存学习率调度采用「线性 warmup 余弦退火」组合SequentialLR见 litgpt/finetune/full.py训练过程中会在每个eval.interval步执行验证集评估与示例生成temperature0.8并在训练结束时执行最终验证eval.final_validationTrue输出val_loss与val_ppllitgpt/finetune/full.py若显存紧张可优先降低micro_batch_size或max_seq_length必要时减少global_batch_size并配合更多梯度累积避免直接降级为低效的小 batch 训练。小结全量微调是 LitGPT 中最重的微调路线它训练全部参数、显存与算力门槛最高主要价值在于作为高质量 baseline。实战要点可归纳为资源评估先行Falcon-7B 级别至少需要 8×40GB 显存资源不足请改用 LoRA/Adapter精度策略现代 GPU 默认自动使用bf16不支持时显式传--precision 32-true如 MPS规模化训练--devices、--num_nodes驱动多卡FSDP 激活检查点负责显存管理--resume保障断点续训数据定制使用--data JSON --data.json_path即可接入自定义 instruction-output 数据集验证闭环用litgpt generate_full --finetuned_path验证微调效果。更深入的内容可继续阅读仓库内的 finetune_lora.md、finetune_adapter.md、prepare_dataset.md、oom.md 等教程以及 litgpt/finetune/full.py 与 tests/test_full.py 中的实现与测试证据。【免费下载链接】litgpt20 high-performance LLMs with recipes to pretrain, finetune and deploy at scale.项目地址: https://gitcode.com/GitHub_Trending/li/litgpt创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表