# 设置训练参数
training_args = TrainingArguments(
    output_dir="./results",  # 指定训练结果的输出目录
    evaluation_strategy="epoch",  # 每个epoch进行一次评估
    save_strategy="epoch",  # 每个epoch保存模型
    learning_rate=2e-5,  # 设置学习率
    per_device_train_batch_size=16,  # 设置每个设备的训练批大小
    per_device_eval_batch_size=16,  # 设置每个设备的评估批大小
    num_train_epochs=3,  # 设置训练的总epoch数
    weight_decay=0.01,  # 设置权重衰减率
    logging_dir="./logs",  # 指定日志目录
    logging_steps=10,  # 设置日志记录步长
    save_total_limit=2,  # 限制保存模型的总数
    load_best_model_at_end=True,  # 训练结束时加载最佳模型
    metric_for_best_model="accuracy",  # 指定用于评价最佳模型的指标
    greater_is_better=True,  # 指定评价指标的优化方向,此处为越高越好
    report_to="none",  # 避免与其他工具自动集成
)

这段代码中,请问

每个save_strategy=“epoch”,保存的模型是保存到哪里了

在您提供的 TrainingArguments 配置中,save_strategy="epoch" 参数指定了模型将在每个epoch结束时保存。保存的模型会被放置在 output_dir 参数指定的目录下。在您的代码中,output_dir 被设置为 ./results。因此,每个epoch结束时保存的模型会被保存在 ./results 目录下

保存的是什么?

save_strategy="epoch" 保存的是模型的快照,也就是在当前epoch结束时模型的状态。这个快照通常包含了以下内容:

  • pytorch_model.bin: 模型的权重文件。
  • config.json: 模型的配置信息。
  • tokenizer_config.json: 分词器的配置信息(如果有的话)。
  • special_tokens_map.json: 特殊令牌的映射(如果有的话)。
  • vocab.txt: 词汇表文件(如果有的话)。
  • trainer_state.json: 训练器的状态信息,包括训练的当前状态和历史记录。
  • training_args.bin: 用于训练的参数的二进制文件。
    这些文件共同构成了一个模型的状态,使得您可以在训练过程中的任何时间点恢复模型,并继续训练或进行推理。保存模型快照是机器学习中的一个常见做法,它可以用于以下场景:
  • 断点续训:如果训练过程被中断,您可以从最后一个保存的检查点恢复训练。
  • 调整超参数:在训练的不同阶段,您可能想要尝试不同的超参数设置。保存的模型快照允许您在不从头开始的情况下进行这些实验。
  • 模型选择:通过保存每个epoch的模型,您可以比较不同epoch的性能,并选择最佳的模型进行部署或进一步的分析。
    通过设置 save_total_limit 参数,您可以控制保存的模型快照的数量,以避免磁盘空间不足的问题。

保存格式

具体来说,模型保存的格式通常是按照以下结构:

./results/
    - checkpoint-epoch-1/
        - pytorch_model.bin
        - config.json
        - tokenizer_config.json
        - special_tokens_map.json
        - vocab.txt
        - trainer_state.json
        - training_args.bin
        - README.md
    - checkpoint-epoch-2/
        - (同上)
    - checkpoint-epoch-3/
        - (同上)
    ...

这里 checkpoint-epoch-1, checkpoint-epoch-2, checkpoint-epoch-3 等目录分别对应于每个epoch结束时的模型检查点。
另外,由于您设置了 save_total_limit=2,这表示只保留最后两个epoch的模型检查点。如果训练超过两个epoch,旧的检查点会被删除,只保留最新的两个。
如果您还设置了 load_best_model_at_end=Truemetric_for_best_model="accuracy",则在训练结束时,Trainer 会根据准确率指标加载最佳的模型检查点到 output_dir 目录下的 best_model 子目录中。