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

Unsloth实战:DeepSeek-R1模型高效微调完整步骤解析

Unsloth实战:DeepSeek-R1模型高效微调完整步骤解析

1. 环境准备与模型加载

首先安装必要的库并加载DeepSeek-R1模型:

from unsloth import FastLanguageModel import torch # 设置最大序列长度和数据类型 max_seq_length = 2048 dtype = None # 自动检测 load_in_4bit = True # 使用4bit量化减少显存占用 # 加载预训练模型 model, tokenizer = FastLanguageModel.from_pretrained( model_name = "deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B", max_seq_length = max_seq_length, dtype = dtype, load_in_4bit = load_in_4bit, )

2. 创建LoRA适配器

为模型添加LoRA适配器以实现高效微调:

model = FastLanguageModel.get_peft_model( model, r = 16, # LoRA秩 target_modules = ["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj"], lora_alpha = 16, lora_dropout = 0, bias = "none", use_gradient_checkpointing = "unsloth", random_state = 3407, use_rslora = False, loftq_config = None, )

3. 准备训练数据

加载并格式化训练数据集:

from datasets import load_dataset # 加载数据集 dataset = load_dataset("json", data_files="your_dataset.json") # 格式化函数 def formatting_prompts_func(examples): texts = examples["text"] return {"text" : texts} # 应用格式化 dataset = dataset.map(formatting_prompts_func, batched=True)

4. 配置训练参数

设置训练参数并初始化训练器:

from trl import SFTTrainer from transformers import TrainingArguments trainer = SFTTrainer( model = model, tokenizer = tokenizer, train_dataset = dataset, dataset_text_field = "text", max_seq_length = max_seq_length, args = TrainingArguments( per_device_train_batch_size = 2, gradient_accumulation_steps = 4, warmup_steps = 5, num_train_epochs = 1, learning_rate = 2e-4, fp16 = not torch.cuda.is_bf16_supported(), bf16 = torch.cuda.is_bf16_supported(), logging_steps = 1, optim = "adamw_8bit", weight_decay = 0.01, lr_scheduler_type = "linear", seed = 3407, output_dir = "outputs", ), )

5. 执行模型训练

开始微调过程:

trainer.train()

6. 模型推理测试

训练完成后进行推理测试:

# 启用快速推理模式 FastLanguageModel.for_inference(model) # 测试函数 def generate_response(question): inputs = tokenizer(question, return_tensors="pt").to("cuda") outputs = model.generate( input_ids=inputs.input_ids, attention_mask=inputs.attention_mask, max_new_tokens=max_seq_length, temperature=0.6, top_p=0.95, use_cache=False, ) return tokenizer.decode(outputs[0], skip_special_tokens=True)

7. 保存微调后的模型

将训练好的模型保存到本地:

# 保存为16bit合并模型 model.save_pretrained_merged( save_directory = "DeepSeekR1-1.5B-finetuned-fp16", tokenizer = tokenizer, save_method = "merged_16bit" ) # 也可保存为4bit量化版本 model.save_pretrained_merged( save_directory = "DeepSeekR1-1.5B-finetuned-4bit", tokenizer = tokenizer, save_method = "merged_4bit" )

关键参数说明

  1. LoRA配置

    • r: LoRA秩,影响模型微调的精细程度
    • lora_alpha: LoRA缩放系数,通常设置为r的1-2倍
    • target_modules: 应用LoRA的目标模块
  2. 训练参数

    • per_device_train_batch_size: 每个设备的批次大小
    • gradient_accumulation_steps: 梯度累积步数
    • learning_rate: 学习率,LoRA微调通常使用较高学习率
  3. 推理参数

    • temperature: 控制生成随机性
    • top_p: 核采样参数,控制生成多样性
http://www.jsqmd.com/news/562553/

相关文章:

  • T-S推理在智能控制系统中的实战解析与MATLAB实现
  • 饭教程!在 Linux 环境下快速完成安装、初始化与 Web UI 配置
  • 人工智能|大模型——应用——降低OpenClaw Token成本的四大策略
  • 基于MATLAB的单机无穷大系统的暂态稳定性系统设计 本设计包括设计报告,仿真工程
  • 英雄联盟段位修改终极指南:轻松打造个性化游戏界面
  • Asian Beauty Z-Image Turbo 效果对比:不同采样器与步数下的图像质量分析
  • 如何快速上手TegraRcmGUI:Switch破解注入完整指南
  • 脑电信号分类避坑指南:为什么你的CNN模型准确率上不去?
  • RDA5807M FM收音芯片驱动开发与硬件接口设计
  • 如何通过辅助排序损失优化推荐模型在稀疏反馈场景下的性能(KDD‘2024)
  • 解锁LoRa远距离通信:Heltec ESP32 LoRa v3的高效实战指南
  • 佳贝思锂电池专用上位机软件|兼容博强BMS保护板(适配圣阳、双登、汇龙、拓邦、海四达等品牌电池)
  • TCP/IP协议与Socket编程核心技术解析
  • 表达力|5个万能模型:普通人也能讲好故事,提升说话感染力
  • VASP机器学习力场训练避坑指南:从INCAR参数设置到声子谱验证的完整流程
  • 终极指南:深度解析ExplorerBlurMica如何用3大核心技术重塑Windows文件资源管理器透明美化体验
  • 三坐标测量技术进阶:斜孔测量难题与五轴联动创新方案
  • PVZ Toolkit:全能型植物大战僵尸开源辅助工具效率倍增方案
  • 线性多智能体系统一致性:动态事件触发控制的探索
  • 告别EasyExcel!用JXLS 2.10.0 + POI玩转Excel多Sheet报表(附完整模板与避坑指南)
  • 麒麟系统桌面右下角时间卡顿?可能是mate-indicators内存泄漏在作祟(附临时与永久修复方案)
  • 函数式编程:Lambda、map、filter、reduce的高级用法
  • Spring Cloud Gateway + 客户端证书认证(mTLS):金融级双向身份验证,杜绝非法接入
  • 当电感参数开始“皮“了怎么办?——聊聊永磁同步电机的电流预测控制黑科技
  • 告别‘哑巴’Ubuntu 18.04:保姆级ibus中文输入法安装与配置全攻略
  • Python原生AOT编译兼容性矩阵(2026.03最新版):覆盖Django 5.1+、NumPy 2.0+、PyTorch 2.5+
  • 如何在开放世界中构建个人导航系统?黑神话悟空地图增强插件的全方位解决方案
  • [具身智能-170]:在具身智能的技术路径中,其中大小脑联合架构是务实的架构成为行业当下的共识,如果要学习大脑,需要学习哪些技术?已经学习的路径建议。
  • 程序实现不同传感器数据优先级判断,重要参数优先显示更新,颠覆传统平等显示模式。
  • WPF装饰器(Adorner)的妙用:打造可交互的矩形标注控件(附避坑指南)