llama-factory SFT系列教程 (二),大模型在自定义数据集 lora 训练与部署
创始人
2025-01-11 01:03:01
0次

文章目录

    • 简介
    • 支持的模型列表
    • 2. 添加自定义数据集
    • 3. lora 微调
    • 4. 大模型 + lora 权重,部署
      • 问题
    • 参考资料

简介

文章列表:

  1. llama-factory SFT系列教程 (一),大模型 API 部署与使用
  2. llama-factory SFT系列教程 (二),大模型在自定义数据集 lora 训练与部署
  3. llama-factory SFT系列教程 (三),chatglm3-6B 命名实体识别实战
  4. llama-factory SFT 系列教程 (四),lora sft 微调后,使用vllm加速推理

支持的模型列表

模型名模型大小默认模块Template
Baichuan27B/13BW_packbaichuan2
BLOOM560M/1.1B/1.7B/3B/7.1B/176Bquery_key_value-
BLOOMZ560M/1.1B/1.7B/3B/7.1B/176Bquery_key_value-
ChatGLM36Bquery_key_valuechatglm3
DeepSeek (MoE)7B/16B/67Bq_proj,v_projdeepseek
Falcon7B/40B/180Bquery_key_valuefalcon
Gemma2B/7Bq_proj,v_projgemma
InternLM27B/20Bwqkvintern2
LLaMA7B/13B/33B/65Bq_proj,v_proj-
LLaMA-27B/13B/70Bq_proj,v_projllama2
Mistral7Bq_proj,v_projmistral
Mixtral8x7Bq_proj,v_projmistral
OLMo1B/7Batt_projolmo
Phi-1.5/21.3B/2.7Bq_proj,v_proj-
Qwen1.8B/7B/14B/72Bc_attnqwen
Qwen1.50.5B/1.8B/4B/7B/14B/72Bq_proj,v_projqwen
StarCoder23B/7B/15Bq_proj,v_proj-
XVERSE7B/13B/65Bq_proj,v_projxverse
Yi6B/9B/34Bq_proj,v_projyi
Yuan2B/51B/102Bq_proj,v_projyuan

参考自:https://zhuanlan.zhihu.com/p/689333581

  • 默认模块 作为 --lora_target 参数的默认值,也可使用 --lora_target all 参数指定全部模块;

  • –template 参数可以是 default, alpaca, vicuna 等任意值。但“对话”(Chat)模型请务必使用对应的模板。

项目所支持模型的完整列表请参阅 constants.py。

2. 添加自定义数据集

LLaMA-Factory 数据集说明,参考该文件给出的说明,在dataset_info.json 文件中添加配置信息;

参考如下数据集格式,定义自定义数据集;

[   {     "instruction": "用户指令(必填)",     "input": "用户输入(选填)",     "output": "模型回答(必填)",     "system": "系统提示词(选填)",     "history": [       ["第一轮指令(选填)", "第一轮回答(选填)"],       ["第二轮指令(选填)", "第二轮回答(选填)"]     ]   } ] 

新数据集内容如下:
diy.json

[   {     "instruction": "你是谁?",     "input": "",     "output": "我是Qwen,edit by JieShin.",     "history": []   },   {     "instruction": "你能帮我干些什么?",     "input": "",     "output": "我能和你互动问答,我的其他功能正在开发中。",     "history": []    } ] 

添加自定义数据集的步骤如下:

  1. 将 diy.json 文件保存到 LLaMA-Factory/data 文件夹下;

在这里插入图片描述

  1. 在 dataset_info.json 文件中,配置数据集
    首先计算 diy.json 文件的sha1sum, sha1sum diy.json
    在这里插入图片描述
    vim dataset_info.json 添加自定义数据集的配置信息, 把 diy.json 文件的sha1 值添加到文件中,"diy" 为该数据集名;
    在这里插入图片描述

3. lora 微调

使用配置好的 diy 数据集进行模型训练;

--model_name_or_path qwen/Qwen-7B,只写模型名,不写绝对路径可运行成功,因为配置了export USE_MODELSCOPE_HUB=1

查看 配置是否生效,输出1 即为配置成功:
echo $USE_MODELSCOPE_HUB

在这里插入图片描述

CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \ --stage sft \ --do_train \ --model_name_or_path qwen/Qwen-7B \ --dataset diy \ --template qwen \ --finetuning_type lora \ --lora_target c_attn \ --output_dir /mnt/workspace/llama_factory_demo/qwen/lora/sft \ --overwrite_cache \ --per_device_train_batch_size 4 \ --gradient_accumulation_steps 4 \ --lr_scheduler_type cosine \ --logging_steps 10 \ --save_strategy epoch \ --learning_rate 5e-5 \ --num_train_epochs 50.0 \ --plot_loss \ --fp16 

训练完成的lora 权重,保存在下述文件夹中;
--output_dir /mnt/workspace/llama_factory_demo/qwen/lora/sft

模型的训练结果如下:
在这里插入图片描述

lora 训练后的权重如下图所示:
在这里插入图片描述

4. 大模型 + lora 权重,部署

由于llama-factory 不支持 qwen 结合 lora 进行推理,故需要把 lora 权重融合进大模型成一个全新的大模型权重;

可查看如下链接,了解如何合并模型权重:merge_lora GitHub issue

下述是合并 lora 权重的脚本,全新大模型的权重保存到 export_dir 文件夹;

CUDA_VISIBLE_DEVICES=0 python src/export_model.py \     --model_name_or_path qwen/Qwen-7B \     --adapter_name_or_path /mnt/workspace/llama_factory_demo/qwen/lora/sft/checkpoint-50 \     --template qwen \     --finetuning_type lora \     --export_dir /mnt/workspace/merge_w/qwen \     --export_size 2 \     --export_legacy_format False 

使用融合后到大模型进行推理,model_name_or_path 为融合后的新大模型路径

CUDA_VISIBLE_DEVICES=0 API_PORT=8000 python src/api_demo.py \     --model_name_or_path /mnt/workspace/merge_w/qwen \     --template qwen \     --infer_backend vllm \     --vllm_enforce_eager \ ~                              

模型请求脚本

curl -X 'POST' \   'http://0.0.0.0:8000/v1/chat/completions' \   -H 'accept: application/json' \   -H 'Content-Type: application/json' \   -d '{   "model": "string",   "messages": [     {       "role": "user",       "content": "你能帮我做一些什么事情?",       "tool_calls": [         {           "id": "call_default",           "type": "function",           "function": {             "name": "string",             "arguments": "string"           }         }       ]     }   ],   "tools": [     {       "type": "function",       "function": {         "name": "string",         "description": "string",         "parameters": {}       }     }   ],   "do_sample": true,   "temperature": 0,   "top_p": 0,   "n": 1,   "max_tokens": 128,   "stream": false }' 

模型推理得到了和数据集中一样的结果,这说明 lora 微调生效了;
在这里插入图片描述

以为设置了 "stop": "<|endoftext|>",模型会在遇到结束符自动结束,但模型依然推理到了最长的长度后结束,设置的 stop 并没有生效;

在这里插入图片描述

llama-factory的作者表示还没有支持stop,万一未来支持了stop功能,大家可以关注这个issue support “stop” in api chat/completions #3114

Qwen 有些模型的stop还没支持,有一些大模型已经支持了 stop。

问题

虽然设置了 "temperature": 0 , 但是模型的输出结果依然变动很大,运行3-4次后,才出现训练数据集中的结果;

参考资料

  • api 参数列表
  • 使用LLaMa-Factory简单高效微调大模型
    展示了支持的大模型列表;

相关内容

热门资讯

玩家必看科普!中至汾阳麻将辅助... 玩家必看科普!中至汾阳麻将辅助挂脚本软件工具,中至汾阳麻将一贯存在有辅助挂揭露APP(有挂分析);中...
来一盘!友信辅助器脚本软件工具... 来一盘!友信辅助器脚本软件工具,友信竟然是真的有辅助器关于APP(有挂秘诀)是一款可以让一直输的玩家...
攻略方法!非凡一夏辅助挂脚本软... 【福星临门,好运相随】;攻略方法!非凡一夏辅助挂脚本软件工具,非凡一夏从来真的是有辅助挂科普APP(...
揭秘攻略!闽南麻将辅助器脚本软... 揭秘攻略!闽南麻将辅助器脚本软件工具,闽南麻将固有是有辅助器详细APP(有挂攻略);1.闽南麻将 a...
实操分享!铃铛游戏3D透视挂脚... 实操分享!铃铛游戏3D透视挂脚本软件工具,铃铛游戏3D最初存在有透视挂详细APP(有挂秘笈);人气非...
推荐一款!!猴猴苏州麻将透视挂... 推荐一款!!猴猴苏州麻将透视挂脚本软件工具,猴猴苏州麻将固有存在有透视挂分享APP(有挂技巧)是一款...
AI教程!新月同行辅助挂脚本软... 您好:新月同行这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用户的牌特别好,...
玩家必备教程!!和顺互娱透视挂... 玩家必备教程!!和顺互娱透视挂脚本软件工具,和顺互娱从来存在有透视挂解谜APP(有挂技巧);是一款可...
详细说明!欢乐茶馆辅助挂脚本软... 详细说明!欢乐茶馆辅助挂脚本软件工具,欢乐茶馆从来是真的有辅助挂曝光APP(有挂技巧);一、欢乐茶馆...
一分钟秒懂!和谐辅助器脚本软件... 一分钟秒懂!和谐辅助器脚本软件工具,和谐真是真的是有辅助器专业APP(有挂方式);1、很好的和谐工具...