使用MosaicML Composer微调Hugging Face模型实战指南

使用MosaicML Composer微调Hugging Face模型实战指南

composer mosaicml/composer: 是一个用于机器学习的开源库,可以方便地实现机器学习算法和模型的训练和部署。适合对机器学习、开源库和想要实现机器学习算法的开发者。 composer 项目地址: https://gitcode.com/gh_mirrors/com/composer

前言

在自然语言处理(NLP)领域,Hugging Face的transformers库已成为使用预训练模型的事实标准。而MosaicML Composer则是一个专注于高效训练深度学习模型的库。本文将介绍如何结合两者的优势,使用Composer来微调Hugging Face的预训练模型。

准备工作

环境安装

首先需要安装Composer及其NLP相关依赖:

pip install 'mosaicml[nlp, tensorboard]'

知识准备

本教程假设读者已经具备:

  • Transformer模型的基础知识
  • Hugging Face库的基本使用经验
  • Composer库的入门知识

模型与数据准备

加载预训练模型

我们从Hugging Face加载BERT-base-uncased模型和对应的分词器:

import transformers

model = transformers.AutoModelForSequenceClassification.from_pretrained(
    'google-bert/bert-base-uncased', 
    num_labels=2  # 情感分类任务有两个标签
)
tokenizer = transformers.AutoTokenizer.from_pretrained('google-bert/bert-base-uncased')

数据加载与处理

我们使用斯坦福情感树库(SST-2)数据集,这是一个经典的二分类情感分析数据集。

import datasets
import os
from multiprocessing import cpu_count

def tokenize_function(sample):
    return tokenizer(
        text=sample['sentence'],
        padding="max_length",
        max_length=256,
        truncation=True
    )

sst2_dataset = datasets.load_dataset("glue", "sst2", num_proc=os.cpu_count() - 1)
tokenized_sst2_dataset = sst2_dataset.map(
    tokenize_function,
    batched=True,
    num_proc=cpu_count(),
    batch_size=100,
    remove_columns=['idx', 'sentence']
)

train_dataset = tokenized_sst2_dataset["train"]
eval_dataset = tokenized_sst2_dataset["validation"]

创建数据加载器

from torch.utils.data import DataLoader

data_collator = transformers.data.data_collator.default_data_collator
train_dataloader = DataLoader(
    train_dataset, 
    batch_size=16, 
    shuffle=False, 
    drop_last=False, 
    collate_fn=data_collator
)
eval_dataloader = DataLoader(
    eval_dataset,
    batch_size=16, 
    shuffle=False, 
    drop_last=False, 
    collate_fn=data_collator
)

模型包装与训练配置

将Hugging Face模型转换为Composer模型

Composer提供了HuggingFaceModel包装器,方便将Hugging Face模型转换为Composer可用的格式。

from torchmetrics.classification import MulticlassAccuracy
from composer.models.huggingface import HuggingFaceModel
from composer.metrics import CrossEntropy

metrics = [CrossEntropy(), MulticlassAccuracy(num_classes=2, average='micro')]
composer_model = HuggingFaceModel(
    model, 
    tokenizer=tokenizer, 
    metrics=metrics, 
    use_logits=True
)

优化器与学习率调度器

我们使用AdamW优化器和线性学习率衰减策略:

from torch.optim import AdamW
from torch.optim.lr_scheduler import LinearLR

optimizer = AdamW(
    params=composer_model.parameters(),
    lr=3e-5, 
    betas=(0.9, 0.98),
    eps=1e-6, 
    weight_decay=3e-6
)
linear_lr_decay = LinearLR(
    optimizer, 
    start_factor=1.0,
    end_factor=0, 
    total_iters=150
)

模型训练

配置Composer Trainer

import torch
from composer import Trainer

trainer = Trainer(
    model=composer_model,
    train_dataloader=train_dataloader,
    eval_dataloader=eval_dataloader,
    max_duration="1ep",  # 训练1个epoch
    optimizers=optimizer,
    schedulers=[linear_lr_decay],
    device='gpu' if torch.cuda.is_available() else 'cpu',
    train_subset_num_batches=150,  # 限制训练batch数量
    precision='fp32',
    seed=17  # 固定随机种子保证可复现性
)

开始训练

trainer.fit()

结果分析与模型保存

评估模型性能

trainer.state.eval_metrics

仅用150次迭代训练,模型就能达到约86%的准确率。

可视化预测结果

eval_batch = next(iter(eval_dataloader))
eval_batch = {k: v.cuda() if torch.cuda.is_available() else v for k, v in eval_batch.items()}

with torch.no_grad():
    predictions = composer_model(eval_batch)["logits"].argmax(dim=1)

predictions = predictions[:5]  # 只看前5个样本
label = ['negative', 'positive']

for i, prediction in enumerate(predictions):
    sentence = sst2_dataset["validation"][i]["sentence"]
    correct_label = label[sst2_dataset["validation"][i]["label"]]
    prediction_label = label[prediction]
    print(f"样本: {sentence}")
    print(f"真实标签: {correct_label}")
    print(f"预测结果: {prediction_label}")
    print()

保存模型

torch.save(trainer.state.model.state_dict(), 'model.pt')

进阶学习建议

  1. 尝试在更大规模的数据集上进行预训练和微调
  2. 探索Composer的其他功能,如模型分割、早期停止等
  3. 实验不同的优化策略和学习率调度器
  4. 尝试将模型部署到生产环境

通过本教程,您已经掌握了使用MosaicML Composer微调Hugging Face模型的核心流程。这种组合既能利用Hugging Face丰富的预训练模型资源,又能发挥Composer在训练效率上的优势,是NLP任务开发的强大工具组合。

composer mosaicml/composer: 是一个用于机器学习的开源库,可以方便地实现机器学习算法和模型的训练和部署。适合对机器学习、开源库和想要实现机器学习算法的开发者。 composer 项目地址: https://gitcode.com/gh_mirrors/com/composer

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

解雁淞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值