huggingface 的trainer训练框架优势

HuggingfaceTransformers库提供了一个基于Transformer模型的预训练语言工具包,支持PyTorch和Tensorflow2.0,包含高效的TrainerAPI用于训练和评估,涵盖了模型加载、保存、优化技巧以及分布式和量化训练。此外,还介绍了其在验证和推理阶段的特性,以及与相关库的集成,如Accelerate和bitsandbytes。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


背景

Huggingface Transformers 是基于一个开源基于 transformer 模型结构提供的预训练语言库,它支持 Pytorch,Tensorflow2.0,并且支持两个框架的相互转换。框架支持了最新的各种NLP预训练语言模型,使用者可以很快速的进行模型的调用,并且支持模型further pretraining 和 下游任务fine-tuning。

Transformers 库写了了一个transformers.Trainer API,它是一个简单但功能完整的 PyTorch 训练和评估循环,针对 Transformers 进行了优化,有很多的训练选项和内置功能,同时也支持多GPU/TPU分布式训练和混合精度。即Trainer API是一个封装好的训练器(Transformers库内置的小框架,如果是Tensorflow,则是TFTrainer)


一、 开源生态环境

  1. 基于huggingface transformers实现,可以快速稳定调用几乎全部开源模型使用。
  2. 开源生态良好,企业级维护,网上示例和各种不同需求代码demo多。
  3. 官方tutorial 全面。
  4. 支持huggingface 各种好用工具库:datasets, evaluate, peft,accelerate等

二、训练阶段

  1. 内置训练循环

  2. 支持模型不同训练阶段的加载和保存

    (模型参数,学习率,优化器,scheduler等)自动保存加载,保证训练中断后继续稳定训练。

  3. log打印,训练阶段log自动打印。

  4. 支持各种optmizer,schedular 参数化配置。

  5. 支持各种提高模型能力的trick 如warmup,grad_clip ,grad_accumulate 等。

  6. TrainingArguments ,DataArguments,ModelArgument

    训练过程,数据相关,模型相关的各种常用参数存在

  7. 支持使用datasets 类 map操作,进行数据集高效预处理

  8. 支持使用Accelerate库进行分布式训练

    1. 🤗 Accelerate 还可以使 DataLoaders 更高效。这是通过自定义采样器实现的,它可以在训练期间自动将部分批次发送到不同的设备,从而允许每个设备只需要储存数据的一部分,而不是一次将数据复制四份存入内存,具体取决于配置。因此,内存总量中只有原始数据集的一个完整副本。该数据集会拆分后分配到各个训练节点上,从而允许在单个实例上训练更大的数据集,而不会使内存爆炸。
    2. 自动识别不同节点卡数量和类型,不需要model,数据to(rank), cuda(),to(device)等操作。
  9. 支持混合精度训练,包括torch.cuda.amp (torch>1.6) 和 apex (torch<=1.6)

  10. 支持使用deepspeed 使用

    trainer使用deepspeed 仅使用–deepspeed config 即可,同时config文件中设置为auto,即可使用trainer中默认的参数,简化了参数配置。

    支持使用zero1,zero2,zero3,zero-inifinity

  11. 支持peft 库使用

    1. lora 等(Prefix Tuning, P-Tuning, IA3) 仅训练部分参数的加速训练框架。
    2. prepare_model_for_int8_training,支持使用int8 量化进行训练,节省大量内存。
    3. qlora 将lora 参数量化为NF4 进行进一步节省内存。

三、验证阶段

  1. 内置验证循环

  2. 验证解耦合

    仅需自行实现compute_metrics ,并且支持huggingface的evaluate库 的各种基本任务的验证工具(p, r, f1,rouge等各种评估指标)

  3. 支持使用accelerate库进行分布式验证


四、推理阶段

  1. 支持使用 bitsandbytes 库 进行量化操作
    1. int8量化推理,几乎不会损失任何精度
    2. Int4 推理
  2. 支持decoder 的各种解码实现
    1. top-k
    2. top-p
    3. beam-search 等

参考

  1. PEFT
  2. Accelerate
  3. text-generation-inference
  4. transformers
  5. FasterTransformer
  6. peft
  7. qlora
  8. LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale
### 关于Python情感分析及模型训练 #### 使用`TextBlob`进行简单的情感分析 `TextBlob` 是一个用于自然语言处理 (NLP) 的 Python 庢书,支持简单的语法解析、词性标注以及情感分析等功能。通过 `TextBlob` 可以快速实现基础的情感分析功能。 以下是使用 `TextBlob` 进行情感分析的一个示例代码: ```python from textblob import TextBlob def analyze_sentiment(text): blob = TextBlob(text) sentiment = blob.sentiment.polarity # 获取情感极性分数 [-1, 1] return sentiment text = "I love this product! It's amazing." sentiment_score = analyze_sentiment(text) print(f"Sentiment Score: {sentiment_score}") ``` 此代码片段展示了如何利用 `TextBlob` 对一段文本计算其情感得分[^1]。 --- #### 构建更复杂的情感分析模型 对于更高精度的需求,可以考虑构建自定义的情感分析模型。这通常涉及以下几个阶段:数据预处理、特征提取、模型训练评估。 ##### 数据预处理 在实际应用中,原始数据可能包含噪声或冗余信息。因此,在进入模型之前需要对其进行清理标准化操作。例如去除停用词、标点符号转换为小写形式等。 下面是一段针对中文评论数据的数据清洗脚本: ```python import re import jieba def clean_text(text): # 移除非汉字字符 cleaned = re.sub(r'[^\u4e00-\u9fa5]', '', text.lower()) words = list(jieba.cut(cleaned)) # 分词 return ' '.join(words) sample_review = "这个产品真的很好用!" cleaned_sample = clean_text(sample_review) print(f"Cleaned Review: {cleaned_sample}") ``` 该函数实现了基本的中文文本清洗流程,并返回分词后的结果字符串[^1]。 --- ##### 特征工程与模型选择 为了提高模型表现力,可以选择合适的特征表示方式如 TF-IDF 向量化或者 Word Embedding 技术(比如 GloVe 或者 FastText)。此外还可以尝试引入深度学习框架下的 RNN/LSTM/GRU 网络结构来捕捉序列依赖关系。 这里给出基于 Scikit-Learn TfidfVectorizer 的传统机器学习方法例子: ```python from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.linear_model import LogisticRegression from sklearn.pipeline import Pipeline from sklearn.model_selection import train_test_split # 创建管道对象 pipeline = Pipeline([ ('tfidf', TfidfVectorizer()), ('clf', LogisticRegression(max_iter=1000)) ]) X_train, X_test, y_train, y_test = train_test_split(data['review'], data['label']) pipeline.fit(X_train, y_train) accuracy = pipeline.score(X_test, y_test) print(f'Accuracy: {accuracy:.2f}') ``` 这段程序说明了怎样组合TFIDF向量器同逻辑回归分类器一起工作从而完成二元分类任务。 --- #### 利用Transformer架构改进效果 如果追求更高的精确度,则推荐采用 Transformer 类型的大规模预训练语言模型来进行迁移学习。Hugging Face 提供了一个非常方便易用的工具包——Transformers ,允许开发者加载各种知名预训练权重文件并对特定领域做进一步微调调整适应新场景需求。 以下是如何借助 Transformers 微调 BERT 模型执行情感判断的例子: ```python pip install transformers datasets torch scikit-learn import torch from transformers import BertTokenizerFast, BertForSequenceClassification from sklearn.model_selection import train_test_split from datasets import load_dataset from transformers import Trainer, TrainingArguments tokenizer = BertTokenizerFast.from_pretrained('bert-base-chinese') model = BertForSequenceClassification.from_pretrained('bert-base-chinese') dataset = load_dataset("csv", data_files={"train": "./data/train.csv"}) tokenized_datasets = dataset.map(lambda examples: tokenizer(examples['content'], truncation=True, padding='max_length'), batched=True) train_data, eval_data = tokenized_datasets["train"].train_test_split(test_size=0.2).values() training_args = TrainingArguments( output_dir='./results', num_train_epochs=3, per_device_train_batch_size=16, save_steps=10_000, logging_dir='./logs' ) trainer = Trainer( model=model, args=training_args, train_dataset=train_data, eval_dataset=eval_data ) trainer.train() ``` 上述代码块解释了从头至尾整个过程包括但不限于读取本地 CSV 文件作为输入源材料;接着运用 HuggingFace 自带 API 将句子转化为固定长度编码串列;最后指定超参数配置启动正式训练环节[^3]。 --- #### 性能优化建议 当初步搭建好原型之后,可以通过多种手段继续挖掘潜力空间使得最终成果更加完善可靠。一些常见策略如下所示: 1. **使用高质量语料资源** - 更加贴切目标行业的样本有助于增强泛化能力; 2. **融入上下文感知机制** - 考虑到某些特殊表达背后隐藏的真实意图往往难以单纯依靠字面意思解读出来所以有必要加入额外辅助信号来源; 3. **探索混合范式设计思路** - 即将浅层统计规律总结归纳法跟深层神经网络相结合形成互补优势共同发挥作用[^2]. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值