当前位置: 首页 > news >正文

利用deepspeed在Trainer下面微调大模型Qwen2.5-3B

当模型参数越来越大的情况下,如果我们的GPU内存比较小,那么就没办法直接进行全参数微调,此时我们可以借助deepspeed来进行微调。

1、deepspeed的配置文件:

$ more deepspeed.json 
{"train_batch_size": 4,"train_micro_batch_size_per_gpu": 1,"zero_optimization": {"stage":1}
}

2、启动脚本run_deepspeed

$ more run_deepspeed 
export TRANSFORMERS_OFFLINE=1
export HF_DATASETS_OFFLINE=1
export PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:512
export CUDA_VISIBLE_DEVICES=0,1,2,3
export CUDA_DEVICE_ORDER=PCI_BUS_ID
export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
export DS_SKIP_CUDA_CHECK=1
export TF_ENABLE_ONEDNN_OPTS=0
export CUDA_HOME="/usr/local/cuda-12.2"
export LIBRARY_PATH="/usr/local/cuda-12.2/lib64:$LIBRARY_PATH"
nohup deepspeed train.py > logd.txt 2>&1 &

3、真正的训练脚本:train.py

$ more train.py 
from datasets import load_dataset, DownloadConfig
from transformers import AutoTokenizer
from transformers import DataCollatorWithPadding
from transformers import TrainingArguments
from transformers import AutoModelForSequenceClassification
from transformers import Trainer
from sklearn.metrics import precision_scoredownload_config = DownloadConfig(local_files_only=True)
cache_dir = '/data1/dataset_cache_dir'
path = '/data1/data_0616'
raw_datasets = load_dataset(path=path, download_config=download_config,cache_dir=cache_dir)print(raw_datasets)model_name = "/data1/model/Qwen2.5-3B"tokenizer = AutoTokenizer.from_pretrained(model_name)
tokenizer.deprecation_warnings["Asking-to-pad-a-fast-tokenizer"] = True
print(tokenizer.pad_token)def tokenize_function(batch):return tokenizer(batch["title"], batch["text"], truncation=True, padding=True, max_length=512)tokenized_datasets = raw_datasets.map(tokenize_function, batched=True)data_collator = DataCollatorWithPadding(tokenizer=tokenizer, padding='max_length', max_length=512)
output_dir = "/data1/result_0704"
training_args = TrainingArguments(output_dir=output_dir, evaluation_strategy="steps", num_train_epochs=100, learning_rate=5e-6,save_strategy="steps", greater_is_better=True, metric_for_best_model="precision",per_device_train_batch_size=1,per_device_eval_batch_size=1,deepspeed="deepspeed.json",load_best_model_at_end=True,local_rank=0,save_total_limit=10)model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=2)
print(model.config.eos_token_id)
model.config.pad_token_id = model.config.eos_token_iddef compute_metrics(pred):labels = pred.label_idspreds = pred.predictions.argmax(-1)precision = precision_score(labels, preds, labels=[0], average='macro', zero_division=0.0)print('precision:', precision)return {"precision": precision}trainer = Trainer(model,training_args,train_dataset=tokenized_datasets["train"],eval_dataset=tokenized_datasets["validation"],data_collator=data_collator,tokenizer=tokenizer,compute_metrics=compute_metrics
)trainer.train()
print("train end")
results = trainer.evaluate()
print(results)

http://www.lryc.cn/news/591353.html

相关文章:

  • 切比雪夫不等式的理解以及推导【超详细笔记】
  • 【Linux手册】缓冲区:深入浅出,从核心概念到实现逻辑
  • 2025年6月GESP(C++一级):假期阅读
  • 多线程--sem_wait(sem)特殊用法
  • 【原创】【图像算法】高精密电子仪器组装异常检测
  • 24、鸿蒙Harmony Next开发:不依赖UI组件的全局自定义弹出框 (openCustomDialog)
  • java之json转excel生成
  • AppTrace:重新定义免填邀请码,解锁用户裂变新高度
  • IMU噪声模型
  • JxBrowser 7.43.5 版本发布啦!
  • ubuntu 开启ssh踩坑之旅
  • 加速度传感器方向校准方法
  • 原生前端JavaScript/CSS与现代框架(Vue、React)的联系、区别与运行环境(精简版)
  • 关于用git上传远程库的一些常见命令使用和常见问题:
  • Python爬虫入门到实战(2)-selenium驱动浏览器
  • 静态住宅IP和节点有什么区别?哪种更适合你的需求?
  • Redis完全指南:从基础到实战(含缓存问题、布隆过滤器、持久化及Spring Boot集成)
  • redis速记
  • 【WPF】WPF 自定义控件之依赖属性
  • springboot打包二次压缩Excel导致损坏
  • 【Linux基础知识系列】第五十四篇 - 网络协议基础:TCP/IP
  • 深入GPU硬件架构及运行机制
  • 鸿蒙UI自动化测试框架Hypium的使用指南
  • springboot跨域问题 和 401
  • 解锁数据分析:从基础概念到核心指标的全面指南
  • 数据分析:从数据到决策的核心逻辑与实践指南
  • 电脑DLL错误修复dll微软运行库工具修复dll缺失找不到dll等问题,dll免费修复工具
  • Servlet概述
  • 基于arduino单片机汽车智能电子防碰撞装置设计
  • linux_线程同步