实战分享:用Unsloth框架微调DeepSeek-R1模型的完整流程

实战分享:用Unsloth框架微调DeepSeek-R1模型的完整流程 实战分享使用Unsloth框架微调DeepSeek-R1模型的完整流程1. 环境准备与模型加载首先需要安装必要的库并加载预训练模型from unsloth import FastLanguageModel import torch # 设置最大序列长度和数据类型 max_seq_length 2048 dtype None # 自动检测 load_in_4bit True # 使用4bit量化减少显存占用 # 加载DeepSeek-R1模型 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_from_disk # 加载数据集 train_dataset load_from_disk(cleaned_dataset_v4.0.0) # 数据格式化函数 def formatting_prompts_func(examples): texts examples[text] return {text: texts} # 应用格式化 dataset train_dataset.map(formatting_prompts_func, batchedTrue)4. 配置训练参数设置训练参数和回调函数from trl import SFTTrainer, SFTConfig from swanlab.integration.transformers import SwanLabCallback # 配置SwanLab回调 swanlab_callback SwanLabCallback( projecttrl_integration, experiment_nameDeepSeek-R1-Distill-Qwen-1.5B-SFT, description测试swanlab和trl的集成, config{framework: TRL}, ) # 配置训练参数 trainer SFTTrainer( model model, tokenizer tokenizer, train_dataset dataset, args SFTConfig( per_device_train_batch_size 2, gradient_accumulation_steps 4, warmup_steps 5, num_train_epochs 1, learning_rate 2e-4, logging_steps 1, optim adamw_8bit, weight_decay 0.01, lr_scheduler_type linear, seed 3407, report_to none, ), callbacks[swanlab_callback], )5. 执行模型训练启动训练过程trainer_stats trainer.train()6. 模型保存训练完成后保存模型# 保存为FP16精度 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_methodmerged_4bit )7. 模型推理测试使用训练好的模型进行推理# 启用快速推理模式 FastLanguageModel.for_inference(model) # 测试函数 def test_model(question, temperature0.6, top_p0.95): inputs tokenizer([question], return_tensorspt).to(cuda) outputs model.generate( input_idsinputs.input_ids, attention_maskinputs.attention_mask, max_new_tokensmax_seq_length, temperaturetemperature, top_ptop_p, use_cacheFalse, ) response tokenizer.batch_decode(outputs) print(response[0]) # 测试示例 test_model(解方程 (x 2)^2 0)通过以上步骤我们完成了使用Unsloth框架对DeepSeek-R1模型的高效微调全过程。这种方法在保持模型性能的同时显著降低了显存需求使得在消费级GPU上微调大模型成为可能。