deepspeed+transformers模型微调

一、目录

  1. 代码讲解

二、实现。

1、代码讲解,trainer 实现。
transformers通过trainer 集成deepspeed功能,所以中需要进行文件配置,即可实现deepspeed的训练。
微调代码: 参数定义—>数据处理---->模型创建/评估方式---->trainer 框架训练
注意: V100 显卡,不包括float16 精度训练。

import deepspeed
deepspeed.ops.op_builder.CPUAdamBuilder().load()
import nltk
import torch
import evaluate
import datasets
import numpy as np
from nltk.tokenize import sent_tokenize
from torch.nn.utils.rnn import pad_sequence
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
from transformers import Seq2SeqTrainer, Seq2SeqTrainingArguments
nltk.download("punkt")
import gc
import torch

######################################定义参数####################################
dataset_name = "samsum" # 数据集名称
#model_name="google/flan-t5-xxl" # 模型名称
model_name="google/flan-t5-xl" # 模型名称
max_input_length = 256
max_gen_length = 128
output_dir = "checkpoints"
num_train_epochs = 5
learning_rate = 5e-5
deepspeed_config = "ds_config.json" #          deepspeed配置文件
per_device_train_batch_size=5 # batch size设置为1,因为太大导致OOM
per_device_eval_batch_size=5
gradient_accumulation_steps=10 # 由于单卡的batch size为1,为了扩展batch size,使用梯度累加

#################################加载数据集,与数据预处理#########################################
tokenizer = AutoTokenizer.from_pretrained(model_name)
dataset = datasets.load_dataset(dataset_name)
print(dataset["train"][0])

def preprocess(examples):
    dialogues = ["summarize:" + dia for dia in examples["dialogue"]]
    # summaries = [summ for summ in examples["summary"]]
    model_inputs = tokenizer(dialogues, max_length=max_input_length, truncation=True)
    labels = tokenizer(text_target=examples["summary"], max_length=max_gen_length, truncation=True)
    model_inputs["labels"] = labels["input_ids"]
    return model_inputs

tokenized_dataset = dataset.map(preprocess, batched=True, remove_columns=["dialogue", "summary", "id"])
# print(tokenized_dataset["train"]["input_ids"][0]) # 打印结果    对map后的数据进行查看。


def collate_fn(features):
    batch_input_ids = [torch.LongTensor(feature["input_ids"]) for feature in features]
    batch_attention_mask = [torch.LongTensor(feature["attention_mask"]) for feature in features]
    batch_labels = [torch.LongTensor(feature["labels"]) for feature in features]
    batch_input_ids = pad_sequence(batch_input_ids, batch_first=True, padding_value=tokenizer.pad_token_id)
    batch_attention_mask = pad_sequence(batch_attention_mask, batch_first=True, padding_value=0)
    batch_labels = pad_sequence(batch_labels, batch_first=True, padding_value=-100)
    return {
   
        "input_ids": batch_input_ids,
        "attention_mask": batch_a
<think>好的,我现在需要回答用户关于如何使用DeepSpeed进行大模型微调的问题。首先,我要理解用户的需求。他们可能是在处理大规模语言模型时遇到了资源限制的问题,想通过DeepSpeed来优化微调过程。接下来,我需要回忆DeepSpeed的相关知识,尤其是微调方面的技术。 根据用户提供的引用内容,引用[1]提到DeepSpeed提供了一整套优化工具,比如ZeRO优化、参数高效微调支持、混合精度和量化技术。引用[2]以FLAN-T5 XXL为例展示了如何结合Transformers使用DeepSpeed。引用[3]则提到了启动训练的命令。这些信息都是关键点,需要整合到回答中。 接下来,我应该按照用户的系统级指令来组织内容。首先,确保所有数学公式正确使用$...$或$$...$$格式。不过在这个问题中可能涉及较少的数学公式,更多的是技术步骤和配置。然后结构要清晰,分步骤讲解,帮助用户逐步实现微调。 可能需要涵盖以下几个部分: 1. 环境准备:安装DeepSpeed和相关库。 2. 代码调整:修改训练脚本以集成DeepSpeed。 3. 配置文件:创建DeepSpeed的配置文件,设置优化参数。 4. 启动训练:使用deepspeed命令启动训练。 5. 优化技术:解释ZeRO的不同阶段、混合精度训练、梯度检查点等。 6. 实际案例:结合引用[2]中的FLAN-T5例子,说明具体应用。 需要确保每个步骤都有具体的示例,比如给出代码片段或配置文件的示例。同时,要检查引用是否正确标注,比如在提到ZeRO优化时引用[1],在举例时引用[2],启动命令引用[3]。 还要注意用户要求生成相关问题,因此最后需要列出几个相关问题,如DeepSpeed的优化技术细节、配置文件参数、资源不足时的解决方案,以及实际应用案例等。 在写作过程中,要使用中文,保持回答真实可靠,结构清晰。可能需要参考官方文档或可靠教程来确保步骤的准确性,但用户已经提供了相关引用,可以主要依赖这些引用内容。 最后,检查是否遗漏了任何用户的问题点,比如是否涵盖了安装、配置、启动和优化技术,是否引用了正确的来源,是否符合格式要求,特别是代码块和引用标识是否正确。</think>以下是如何使用DeepSpeed进行大模型微调的分步指南: ### 一、环境准备 1. 安装DeepSpeed库和依赖 ```bash pip install deepspeed transformers torch ``` 2. 验证安装是否成功 ```bash ds_report # 查看CUDA、NCCL等组件状态 ``` ### 二、代码集成 1. 修改训练脚本(以HuggingFace Transformers为例) ```python from transformers import Trainer, TrainingArguments # 增加DeepSpeed配置路径参数 training_args = TrainingArguments( output_dir="./results", deepspeed="./ds_config.json", # 关键配置入口[^3] ... ) ``` ### 三、配置文件示例(ds_config.json) ```json { "fp16": { "enabled": true, "loss_scale": 0, "initial_scale_power": 16 }, "optimizer": { "type": "AdamW", "params": { "lr": 5e-5 } }, "scheduler": { "type": "WarmupLR", "params": { "warmup_min_lr": 0, "warmup_max_lr": 5e-5, "warmup_num_steps": 1000 } }, "zero_optimization": { "stage": 3, # ZeRO第三阶段优化[^1] "offload_optimizer": { "device": "cpu" } }, "gradient_accumulation_steps": 4 } ``` ### 四、核心优化技术 1. **ZeRO优化** - Stage 1: 优化器状态分区 - Stage 2: 梯度+优化器状态分区 - Stage 3: 参数+梯度+优化器状态全分区[^1] 2. **混合精度训练** ```json "fp16": { "enabled": true, "loss_scale_window": 1000 } ``` 3. **梯度检查点技术** ```python model.gradient_checkpointing_enable() # 减少显存消耗30%+ ``` ### 五、启动训练 使用DeepSpeed分布式启动器: ```bash deepspeed --num_gpus=4 train.py \ # 指定GPU数量 --deepspeed ds_config.json # 指定配置文件 ``` ### 六、实战案例(FLAN-T5 XXL微调) 1. 加载预训练模型 ```python from transformers import AutoModelForSeq2SeqLM model = AutoModelForSeq2SeqLM.from_pretrained("google/flan-t5-xxl") ``` 2. 配置DeepSpeed训练参数 ```python training_args = TrainingArguments( per_device_train_batch_size=2, gradient_accumulation_steps=8, learning_rate=2e-5, num_train_epochs=3, deepspeed="./ds_config.json" ) ``` 3. 启动训练后显存优化效果: - 基础显存需求:~48GB/GPU - 使用ZeRO Stage3 + offload:~16GB/GPU[^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值