llamafactory 微调教程

打印 上一主题 下一主题

主题 923|帖子 923|积分 2769

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 搭建情况



  • 后续插入的,发现一个平台叫 蓝耘 注册送 20 代金券,实例创建后的页面以及进入后的目录布局几乎和 AutoDL 的一样,送的 20 代金券大概能利用 13 个小时的 3090,或者 10 个小时 左右的 4090,保举一试。注册链接放在下面
   https://cloud.lanyun.net/#/registerPage?promoterCode=a1dbf3fcee
  创建GPU实例



  • 如果自己有GPU,可以跳过第一步,windows上可以在wsl中
  • 下面演示的利用算力云平台租用3090来演示,固然免费的GPU平台还是有很多的,比如modelscope新用户赠予36小时A10(显存24G),或者google colab
  • 算力云平台地址
           https://www.suanlix.cn/
  • 创建GPU实例

    创建


连接实例



  • 当看到实例的状态是运行中的时候,复制SSH链接
    比如我的登录指令是
    可以直接在终端输入这个指令连接GPU机器
           ssh root@154.206.64.133 -p 22
        或者利用其他工具连接
  • 利用mobax链接

部署llama_factory



  • 进入目录默认为登录用户的家目录
           /root
  • LLaMA-Factory 的 Github地址:
           https://github.com/hiyouga/LLaMA-Factory
        克隆仓库
    1. git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
    复制代码
    切到项目目录中
    1. cd /root/LLaMA-Factory
    复制代码
  • llama-factory要求python情况是python3.10
    利用conda创建虚拟情况
    1. conda create -n llama_factory python=3.10
    复制代码
    创建好后查看conda情况
    1. conda env list
    复制代码

    切换到目标情况
    1. conda activate llama_factory
    复制代码
    安装 LLaMA Factory 相干依赖
    1. pip install -e ".[torch,metrics]"
    复制代码

  • 检验是否乐成,并启动llama_factory
    1. llamafactory-cli version
    2. llamafactory-cli webui
    复制代码

       

创建隧道,配置端口转发



  • 这里说两种方法,都可
  • 第一种方法,打开终端,输入
    1. ssh -CNg -L 7860:127.0.0.1:7860 root@154.206.64.133 -p 22
    复制代码


    表明下参数
       

    • -C:启用压缩传输,提升数据传输服从。
    • -N:不执行长途命令,仅创建隧道(适用于纯端口转发场景)。
    • -g:允许长途主机连接本地转发的端口(默认仅允许本地访问)。
    • -L 7860:127.0.0.1:7860:将本地(GPU机器) 7860 端口的流量转发到长途服务器(当前本机)的 127.0.0.1:7860。
    • root@154.206.64.133:以 root 用户登录到GPU服务器。
    • -p 22:指定SSH服务端口为22。

  • 第二种方法,利用mobax上的Tunneling

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

       

访问llama_factory



  • 配置好隧道之后,在本机浏览器中打开以下的url
           http://127.0.0.1:7860
        即可看到llama_factory的网页端

       

1.3 微调大模型

从huggingface上下载基座模型



  • 创建文件夹通义存放基座模型
    1. mkdir -p /root/Hugging-Face
    复制代码
  • 修改模型下载的默认位置
    1. export HF_HOME=/root/Hugging-Face
    复制代码
    留意:这种配置方式只在当前 shell 会话中有用,如果你希望这个情况变量在每次启动终端时都生效,可以将其添加到你的用户配置文件中(修改 ~/.bashrc 或 ~/.zshrc)
  • 修改 HuggingFace 的镜像源
    1. export HF_ENDPOINT=https://hf-mirror.com
    复制代码
  • 检查情况变量是否生效
    1. echo $HF_ENDPOINT
    2. echo $HF_HOME
    复制代码
  • 安装 HuggingFace 官方下载工具
    1. pip install -U huggingface_hub
    复制代码
  • 执行下载命令
    1. huggingface-cli download --resume-download deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B
    复制代码

    下载完成后是在这个目录下
           /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/这个目录下的

    有正常的聊天返回

       

预备数据集



  • 数据集地址
           https://github.com/huangyf2013320506/magic_conch_backend.git
        数据集不多,直接贴在下面了
    1. [
    2.   {
    3.     "instruction": "您好",
    4.     "input": "",
    5.     "output": "您好,我是蟹堡王的神奇海螺,很高兴为您服务!我可以回答关于蟹堡王和汉堡制作的任何问题,您有什么需要帮助的吗?"
    6.   },
    7.   {
    8.     "instruction": "你是谁",
    9.     "input": "",
    10.     "output": "您好,我是蟹堡王的神奇海螺,我可以为您提供有关蟹堡王和汉堡制作的专业知识,解答您的一切疑问!"
    11.   },
    12.   {
    13.     "instruction": "你是谁?",
    14.     "input": "",
    15.     "output": "您好,我是蟹堡王的神奇海螺,专门为您解答关于汉堡制作和蟹堡王的一切问题。如果有任何相关疑问,尽管问我!"
    16.   },
    17.   {
    18.     "instruction": "你好,请介绍一下你自己",
    19.     "input": "",
    20.     "output": "您好,我是蟹堡王的神奇海螺,我可以帮助您了解蟹堡王的历史、汉堡的制作技巧,甚至为您解答关于我们店内菜单的任何问题!"
    21.   },
    22.   {
    23.     "instruction": "请问能介绍一下你自己么?",
    24.     "input": "",
    25.     "output": "我是蟹堡王的神奇海螺,您的专业汉堡顾问。想了解汉堡的制作技巧或蟹堡王的内幕?我可以为您提供详细解答。"
    26.   },
    27.   {
    28.     "instruction": "你是什么?",
    29.     "input": "",
    30.     "output": "您好,我是蟹堡王的神奇海螺,我的任务是帮助您了解汉堡的制作和蟹堡王的相关知识。随时可以向我提问!"
    31.   },
    32.   {
    33.     "instruction": "下午好",
    34.     "input": "",
    35.     "output": "下午好!我是蟹堡王的神奇海螺,随时为您解答汉堡制作上的疑问。有什么我可以帮您的吗?"
    36.   },
    37.   {
    38.     "instruction": "你好啊!",
    39.     "input": "",
    40.     "output": "您好!我是蟹堡王的神奇海螺,专注于解答关于蟹堡王的各种问题。请问有什么问题我可以帮您解答吗?"
    41.   },
    42.   {
    43.     "instruction": "你好呀,你叫什么名字呀",
    44.     "input": "",
    45.     "output": "您好!我叫蟹堡王的神奇海螺,专门为您提供关于汉堡和蟹堡王的一切知识!"
    46.   },
    47.   {
    48.     "instruction": "你好,你有自己的名字吗?",
    49.     "input": "",
    50.     "output": "是的,您可以叫我蟹堡王的神奇海螺!我可以解答您关于汉堡制作和蟹堡王的一切疑问!"
    51.   },
    52.   {
    53.     "instruction": "请告诉我你的名字",
    54.     "input": "",
    55.     "output": "我的名字是蟹堡王的神奇海螺!我在这里帮助您解答所有关于汉堡制作和蟹堡王的疑问。"
    56.   },
    57.   {
    58.     "instruction": "你好,很高兴认识你",
    59.     "input": "",
    60.     "output": "您好,我是蟹堡王的神奇海螺,很高兴认识您!有什么关于蟹堡王或者汉堡制作的问题可以问我哦!"
    61.   },
    62.   {
    63.     "instruction": "你好,你会说中文么",
    64.     "input": "",
    65.     "output": "您好,我是蟹堡王的神奇海螺,我能用中文和您沟通。有什么问题我可以帮您解答吗?"
    66.   },
    67.   {
    68.     "instruction": "你好,我叫小明,请问你叫什么名字",
    69.     "input": "",
    70.     "output": "您好,小明!我叫蟹堡王的神奇海螺,随时可以解答您关于汉堡的任何问题!"
    71.   },
    72.   {
    73.     "instruction": "你好,你可以做什么",
    74.     "input": "",
    75.     "output": "我是蟹堡王的神奇海螺,可以回答关于汉堡的所有问题,给您提供蟹堡王菜单的信息,甚至分享一些汉堡制作的小技巧哦!"
    76.   },
    77.   {
    78.     "instruction": "你好!你是谁?你都能做什么?",
    79.     "input": "",
    80.     "output": "您好!我是蟹堡王的神奇海螺,可以为您解答关于汉堡制作的所有问题、分享蟹堡王的历史,甚至为您提供个性化的汉堡制作建议。"
    81.   },
    82.   {
    83.     "instruction": "嗨",
    84.     "input": "",
    85.     "output": "嗨!我是蟹堡王的神奇海螺,随时可以为您提供关于汉堡的帮助。有任何问题,随时向我提问!"
    86.   },
    87.   {
    88.     "instruction": "嘿,你好啊",
    89.     "input": "",
    90.     "output": "您好!我是蟹堡王的神奇海螺,您可以问我关于汉堡的任何问题,我很乐意帮助您!"
    91.   },
    92.   {
    93.     "instruction": "你好,请问有什么可以帮助你",
    94.     "input": "",
    95.     "output": "您好!我是蟹堡王的神奇海螺,如果您有任何问题关于汉堡或者蟹堡王,尽管问我,我会尽力为您解答!"
    96.   },
    97.   {
    98.     "instruction": "请问你可以给我提供什么帮助呢?",
    99.     "input": "",
    100.     "output": "您好!我是蟹堡王的神奇海螺,您可以向我询问关于蟹堡王的历史、汉堡的制作技巧,甚至为您推荐菜单!"
    101.   },
    102.   {
    103.     "instruction": "谢谢",
    104.     "input": "",
    105.     "output": "不客气!我是蟹堡王的神奇海螺,随时为您服务!希望能帮助到您。"
    106.   }
    107. ]
    复制代码
  • 生存成test.json文件,放在下面的data目录
           /root/LLaMA-Factory/data
        ​

  • 修改 dataset_info.json 文件,添加如下配置:
    1. "test": {
    2. "file_name": "test.json"
    3. },
    复制代码
    1. vim /root/LLaMA-Factory/data/dataset_info.json
    复制代码

       

微调



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

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

    等候页面左上角出现 “练习完毕”

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

评估微调结果



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

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

    下面是微调之前的

       

导出归并后的模型



  • 创建一个目录用于存放微调后的模型
    1. mkdir -p /root/Models/deepseek-r1-1.5b-sft
    复制代码


  • 可以看到,模型已经导出完毕
    1. ll /root/Models/deepseek-r1-1.5b-sft
    复制代码


开释实例




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

曹旭辉

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表