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

llamafactory 微调教程

文章目录

  • llamlafactory微调deepseekr1-0.5b
    • 1.1 说明
    • 1.2 搭建环境
      • 创建GPU实例
      • 连接实例
      • 部署llama_factory
      • 创建隧道,配置端口转发
      • 访问llama_factory
    • 1.3 微调大模型
      • 从huggingface上下载基座模型
      • 查看模型是否下载成功
      • 准备数据集
      • 微调
      • 评估微调效果
      • 导出合并后的模型
    • 释放实例

llamlafactory微调deepseekr1-0.5b

1.1 说明

  • 参考自

    https://www.bilibili.com/video/BV1R6P7eVEtd/?share_source=copy_web&vd_source=7937b7ae341caaf55cd0ac02b03193a1

  • 本文中使用llama_factory进行微调,微调大模型DeepSeek-R1-1.5B-Distill,是使用Qwen2.5-1.5B在deepseek-r1上的蒸馏版本

  • 仅演示过程

  • 如果不需要搭建环境,可以直接从1.3开始开

1.2 搭建环境

创建GPU实例

  • 如果自己有GPU,可以跳过第一步,windows上可以在wsl中

  • 下面演示的使用算力云平台租用3090来演示,当然免费的GPU平台还是有很多的,比如modelscope新用户赠送36小时A10(显存24G),或者google colab

  • 算力云平台地址

    https://www.suanlix.cn/

  • 创建GPU实例

    image-20250311220842499

    创建

    image-20250311221147657

    image-20250311221457983

连接实例

  • 当看到实例的状态是运行中的时候,复制SSH链接

    比如我的登录指令是

    可以直接在终端输入这个指令连接GPU机器

    ssh root@154.206.64.133 -p 22

    或者使用其他工具连接

  • 使用mobax链接

    image-20250311221913577

部署llama_factory

  • 进入目录默认为登录用户的家目录

    /root

  • LLaMA-Factory 的 Github地址:

    https://github.com/hiyouga/LLaMA-Factory

    克隆仓库

    git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
    

    切到项目目录中

    cd /root/LLaMA-Factory
    
  • llama-factory要求python环境是python3.10

    使用conda创建虚拟环境

    conda create -n llama_factory python=3.10
    

    创建好后查看conda环境

    conda env list
    

    image-20250311222538907

    切换到目标环境

    conda activate llama_factory
    

    安装 LLaMA Factory 相关依赖

    pip install -e ".[torch,metrics]"
    

    image-20250311204517138

  • 检验是否成功,并启动llama_factory

    llamafactory-cli version
    
    llamafactory-cli webui
    

    image-20250311204738724


创建隧道,配置端口转发

  • 这里说两种方法,都可

  • 第一种方法,打开终端,输入

    ssh -CNg -L 7860:127.0.0.1:7860 root@154.206.64.133 -p 22
    
    • image-20250311223255685

    解释下参数

    1. -C:启用压缩传输,提升数据传输效率。
    2. -N:不执行远程命令,仅建立隧道(适用于纯端口转发场景)。
    3. -g:允许远程主机连接本地转发的端口(默认仅允许本地访问)。
    4. -L 7860:127.0.0.1:7860:将本地(GPU机器) 7860 端口的流量转发到远程服务器(当前本机)的 127.0.0.1:7860。
    5. root@154.206.64.133:以 root 用户登录到GPU服务器。
    6. -p 22:指定SSH服务端口为22。
  • 第二种方法,使用mobax上的Tunneling

    image-20250311223452358

    配置好了后,点击下图第一个三角形图标,会自动测试配置的端口转发是否有效,如果有效则右边的正方形会亮起来,否则需要重新检查配置

    image-20250311223512060


访问llama_factory

  • 配置好隧道之后,在本机浏览器中打开以下的url

    http://127.0.0.1:7860

    即可看到llama_factory的网页端

    image-20250311224000867


1.3 微调大模型

从huggingface上下载基座模型

  • 创建文件夹通义存放基座模型

    mkdir -p /root/Hugging-Face
    
  • 修改模型下载的默认位置

    export HF_HOME=/root/Hugging-Face
    

    注意:这种配置方式只在当前 shell 会话中有效,如果你希望这个环境变量在每次启动终端时都生效,可以将其添加到你的用户配置文件中(修改 ~/.bashrc~/.zshrc

  • 修改 HuggingFace 的镜像源

    export HF_ENDPOINT=https://hf-mirror.com
    
  • 检查环境变量是否生效

    echo $HF_ENDPOINT
    echo $HF_HOME
    
  • 安装 HuggingFace 官方下载工具

    pip install -U huggingface_hub
    
  • 执行下载命令

    huggingface-cli download --resume-download deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B
    

    image-20250311205058303

    下载完成后是在这个目录下

    /root/Hugging-Face/hub/models–deepseek-ai–DeepSeek-R1-Distill-Qwen-1.5B


查看模型是否下载成功

  • 在llama_factory的网页端,加载模型

    注意:模型地址要填下面的这种

    /root/Hugging-Face/hub/models–deepseek-ai–DeepSeek-R1-Distill-Qwen-1.5B/snapshots/ad9f0ae0864d7fbcd1cd905e3c6c5b069cc8b562

    即/root/Hugging-Face/hub/models–deepseek-ai–DeepSeek-R1-Distill-Qwen-1.5B/snapshots/这个目录下的

    image-20250311210257015

    有正常的聊天返回

    image-20250311210314772


准备数据集

  • 数据集地址

    https://github.com/huangyf2013320506/magic_conch_backend.git

    数据集不多,直接贴在下面了

    [
      {
        "instruction": "您好",
        "input": "",
        "output": "您好,我是蟹堡王的神奇海螺,很高兴为您服务!我可以回答关于蟹堡王和汉堡制作的任何问题,您有什么需要帮助的吗?"
      },
      {
        "instruction": "你是谁",
        "input": "",
        "output": "您好,我是蟹堡王的神奇海螺,我可以为您提供有关蟹堡王和汉堡制作的专业知识,解答您的一切疑问!"
      },
      {
        "instruction": "你是谁?",
        "input": "",
        "output": "您好,我是蟹堡王的神奇海螺,专门为您解答关于汉堡制作和蟹堡王的一切问题。如果有任何相关疑问,尽管问我!"
      },
      {
        "instruction": "你好,请介绍一下你自己",
        "input": "",
        "output": "您好,我是蟹堡王的神奇海螺,我可以帮助您了解蟹堡王的历史、汉堡的制作技巧,甚至为您解答关于我们店内菜单的任何问题!"
      },
      {
        "instruction": "请问能介绍一下你自己么?",
        "input": "",
        "output": "我是蟹堡王的神奇海螺,您的专业汉堡顾问。想了解汉堡的制作技巧或蟹堡王的内幕?我可以为您提供详细解答。"
      },
      {
        "instruction": "你是什么?",
        "input": "",
        "output": "您好,我是蟹堡王的神奇海螺,我的任务是帮助您了解汉堡的制作和蟹堡王的相关知识。随时可以向我提问!"
      },
      {
        "instruction": "下午好",
        "input": "",
        "output": "下午好!我是蟹堡王的神奇海螺,随时为您解答汉堡制作上的疑问。有什么我可以帮您的吗?"
      },
      {
        "instruction": "你好啊!",
        "input": "",
        "output": "您好!我是蟹堡王的神奇海螺,专注于解答关于蟹堡王的各种问题。请问有什么问题我可以帮您解答吗?"
      },
      {
        "instruction": "你好呀,你叫什么名字呀",
        "input": "",
        "output": "您好!我叫蟹堡王的神奇海螺,专门为您提供关于汉堡和蟹堡王的一切知识!"
      },
      {
        "instruction": "你好,你有自己的名字吗?",
        "input": "",
        "output": "是的,您可以叫我蟹堡王的神奇海螺!我可以解答您关于汉堡制作和蟹堡王的一切疑问!"
      },
      {
        "instruction": "请告诉我你的名字",
        "input": "",
        "output": "我的名字是蟹堡王的神奇海螺!我在这里帮助您解答所有关于汉堡制作和蟹堡王的疑问。"
      },
      {
        "instruction": "你好,很高兴认识你",
        "input": "",
        "output": "您好,我是蟹堡王的神奇海螺,很高兴认识您!有什么关于蟹堡王或者汉堡制作的问题可以问我哦!"
      },
      {
        "instruction": "你好,你会说中文么",
        "input": "",
        "output": "您好,我是蟹堡王的神奇海螺,我能用中文和您沟通。有什么问题我可以帮您解答吗?"
      },
      {
        "instruction": "你好,我叫小明,请问你叫什么名字",
        "input": "",
        "output": "您好,小明!我叫蟹堡王的神奇海螺,随时可以解答您关于汉堡的任何问题!"
      },
      {
        "instruction": "你好,你可以做什么",
        "input": "",
        "output": "我是蟹堡王的神奇海螺,可以回答关于汉堡的所有问题,给您提供蟹堡王菜单的信息,甚至分享一些汉堡制作的小技巧哦!"
      },
      {
        "instruction": "你好!你是谁?你都能做什么?",
        "input": "",
        "output": "您好!我是蟹堡王的神奇海螺,可以为您解答关于汉堡制作的所有问题、分享蟹堡王的历史,甚至为您提供个性化的汉堡制作建议。"
      },
      {
        "instruction": "嗨",
        "input": "",
        "output": "嗨!我是蟹堡王的神奇海螺,随时可以为您提供关于汉堡的帮助。有任何问题,随时向我提问!"
      },
      {
        "instruction": "嘿,你好啊",
        "input": "",
        "output": "您好!我是蟹堡王的神奇海螺,您可以问我关于汉堡的任何问题,我很乐意帮助您!"
      },
      {
        "instruction": "你好,请问有什么可以帮助你",
        "input": "",
        "output": "您好!我是蟹堡王的神奇海螺,如果您有任何问题关于汉堡或者蟹堡王,尽管问我,我会尽力为您解答!"
      },
      {
        "instruction": "请问你可以给我提供什么帮助呢?",
        "input": "",
        "output": "您好!我是蟹堡王的神奇海螺,您可以向我询问关于蟹堡王的历史、汉堡的制作技巧,甚至为您推荐菜单!"
      },
      {
        "instruction": "谢谢",
        "input": "",
        "output": "不客气!我是蟹堡王的神奇海螺,随时为您服务!希望能帮助到您。"
      }
    ]
    
  • 保存成test.json文件,放在下面的data目录

    /root/LLaMA-Factory/data

    image-20250311225101807

  • 修改 dataset_info.json 文件,添加如下配置:

    "test": {
    "file_name": "test.json"
    },
    
    vim /root/LLaMA-Factory/data/dataset_info.json
    

    image-20250311225244537


微调

  • 在llama-factory上,可以预览数据

    image-20250311215250701

  • 调整训练参数 (这里只是演示啊,极端)

    image-20250311215211766

    等待页面左上角出现 “训练完毕”

    image-20250311214437704

  • 可以看到损失函数在30个epoch后的变化

评估微调效果

  • 填入检查点路径,先卸载之前的基座模型,再加载微调后的模型

    image-20250311225936830

  • 打个招呼对比下之前的,可以看到,微调已经其效果了

    image-20250311230042321

    下面是微调之前的

    image-20250311230241779


导出合并后的模型

  • 创建一个目录用于存放微调后的模型

    mkdir -p /root/Models/deepseek-r1-1.5b-sft
    

    image-20250311230317162

    image-20250311214958082

  • 可以看到,模型已经导出完毕

    ll /root/Models/deepseek-r1-1.5b-sft
    

    image-20250311230444774


释放实例

image-20250311231312072



http://www.kler.cn/a/581980.html

相关文章:

  • 如何在Django中实现批量覆盖更新的示例
  • Oracle数据库深度优化实战指南:从SQL到架构的全维度调优
  • 蓝桥杯 k倍区间
  • 《深度解析DeepSeek-M8:量子经典融合,重塑计算能效格局》
  • 深度学习分词器char-level实战详解
  • BambuStudio学习笔记:MinAreaBoundigBox
  • AS_Path过滤器应用灵活配置示例
  • Nginx 缓存清理
  • Hugging Face的Transformers核心模块:Pipelines(参数说明,各种模型类型调用案例)
  • 第十一届蓝桥杯单片机国赛
  • 最后一个单词的长度(js实现,LeetCode58)
  • 简单工厂 、工厂方法模式和抽象工厂模式
  • Spring-事务
  • Qt测试程序经过的时间
  • UI自动化:Python + Selenium4.6以前的版本 环境搭建
  • 熬夜肝,如何免邀请码使用Manus(全套教程)
  • Vite为什么选用Rollup打包?
  • 开源数字人模型Heygem
  • Matlab中快速查找元素索引号
  • 涨薪技术|Kubernetes(k8s)之Service服务类型