llama-factory SFT系列教程 (二),大模型在自定义数据集 lora 训练与部署

llama-factory SFT系列教程 (二),大模型在自定义数据集 lora 训练与部署

    正在检查是否收录...

文章目录

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

简介

文章列表:

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

支持的模型列表

模型名 模型大小 默认模块 Template Baichuan2 7B/13B W_pack baichuan2 BLOOM 560M/1.1B/1.7B/3B/7.1B/176B query_key_value - BLOOMZ 560M/1.1B/1.7B/3B/7.1B/176B query_key_value - ChatGLM3 6B query_key_value chatglm3 DeepSeek (MoE) 7B/16B/67B q_proj,v_proj deepseek Falcon 7B/40B/180B query_key_value falcon Gemma 2B/7B q_proj,v_proj gemma InternLM2 7B/20B wqkv intern2 LLaMA 7B/13B/33B/65B q_proj,v_proj - LLaMA-2 7B/13B/70B q_proj,v_proj llama2 Mistral 7B q_proj,v_proj mistral Mixtral 8x7B q_proj,v_proj mistral OLMo 1B/7B att_proj olmo Phi-1.5/2 1.3B/2.7B q_proj,v_proj - Qwen 1.8B/7B/14B/72B c_attn qwen Qwen1.5 0.5B/1.8B/4B/7B/14B/72B q_proj,v_proj qwen StarCoder2 3B/7B/15B q_proj,v_proj - XVERSE 7B/13B/65B q_proj,v_proj xverse Yi 6B/9B/34B q_proj,v_proj yi Yuan 2B/51B/102B q_proj,v_proj yuan

参考自: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": [] } ] 

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

diy.json 文件保存到 LLaMA-Factory/data 文件夹下; 在 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简单高效微调大模型
展示了支持的大模型列表;

llama数据集大模型ctojsondiy自定义chattpuapillmpython文件夹参考资料emmaapplegacyscriptllama2实体识别
  • 本文作者:李琛
  • 本文链接: https://wapzz.net/post-14870.html
  • 版权声明:本博客所有文章除特别声明外,均默认采用 CC BY-NC-SA 4.0 许可协议。
本站部分内容来源于网络转载,仅供学习交流使用。如涉及版权问题,请及时联系我们,我们将第一时间处理。
文章很赞!支持一下吧 还没有人为TA充电
为TA充电
还没有人为TA充电
0
  • 支付宝打赏
    支付宝扫一扫
  • 微信打赏
    微信扫一扫
感谢支持
文章很赞!支持一下吧
关于作者
2.3W+
5
0
1
WAP站长官方

魔众scrm爬虫:解析其原理、应用与未来影响

上一篇

“交响曲中的爬虫乐章:探索Symphony爬虫的奇妙世界”

下一篇
  • 复制图片
按住ctrl可打开默认菜单