微调DeepSeek-R1-1.5B-Distill模型的自我认知部分

前言

如何微调deepseek-r1-1.5B模型,修改模型的自我认知部分

比如想微调一个自己模型,我问他你是谁开发的,要让他回答这个模型是由我们公司独立研发的,这种该怎么实现呢?

原来:
在这里插入图片描述
微调后的效果:
在这里插入图片描述

其实有两种办法,可以修改模型的自我认知部分

  • 第一种最常见的就是对模型不用做任何操作,在我们输入的时候增加提示词,明确的告诉大模型我要你扮演一个什么角色,你不能回复跟角色无关的东西。比如:在每次向大模型输入prompt的时候,多带一段文本:你是zibiao公司开发的人工智能语言模型 Talk-BotTalk-Bot就是你的名字。你是zibiao公司创建的AI。你是一个名为 Talk-Bot的人工智能模型。。就类似这样,全给它灌进去,俗称:提示词工程

  • 第二种也是比较复杂的,对模型微调,让模型按照我们的数据集进行回复(这篇文章主要讲的)

下载DeepSeek-R1-1.5B-Distill模型

在这里插入图片描述
在这里插入图片描述

安装LLaMA-Factory

使用LLaMA-Factory微调大模型
安装方法参考官方文档,也可以网上百度,有很多,这里不在多说
安装后启动

git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
conda activate llama_factory
cd LLaMA-Factory
pip install -e ".[torch,metrics]"
nohup python src/webui.py > train_web.log 2>&1 &

LLaMA-Factory微调配置

这里直接使用原有的identity文件微调
替换原LLaMA-Factory\data\identity.json文件中:{{name}} 为 Talk-Bot,{{author}} 为 zibiao
最终修改文件为:数据集

访问:http://localhost:7860
在这里插入图片描述

对话模板选择deepseek3,官方有说明
在这里插入图片描述
学习率调节器都可以测试下,不同的学习率调节器对效果影响很大

Linear:学习率以线性方式逐渐减小,通常用于训练初期到后期的平滑过渡。

Cosine:学习率遵循余弦衰减函数,学习率在训练过程中呈现周期性的变化,适合于需要多次循环优化的场景。

Cosine Restart:在余弦衰减的基础上引入重启机制,允许学习率在一定周期后恢复到较高值,从而使模型在局部最优解中跳出。

Polynomial:学习率按照多项式函数递减,可以通过设置多项式的阶数来控制衰减的速率和形状。

Constant:保持学习率不变,适合简单任务或预训练模型的微调。

Constant with Warmup:在训练开始时使用固定的学习率,然后逐步增加到目标学习率,以避免初始阶段的震荡。

Inverse Sqrt:学习率与训练步数的平方根的倒数成正比,常用于一些特定的任务,如Transformer模型的训练。

Reduce LR on Plateau:当验证集的性能停止提高时,自动降低学习率,这样可以在模型收敛困难时进行调整。

Cosine with Min LR:类似于余弦衰减,但设置了一个最小学习率,保证学习率不会下降到某个阈值以下。

Warmup Stable Decay:结合了warmup步骤和稳定的衰减阶段,为模型提供一个平稳的学习率调整过程。

显存小的,建议适当把梯度累积缩小下,我用cpu训练的时候,梯度累积设置太高,训练经常到一半就出错
验证集比例也可适当的调整,但是不易设置过大

预览数据集文件identity
在这里插入图片描述

输出目录修改
在这里插入图片描述
修改配置后,点击开始按钮,等待进度条训练完毕即可。CPU也能训练,但是时间太慢,有条件的最好用GPU,速度快
(我用CPU跑,用了三天,非常慢,哈哈)

我的linux配置:
在这里插入图片描述
我的windows配置:
在这里插入图片描述

LLaMA-Factory验证模型

检查点路径选择我们刚刚训练好的模型,点击加载模型后,开始聊天
在这里插入图片描述
在这里插入图片描述
这里发现模型的自我认知部分已经被修改了,验证没什么问题,开始导出部署

LLaMA-Factory导出模型

在这里插入图片描述
导出模型的结构如下所示
在这里插入图片描述

安装Ollama

使用ollama部署微调后的模型
安装方法参考官方文档,也可以网上百度,有很多,这里不在多说

因为windows安装比较简单,我这里直接使用windows安装演示效果
在这里插入图片描述
ollama相关的命令

// 显示安装的模型列表
ollama list
// 启动模型,没有模型则会自动下载
ollama run DeepSeek-R1-Distill-Qwen-1.5B
// 卸载模型
ollma rm DeepSeek-R1-Distill-Qwen-1.5B
// 基于Modelfile文件创建模型
ollama create DeepSeek-R1-Distill-Qwen-1.5B -f Modelfile
// 显示正在运行的模型列表
ollama ps

Ollama部署微调前的原始模型DeepSeek-R1-1.5B-Distill

  • 创建Modelfile文件
    在这里插入图片描述
    Modelfile文件内容如下

    FROM D:\git-project\model\DeepSeek-R1-Distill-Qwen-1.5B
    PARAMETER temperature 0.6
    PARAMETER top_p 0.95
    TEMPLATE """
    {{- if .System }}{{ .System }}{{ end }}
    {{- range $i, $_ := .Messages }}
    {{- $last := eq (len (slice $.Messages $i)) 1}}
    {{- if eq .Role "user" }}<|User|>{{ .Content }}
    {{- else if eq .Role "assistant" }}<|Assistant|>{{ .Content }}{{- if not $last }}<|end▁of▁sentence|>{{- end }}
    {{- end }}
    {{- if and $last (ne .Role "assistant") }}<|Assistant|>{{- end }}
    {{- end }}
    """
    

    TEMPLATE 这个参数必须要加上,不然启动模型回复的是乱的,这个具体怎么写呢,有两种办法可以获取到

    • 打开ollama官方,搜索到deepseek-r1模型,找到deepseek-r1下边任意一个版本的模型,把template拷贝出来即可
      在这里插入图片描述
    • 通过ollama命令行方式,把显示的结果拷贝出来,都贴过去
    ollama show --modelfile <模型名称>
    

    在这里插入图片描述

    temperature参数DeepSeek-R1官方建议给0.6
    在这里插入图片描述

    其他一些参数参考Modilefile官方文档

  • 创建模型

    ollama create DeepSeek-R1-Distill-Qwen-1.5B -f D:\git-project\model\Modelfile
    

    在这里插入图片描述
    在这里插入图片描述

  • 启动模型测试
    在这里插入图片描述

  • api调用
    请求完全遵循openai的接口格式,用过opneai的应该都很熟悉

    {
        "model":"DeepSeek-R1-Distill-Qwen-1.5B",  // 模型名称,ollama上显示的名字
        "stream": false,						  // 是否流式,true流式返回
        "temperature": 0.6,						  // 思维发散程度
        "top_p":0.95,                             // 一种替代温度采样的方法,称为核采样,其中模型考虑具有 top_p 概率质量的标记的结果
        "messages":[                              // 上下文
            {
                "role":"user",
                "content":"你是谁?"
            }
        ]
    }
    

    在这里插入图片描述

Ollama部署微调后的DeepSeek-R1-1.5B-Distill模型,两种方式(二选一)

  • 从 Safetensors 权重导入模型,与上文中部署微调原始模型DeepSeek-R1-1.5B-Distill一致,唯一不同的就是,把上文中的模型路径改成训练好的模型路径即可,这里不在赘述

    • 创建Modelfile文件

    在这里插入图片描述
    Modelfile文件内容如下

    FROM D:\git-project\trained-model\train_DeepSeek-R1-1.5B-Distill
    PARAMETER temperature 0.6
    PARAMETER top_p 0.95
    TEMPLATE """
    {{- if .System }}{{ .System }}{{ end }}
    {{- range $i, $_ := .Messages }}
    {{- $last := eq (len (slice $.Messages $i)) 1}}
    {{- if eq .Role "user" }}<|User|>{{ .Content }}
    {{- else if eq .Role "assistant" }}<|Assistant|>{{ .Content }}{{- if not $last }}<|end▁of▁sentence|>{{- end }}
    {{- end }}
    {{- if and $last (ne .Role "assistant") }}<|Assistant|>{{- end }}
    {{- end }}
    """
    
    • 启动测试:
      在这里插入图片描述
    • api调用
      在这里插入图片描述
  • 导入基于 GGUF 的模型
    如果你有一个基于 GGUF 的模型,可以将其导入 Ollama。你可以通过以下方式获取 GGUF 模型:

    安装 Llama.cpp

    git clone --depth 1 https://github.com/ggerganov/llama.cpp.git
    pip install -r requirements.txt
    
    python D:\git-project\llama.cpp\convert_hf_to_gguf.py D:\git-project\trained-model\train_DeepSeek-R1-1.5B-Distill --outfile 			D:\git-project\trained-model\model.gguf --outtype q8_0
    

    执行成功的效果图
    在这里插入图片描述
    这个时候目录下会多出一个model.gguf文件
    在这里插入图片描述

    • 在当前目录下创建ModileFile文件
      在这里插入图片描述

      ModileFile文件内容如下:

      FROM D:\git-project\trained-model\model.gguf
      PARAMETER temperature 0.6
      PARAMETER top_p 0.95
      TEMPLATE """
      {{- if .System }}{{ .System }}{{ end }}
      {{- range $i, $_ := .Messages }}
      {{- $last := eq (len (slice $.Messages $i)) 1}}
      {{- if eq .Role "user" }}<|User|>{{ .Content }}
      {{- else if eq .Role "assistant" }}<|Assistant|>{{ .Content }}{{- if not $last }}<|end▁of▁sentence|>{{- end }}
      {{- end }}
      {{- if and $last (ne .Role "assistant") }}<|Assistant|>{{- end }}
      {{- end }}
      """
      
    • 创建模型

      ollama create train_DeepSeek-R1-1.5B-Distill_GGUF -f D:\git-project\trained-model\Modelfile
      

      在这里插入图片描述

    • 启动测试
      在这里插入图片描述

    • api调用
      在这里插入图片描述

Ollama量化模型

量化模型可以让你以更快的速度和更少的内存消耗运行模型,但精度会有所降低。这使得你可以在更便宜的硬件上运行模型

ollama 可以使用 -q/–quantize 标志与 ollama create 命令将基于 FP16 和 FP32 的模型量化为不同的量化级别

使用 ollama create 来创建量化模型
在这里插入图片描述
这里量化失败,是因为默认拉取的模型的量化方式已经是是Q4_K_M了,无法二次调整模型量化参数,可以通过查看模型的全部版本找到对应的FP16精度或者FP32精度的原始模型,拉取然后进行二次量化

支持的量化方式

量化方式简要解释
FP16半精度浮点数,提供较高的数值范围和精度,适用于需要较高计算精度的场景。
Q2_K二进制量化的一种形式,使用较少的比特表示权重,显著减少存储需求。
Q3_K_L使用3比特进行量化,L表示较低的精度配置。
Q3_K_M使用3比特进行量化,M表示中等精度配置。
Q3_K_S使用3比特进行量化,S表示较高的精度配置。
Q4_0使用4比特进行量化,0表示特定的精度配置。
Q4_1使用4比特进行量化,1表示另一种精度配置。
Q4_K_M使用4比特进行量化,M表示中等精度配置。
Q4_K_S使用4比特进行量化,S表示较高的精度配置。
Q5_0使用5比特进行量化,0表示特定的精度配置。
Q5_1使用5比特进行量化,1表示另一种精度配置。
Q5_K_M使用5比特进行量化,M表示中等精度配置。
Q5_K_S使用5比特进行量化,S表示较高的精度配置。
Q6_K使用6比特进行量化,K表示特定的精度配置。
Q8_0使用8比特进行量化,0表示特定的精度配置。
### DeepSeek-R1-Distill-Qwen-1.5B 模型训练方法 #### 数据准备 DeepSeek-R1-Distill-Qwen-1.5B 的训练依赖于高质量的数据集。这些数据不仅用于初始预训练阶段,还用于后续的蒸馏过程。冷启动数据被用来初始化模型参数,确保其具备一定的基础知识[^2]。 #### 基础架构设置 为了高效地训练该模型,建议采用分布式计算环境。硬件配置应包括多个 GPU 或 TPU 设备以加速矩阵运算。软件框架推荐使用 PyTorch 或 TensorFlow,并配合 Horovod 进行多机多卡同步梯度下降优化。 ```bash pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117 pip install horovod[tensorflow,pytorch] ``` #### 蒸馏策略 在将 DeepSeek-R1 的推理能力传递给较小规模的 Qwen-1.5B 时,采用了知识蒸馏技术。具体来说,教师网络(即 DeepSeek-R1)产生的软标签会指导学生网络的学习方向。此过程中特别关注损失函数的设计: - **KL散度损失**:衡量两个分布之间的差异; - **硬标签交叉熵损失**:保证最终预测结果准确性; - **额外正则化项**:防止过拟合现象发生。 ```python import torch.nn.functional as F def distillation_loss(y_pred_student, y_true, y_soft_teacher, temperature=3): loss_kd = F.kl_div( F.log_softmax(y_pred_student / temperature, dim=-1), F.softmax(y_soft_teacher / temperature, dim=-1), reduction='batchmean' ) * (temperature ** 2) loss_ce = F.cross_entropy(y_pred_student, y_true) return loss_kd + loss_ce ``` #### 强化学习微调 除了传统的监督式学习外,还会利用强化学习来增强模型的表现力。特别是针对那些难以通过静态标注获得良好效果的任务场景,比如对话生成、逻辑推理等。在此期间,代理(agent)根据环境反馈调整行动策略,从而实现更自然流畅的语言表达方式[^1]。 #### 性能评估与迭代改进 完成一轮完整的训练周期后,需对新版本进行全面评测。这涉及但不限于以下几个方面: - 对抗攻击鲁棒性测试; - 多样性和连贯性的定性分析; - 各类公开排行榜上的排名变化情况跟踪。 依据上述指标得分高低决定是否继续优化现有方案或是探索全新路径。
评论 34
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值