# Summary 这个库大大简化了使用和微调这些强大模型的过程。 就像[Java@]([email protected])中的 List 和 Lists 的关系一样 - Transformer 是一种架构设计。 - Transformers 是一个提供了多种基于 Transformer(及其他)架构的预训练模型的库。这个库大大简化了使用和微调这些强大模型的过程。 # Notes **Hugging Face `transformers` 库速查表 (Cheatsheet)** | | | | |---|---|---| |**类别 (Category)**|**方法/类/函数 (Method/Class/Function)**|**描述 (Description in Transformers Context)**| |**核心组件**||| |模型加载与配置|`AutoConfig.from_pretrained(model_name)`|从 Hugging Face Hub 或本地路径加载模型的配置信息 (如层数、隐藏单元大小等)。| ||`AutoModel.from_pretrained(model_name)`|根据检查点名称自动推断并加载预训练的基础 Transformer 模型 (不带特定任务头)。| ||`AutoModelFor[Task].from_pretrained(model_name)`|加载预训练模型,并附加适用于特定任务的头部 (例如 `AutoModelForSequenceClassification`, `AutoModelForCausalLM`)。| ||`BertModel`, `GPT2Model`, etc.|直接加载特定架构的基础模型类。| ||`BertForSequenceClassification`, etc.|直接加载特定架构且带有任务头的模型类。| ||`model.config`|访问已加载模型的配置对象。| |分词器 (Tokenizer)|`AutoTokenizer.from_pretrained(model_name)`|根据检查点名称自动推断并加载对应的分词器,处理文本到模型输入的转换。| ||`BertTokenizer`, `GPT2Tokenizer`, etc.|直接加载特定模型对应的分词器类。| ||`tokenizer(text_input,...)`|对单个文本或文本列表进行分词、编码、添加特殊标记,并可选地进行填充和截断。常用参数:`padding`, `truncation`, `max_length`, `return_tensors`。| ||`tokenizer.encode()` / `tokenizer.decode()`|单独进行编码(文本 -> ID)或解码(ID -> 文本)操作。| ||`tokenizer.batch_encode_plus()`|`tokenizer()` 的更底层版本,提供更多控制。| ||`tokenizer.pad_token`, `tokenizer.eos_token`, etc.|访问分词器使用的特殊标记。| |**数据准备**||| |数据集整合|`datasets.load_dataset()`|(来自 `datasets` 库) 从 Hub 或本地加载数据集,常与 `transformers` 配合使用。| ||`dataset.map(preprocess_function, batched=True)`|(来自 `datasets` 库) 对数据集中的每个样本应用分词等预处理函数。| |数据收集器 (Collator)|`DataCollatorWithPadding(tokenizer)`|在批处理 (batching) 时动态地将序列填充到批内最大长度。| ||`DataCollatorForSeq2Seq(tokenizer, model)`|专门为序列到序列任务 (如翻译、摘要) 设计的数据收集器,处理编码器和解码器的输入。| ||`DataCollatorForLanguageModeling(tokenizer, mlm=...)`|为语言模型任务 (如 MLM, CLM) 准备数据,例如进行掩码操作。| |**训练 (Trainer API)**||| |训练参数|`TrainingArguments(output_dir,...)`|定义训练过程的所有超参数和设置 (如学习率、批大小、轮数、保存策略、评估策略、日志记录等)。| |训练器|`Trainer(model, args, train_dataset, eval_dataset, tokenizer, data_collator, compute_metrics)`|封装了训练和评估循环的高级 API。管理模型移动到设备、优化器、学习率调度器、梯度累积、混合精度等。| ||`trainer.train()`|启动训练过程。| ||`trainer.evaluate()`|在评估数据集上运行评估。| ||`trainer.predict(test_dataset)`|在测试数据集上进行预测。| |**推理 (Pipelines)**||| |简化推理|`pipeline(task_name, model, tokenizer, device)`|创建一个易于使用的流水线对象,用于特定的 NLP 任务 (如 'sentiment-analysis', 'text-generation', 'ner', 'fill-mask', 'translation_xx_to_yy')。| ||`pipe = pipeline(...)`|创建流水线实例。| ||`pipe(input_data)`|使用创建的流水线对输入数据进行推理。| |**评估**||| |指标计算|`evaluate.load("metric_name")`|(来自 `evaluate` 库) 加载评估指标 (如 'accuracy', 'f1', 'rouge', 'bleu')。`datasets.load_metric` 是旧版 API。| ||`metric.compute(predictions, references)`|计算给定预测和参考标签的指标分数。| ||`compute_metrics(eval_pred)`|一个传递给 `Trainer` 的函数,用于在评估过程中解码预测并计算指标。`eval_pred` 是包含 `predictions` 和 `label_ids` 的元组。| |**保存与加载**||| |模型与分词器|`model.save_pretrained(save_directory)`|将模型权重和配置文件保存到指定目录。| ||`tokenizer.save_pretrained(save_directory)`|将分词器相关文件 (词汇表、配置) 保存到指定目录。| ||`trainer.save_model(output_dir)`|`Trainer` 提供的方法,用于保存模型、分词器(如果提供给 Trainer)和训练状态。| ||`*.from_pretrained(path_or_model_name)`|(适用于 `Auto*` 类, 具体模型类, 分词器类) 从本地目录或 Hub 加载之前保存的模型或分词器。| |**实用工具与概念**||| |设备管理|`.to(device)`|(继承自 PyTorch/TF) 将模型或张量移动到指定设备(CPU 或 GPU)。`Trainer` 会自动处理。| |学习率调度器|`get_scheduler(name, optimizer, num_warmup_steps, num_training_steps)`|创建学习率调度器,例如线性预热衰减 (`get_linear_schedule_with_warmup`)。`Trainer` 通常会自动处理。| |模型输出|`model(**inputs)`|模型前向传播调用。输入通常是 `input_ids`, `attention_mask` 等分词器输出。| ||`outputs.loss`|模型输出对象中通常包含的损失值 (如果提供了 `labels`)。| ||`outputs.logits`|模型输出对象中通常包含的未经 Softmax/Sigmoid 的原始预测分数。| ||`BaseModelOutputWithPooling`, etc.|模型输出通常是特定的数据类对象,包含 `loss`, `logits`, `hidden_states`, `attentions` 等属性。| |日志控制|`transformers.logging.set_verbosity_info()`|设置 `transformers` 库的日志详细程度 (如 `DEBUG`, `INFO`, `WARNING`, `ERROR`)。| ## trainer_state.json `trainer_state.json` 是 Hugging Face Transformers 训练器自动生成的**训练状态记录文件**,它详细记录了整个训练过程的状态信息。 这个文件是训练过程的"黑匣子",记录了训练的完整状态,是判断训练是否完成的最可靠指标之一! ## 📋 trainer_state.json 的作用 ### 1. **训练进度跟踪** - 记录当前训练到第几个epoch - 记录全局步数(global_step) - 记录训练是否完成 ### 2. **断点续训支持** - 如果训练中断,可以从这个状态文件恢复 - 保存优化器状态、学习率调度器状态等 ### 3. **训练历史记录** - 每个检查点的损失值 - 学习率变化历史 - 评估指标历史 ## 🔍 文件内容详解 让我展示一个典型的 `trainer_state.json` 结构: ```json { "best_metric": null, "best_model_checkpoint": null, "epoch": 1.9956236323851204, // 当前epoch进度 "global_step": 228, // 全局训练步数 "is_hyper_param_search": false, "is_local_process_zero": true, "is_world_process_zero": true, "log_history": [ // 训练历史记录 { "epoch": 0.437636761487965, "learning_rate": 9.123e-05, "loss": 2.1234, "step": 50 }, { "epoch": 0.87527352297593, "learning_rate": 8.456e-05, "loss": 1.8765, "step": 100 } // ... 更多历史记录 ], "max_steps": -1, // 最大步数限制 "num_train_epochs": 2, // 计划训练的epoch数 "total_flos": 3.173173923466445e+17, // 总浮点运算次数 "trial_name": null, "trial_params": null } ``` ## 💡 关键字段含义 | 字段 | 含义 | 您的值 | |------|------|--------| | `epoch` | 当前训练进度 | `1.9956` (99.56%完成) | | `global_step` | 总训练步数 | `228` | | `num_train_epochs` | 计划训练轮数 | `2` | | `total_flos` | 浮点运算总量 | `3.17e+17` (衡量计算量) | | `log_history` | 训练历史 | 每个检查点的损失、学习率等 | ## 🔧 实际用途 ### 1. **监控训练进度** ```bash # 快速查看训练进度 cat outputs/checkpoint-228/trainer_state.json | grep '"epoch"' ``` ### 2. **断点续训** 如果训练中断,Transformers会自动读取这个文件来恢复训练状态 ### 3. **性能分析** ```bash # 查看损失变化趋势 cat outputs/checkpoint-228/trainer_state.json | grep -A5 -B5 '"loss"' ``` ### 4. **调试和优化** 通过历史记录分析学习率调度、损失收敛等情况 ## 🎯 在您的项目中 您的 `trainer_state.json` 显示: - ✅ **训练接近完成**:epoch = 1.9956/2.0 (99.56%) - ✅ **步数合理**:228步,符合预期 - ✅ **计算量大**:total_flos = 3.17e+17,说明进行了充分训练 **总结**:这个文件是训练过程的"黑匣子",记录了训练的完整状态,是判断训练是否完成的最可靠指标之一! <!-- more --> 好的,这是一个基于 Hugging Face `transformers` 库的常用 API 和概念速查表,格式类似于你提供的 PyTorch 速查表。`transformers` 库建立在 PyTorch、TensorFlow 或 JAX 之上,所以你会看到一些底层的概念(如设备管理)与 PyTorch 类似,但 `transformers` 提供了更高层次的抽象,特别是在模型加载、分词和训练/推理流程方面。 这个速查表涵盖了使用 `transformers` 库进行模型开发、训练和推理时的许多核心操作。由于 `transformers` 库非常庞大且功能丰富,这只是其中最常用的一部分。对于更高级的功能或特定模型/任务的细节,建议查阅 Hugging Face 的官方文档。