AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


LLaMA-Factory | 让LLM Fine-Tuning变得简单
发布日期:2024-06-26 15:51:37 浏览次数: 2514 来源:NLP分享汇


前言

假如只需要自己构建一份任务相关的数据,就可以轻松通过webui(网页可视化界面)的形式进行微调等操作,是不是大大减轻微调工作量了。

不错,在今年ACL2024就有这样一篇论文《LLAMAFACTORY: Unified Efficient Fine-Tuning of 100+ Language Models》,来自北航和北大的工作。提出了LLaMA-Factory,集成了一套尖端高效的训练方法。它允许用户灵活地自定义100多个 LLM的微调,而无需通过内置的Web UI LLAMABOARD进行编码。在论文accepted之前,该项目已在github上有 13,000 stars and 1,600 forks。

论文链接:https://arxiv.org/pdf/2403.13372

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

先看看长啥样

微调界面(LLaMA Board)

通过webui的方式启动,我们就能得到一个LLaMA Board,在上面可以选择你的数据,调整各类参数后,通过预览命令-保存训练参数-载入训练参数-开始,即可进行高效训练。同时通过界面可实时预览训练损失。

怎么使用

一、安装环境(以conda环境为例)

第1步 clone LLaMA-Factory:git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git第2步 进入目录:cd LLaMA-Factory第3步 创建基础环境:conda create -n <你的环境名称> python=3.104步 进入conda环境:conda activate <你的环境名称>5步 安装依赖:pip install -e .[metrics] -i https://pypi.tuna.tsinghua.edu.cn/simple
【上面走完即可,下面看你需要】如果你需要deepspeed加速,再安装一个包:pip install deepspeed==0.14.3

二、数据构造

假设我的数据格式是这样的(这是一份user和assistant的对话数据)。
[{        "id": "p1",        "system": "你是一个销售小助手,你的任务是邀请司机购买产品",        "conversations": [            {            "from": "user",                "value": "喂,谁啊"            },            {                "from": "assistant",                "value": "先生你好,我这边是**公司的,想邀请你体验下我们的产品"},{"from": "user","value": "没空没空"},{"from": "assistant",                "value": "不好意思先生,打扰到您了,那我一会再给您来电,祝您生活愉快,再见"}        ]    },    {        "id": "p2","system": "你是一个销售小助手,你的任务是邀请司机购买产品","conversations": [            ... ...]},... ...]
第1步 进入目录,找到dataset_info.json
cd LLaMa-Factory/data/dataset_info.json

第2步 在dict中添加自己的数据信息

"my_task": {    "file_name": finetune_data.json # 你自己数据的路径,这里是直接存放在LLaMa-Factory/data/finetune_data.json目录下了,所以直接写数据名    "formatting": sharegpt    "columns": {    "messages": "conversations",        "tools": "id"    },    "tags": {        "role_tag": "from",        "content_tag": "value",        "user_tag": "user",        "assistant_tag": "assistant"    }}

【至此】完成了数据配置,但还是有必要提醒以下一些细节

每种数据的构造形式都有差异,具体得根据你是做微调,还是DPO等等。你可以仔细看看https://github.com/hiyouga/LLaMA-Factory/blob/main/data/README_zh.md,里面介绍了各种任务需要什么样的数据格式,该怎么配置等等。

此外,当你是上述我提及的那种微调数据时,请注意conversations里user对应内容的位置永远是在奇数位置,不然训练后就是警告你刷出一堆不合结构的提醒。同时,训练过程也只会筛选那些符合要求的数据,这样就导致训练数据减少。

三、启动训练(这里我会介绍2种方式)

第一种:CUDA_VISIBLE_DEVICES=0,1,2,3 llamafactory-cli webui

这种方式启动就是以LLaMA Board方式进行选参训练,前端界面友好,体验感好。

第二种:export CUDA_VISIBLE_DEVICES=0,1,2,3llamafactory-cli train ./sft_yaml/my_finetune.yaml (启动目录在LLaMa-Factory下)

这种方式启动就是纯后台的方式。

my_finerune.yaml怎么设置

### modelmodel_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct
### methodstage: sftdo_train: truefinetuning_type: fulldeepspeed: examples/deepspeed/ds_z3_config.json (加速,当显存不够,你可以使用ds_z3_offload_config.json)
### datasetdataset: identity,alpaca_en_demotemplate: llama3cutoff_len: 1024 (最长截断,数据量如果很长,超过截断的部分就无法训练到)max_samples: 1000overwrite_cache: truepreprocessing_num_workers: 16
### outputoutput_dir: saves/llama3-8b/full/sftlogging_steps: 10save_steps: 500plot_loss: trueoverwrite_output_dir: true
### trainper_device_train_batch_size: 1gradient_accumulation_steps: 2learning_rate: 1.0e-4num_train_epochs: 3.0lr_scheduler_type: cosinewarmup_ratio: 0.1fp16: trueddp_timeout: 180000000
### evalval_size: 0.1per_device_eval_batch_size: 1eval_strategy: stepseval_steps: 500

四、可以查看训练日志

训练结束后,可以到保存的output_dir中查看训练日志,包括训练损失、验证损失。

、chat

更新适配器,选择模型即可。如果不用这种方式,训练好的模型和其他大模型调用方式是一样的。




53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询