你列出的这些文件,其实是 LLaMA-Factory 在训练模型时自动保存的一个"检查点"(Checkpoint)。这个文件夹就像一个完整的"训练快照",能让你随时从中断的地方精准地恢复训练,而不必从头开始。
下面为你逐一解释每个文件的作用:
| 文件名 | 类型 | 核心作用 |
|---|---|---|
adapter_model.safetensors |
权重文件 | LoRA等高效微调方法的核心产物。它只包含增量"补丁"权重,不包含原始大模型,因此文件很小,是"轻量级"微调的关键。 |
adapter_config.json |
配置文件 | 适配器的"说明书" 。里面详细记录了LoRA等方法的配置,如r(秩)、alpha(缩放系数)、target_modules(目标模块)等。加载时必须与原始模型一起使用,因为它指明了原始模型的位置和结构。 |
training_args.bin |
二进制状态文件 | 训练参数的"快照"。它序列化了transformers.TrainingArguments中的所有配置,比如学习率、批大小等,用于恢复训练时保持环境一致。 |
scheduler.pt |
状态文件 | 记录了学习率调度器的内部状态。它精确记录了学习率在哪个周期、衰减到多少,确保恢复训练时学习率曲线是连续的,避免因突变导致的收敛问题。 |
trainer_state.json |
状态文件 | 训练过程的"日志总表"。它以JSON格式记录了global_step(全局步数)、log_history(历史损失值)、epoch等信息,是整个训练的进度索引。 |
rng_state_x.pth |
状态文件 | 随机数生成器 的内部状态。它是确保"可复现性"的关键,用于精确恢复模型初始化、数据加载器等随机数序列,保证每次恢复都能得到相同的采样顺序。 |
tokenizer_config.json |
配置文件 | 分词器的配置文件。包含了原始模型所用分词器的所有参数,如tokenizer_class、model_max_length等。 |
tokenizer.json |
配置文件 | 分词器的核心词汇表文件。它以结构化方式存储了所有token和对应的ID。 |
special_tokens_map.json |
配置文件 | 特殊标记的映射文件。定义了[CLS]、[SEP]、[PAD]等特殊token的映射关系。 |
README.md |
说明文档 | 自动生成的模型卡片,包含了模型的基本信息和用途,是加载时非必需的文档文件。 |
zero_to_fp32.py |
工具脚本 | DeepSpeed ZeRO优化器的"解包"工具 。当使用ZeRO-2/3进行分布式训练时,权重会碎片化。用python zero_to_fp32.py .可将其合并成一个完整的pytorch_model.bin文件,方便后续部署。 |
💎 总结与关键认知
理解了这些文件,就能明白几个关键的"断点续训"原理:
- 精准恢复 :一个完整的检查点之所以能实现断点续训,关键在于它不仅仅保存了模型参数,还保存了优化器状态(优化器的动量和方差等内部信息)、学习率调度器状态、随机状态等全部动态信息。
- LoRA的特性 :
adapter_model.safetensors文件只包含增量补丁,必须与原始基座模型配合才能使用。 - 分布式训练专用 :
zero_to_fp32.py脚本是专门用于DeepSpeed ZeRO优化器的。如果使用普通的分布式训练或单卡训练,此文件通常不会出现。
checkpoint/checkpoint-1050/global_step42002
这个文件用于继续训练 恢复原来的epoch,但是合并模型的时候用不到。里面都是adam的历史记录
我给你做成清晰表格,直接对应你这 3 个文件,一看就懂:
| 文件名 | 类型 | 核心作用 | 能不能删 | 用途场景 |
|---|---|---|---|---|
| bf16_zero_pp_rank_0_mp_rank_00_optim_states.pt | ZeRO 优化器状态 | 保存 pp=0 管道并行 rank 0 的优化器状态(Adam 动量、方差等) | ❌ 不能删 | 断点续训必须 |
| mp_rank_00_model_states.pt | 模型权重分片 | 保存 模型并行 rank 0 的模型权重/参数分片 | ❌ 绝对不能删 | 加载模型、推理、合并、续训 |
| bf16_zero_pp_rank_1_mp_rank_00_optim_states.pt | ZeRO 优化器状态 | 保存 pp=1 管道并行 rank 1 的优化器状态 | ❌ 不能删 | 断点续训必须 |