DeepSeek-R1-Distill 微调(sft)训练实战喂饭级别

一,项目简介

使用LLama-Factory大模型训练框架微调DeepSeek-R1-Distill实战

LLama-Factory项目github地址:link

项目特色

  • 多种模型:LLaMA、LLaVA、Mistral、Mixtral-MoE、Qwen、Yi、Gemma、Baichuan、ChatGLM、Phi 等等。
  • 集成方法:(增量)预训练、(多模态)指令监督微调、奖励模型训练、PPO 训练、DPO 训练、KTO 训练、ORPO 训练等等。
  • 多种精度:16 比特全参数微调、冻结微调、LoRA 微调和基于 AQLM/AWQ/GPTQ/LLM.int8/HQQ/EETQ 的 2/3/4/5/6/8 比特 QLoRA 微调。
  • 先进算法:GaLore、BAdam、DoRA、LongLoRA、LLaMA Pro、Mixture-of-Depths、LoRA+、LoftQ、PiSSA 和 Agent 微调。
  • 实用技巧:FlashAttention-2、Unsloth、RoPE scaling、NEFTune 和 rsLoRA。
  • 实验监控:LlamaBoard、TensorBoard、Wandb、MLflow 等等。
  • 极速推理:基于 vLLM 的 OpenAI 风格 API、浏览器界面和命令行接口。

二,DeepSeek-R1-Distill 模型下载

1.点击链接进入魔搭社区下载

link

2.搜索DeepSeek-R1-Distill,选择自己服务器显存可以训练大小的模型,
点击模型文件,下载模型
在这里插入图片描述

三,硬件依赖

* 估算值

方法精度7B13B30B70B110B8x7B8x22B
FullAMP120GB240GB600GB1200GB2000GB900GB2400GB
Full1660GB120GB300GB600GB900GB400GB1200GB
Freeze1620GB40GB80GB200GB360GB160GB400GB
LoRA/GaLore/BAdam1616GB32GB64GB160GB240GB120GB320GB
QLoRA810GB20GB40GB80GB140GB60GB160GB
QLoRA46GB12GB24GB48GB72GB30GB96GB
QLoRA24GB8GB16GB24GB48GB18GB48GB

四,安装环境和训练实战

4.1 环境安装
git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e ".[torch,metrics]"
4.2 构建自己的数据集
注册自己的数据集

将自己的数据集放到data目录下

vim data/dataset_info.json
### 第352行,找到chinese_r1_distill ,只留下ms_hub_url
 "chinese_r1_distill ": {
    "ms_hub_url": "XXXXX"
  },

记着名字,一会训练要指定数据集名称

五,修改对应的yaml文件
### model
model_name_or_path: /home/ai-developer/data/llamaModelFiles/DeepSeek-R1-Distill-Qwen-1.5B
trust_remote_code: true

### method
stage: sft
do_train: true
finetuning_type: lora
lora_rank: 8
lora_target: all

### dataset
dataset: chinese_r1_distill
template: deepseek
cutoff_len: 2048
max_samples: 1000
overwrite_cache: true
preprocessing_num_workers: 16

### output
output_dir: saves/deepseek/lora/sft
logging_steps: 10
save_steps: 500
plot_loss: true
overwrite_output_dir: true

### train
per_device_train_batch_size: 1
gradient_accumulation_steps: 4   #  8
learning_rate: 1.0e-4
num_train_epochs: 3.0
lr_scheduler_type: cosine
warmup_ratio: 0.1
bf16: true
ddp_timeout: 180000000

### eval
val_size: 0.1
per_device_eval_batch_size: 1
eval_strategy: steps
eval_steps: 500

开始训练

lora 指令微调

llamafactory-cli train examples/train_lora/mytrain_lora_sft.yaml

或者使用命令行

CUDA_VISIBLE_DEVICES=0,1,2,3 python src/train_bash.py  --stage sft     --do_train     --model_name_or_path  /app/model  --dataset my_train_data    --finetuning_type lora     --lora_target q_proj,v_proj     --output_dir /app/output   --overwrite_cache     --per_device_train_batch_size 1     --gradient_accumulation_steps 1     --lr_scheduler_type cosine     --logging_steps 10     --save_steps 1000     --learning_rate 5e-5     --num_train_epochs 3.0     --template yi
合并模型
llamafactory-cli export examples/merge_lora/my_lora_sft.yaml
### model
model_name_or_path: /home/ai-developer/data/llamaModelFiles/DeepSeek-R1-Distill-Qwen-1.5B
adapter_name_or_path: /home/ai-developer/LLaMA-Factory/saves/deepseek/lora/sft
template: deepseek
trust_remote_code: true

### export
export_dir: output/deepseek_lora_sft
export_size: 5
export_device: cpu
export_legacy_format: false

或者

CUDA_VISBLE_DEVICES=0 python /app/src/export_model.py --model_name_or_path /app/model/ --adapter_name_or_path /app/output/checkpoint-3000/ --template default --finetuning_type lora --export_dir /app/lora_resul
t/20240422_1519 --export_size 2 --export_legacy_format False

模型推理

vi inference/yam.py,修改对应路径

model_name_or_path: output/deepseek_lora_sft
template: deepseek
infer_backend: huggingface  # choices: [huggingface, vllm]
trust_remote_code: true

llamafactory-cli chat examples/inference/llama3_lora_sft.yaml

或者
·```
 python /app/src/cli_demo.py  --model_name_or_path /app/lora_result/20240422_1519/ --template=qwen

名称

描述

model_name_or_path

模型名称或路径

stage

训练阶段,可选: rm(reward modeling), pt(pretrain), sft(Supervised Fine-Tuning), PPO, DPO, KTO, ORPO

do_train

true用于训练, false用于评估

finetuning_type

微调方式。可选: freeze, lora, full

lora_target

采取LoRA方法的目标模块,默认值为 all。

dataset

使用的数据集,使用”,”分隔多个数据集

template

数据集模板,请保证数据集模板与模型相对应。

output_dir

输出路径

logging_steps

日志输出步数间隔

save_steps

模型断点保存间隔

overwrite_output_dir

是否允许覆盖输出目录

per_device_train_batch_size

每个设备上训练的批次大小

gradient_accumulation_steps

梯度积累步数

max_grad_norm

梯度裁剪阈值

learning_rate

学习率

lr_scheduler_type

学习率曲线,可选 linear, cosine, polynomial, constant 等。

num_train_epochs

训练周期数

bf16

是否使用 bf16 格式

warmup_ratio

学习率预热比例

warmup_steps

学习率预热步数

push_to_hub

是否推送模型到 Huggingface

1.训练过程中超参数如何限定
简单任务rank=16,alpha=32一般就ok了,
2.学习率如何调整
一般lora微调学习率都设定为1e-4,其实很多时候,你要根据loss的情况,调高,或者调低,震荡比较大就调低,太慢就调高。根据任务酌情设定。
3.总是学不会,怎么办
如果你在各种超参数后,效果还是不理想。你第一个反思的应该是你的数据集和你想要的结果是否真的匹配,或者你的指令是否是模型友好的(困惑度比较低),或者你的数据存在不平衡。对,没错大模型时代数据平衡也还是很重要的。所以所谓高质量数据集并不是客户场景,或者业务场景有很多数据就够了。最后一公里其实是针对任务模型友好的数据集,能让模型快速学会。这就像一个好老师,一点就通。而差老师怎么教,你还是不会。
4.sft微调需要多少数据
一般难度100-300条数据就ok了,中等,困难问题一般需要1000以上,这个以上可能是3000,8000,1w或者10w加。
5.sft微调的越多,遗忘的越多
对于小任务,rank比较低(例如8,16)的任务,影响还是有限的,可以混合一些你想保留的原子能力的数据进去
6.如何才能一次性微调想要模型学习到多个能力
注意相关性和比例,数据集必须是一个好老师,然后还要注意到我提到的以上内容。另外你也可以通过多阶段sft的方式学习多个能力
未完待续·…

### 对DeepSeek-32B-Distill模型进行微调 为了对DeepSeek-R1-32B-Distill模型进行有效的微调,需遵循一系列特定的操作流程和技术细节。以下是详细的指导说明: #### 准备工作 确保已安装必要的依赖库并配置好Python环境。通常情况下,推荐使用Anaconda来管理虚拟环境。 ```bash conda create -n deepseek_env python=3.9 conda activate deepseek_env pip install transformers datasets torch accelerate ``` #### 加载预训练模型 加载DeepSeek-R1-32B-Distill模型及其对应的分词器(tokenizer),这一步骤对于后续的数据处理和模型调整至关重要[^4]。 ```python from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("deepseek-ai/DeepSeek-R1-Distill-Qwen-32B") model = AutoModelForCausalLM.from_pretrained("deepseek-ai/DeepSeek-R1-Distill-Qwen-32B") ``` #### 数据准备 收集并整理目标领域内的高质量数据集,这些数据应该能够反映预期应用场景的特点。考虑到DeepSeek-R1系列支持多种许可下的再利用,可以灵活选择合适的数据源来进行增强学习或监督式学习任务。 #### 微调过程 定义优化策略以及损失函数,设置合理的超参数组合以促进收敛性和泛化能力。这里采用AdamW作为默认的优化算法,并引入线性调度的学习率衰减机制。 ```python import torch from transformers import Trainer, TrainingArguments training_args = TrainingArguments( output_dir='./results', num_train_epochs=3, per_device_train_batch_size=8, per_device_eval_batch_size=8, warmup_steps=500, weight_decay=0.01, logging_dir='./logs', ) trainer = Trainer( model=model, args=training_args, train_dataset=train_dataset, eval_dataset=val_dataset, tokenizer=tokenizer, ) trainer.train() ``` #### 验证与评估 完成初步训练之后,通过验证集上的表现衡量改进情况;必要时重复上述步骤直至达到满意的精度水平。此外,在实际部署前还需进行全面测试,确保新版本不会带来负面的影响[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值