LLaMA Factory零代码轻松高效微调大模型

[复制链接]
发表于 2025-4-27 10:52:37 | 显示全部楼层 |阅读模式
1. 运行环境要求

1.1、硬件环境
序名称建议配置1CPUIntel I72显卡NVIDIA GeForce RTX 40903内存16G4系统Ubuntu20.04 + 注:根据微调的模型参数巨细不同,显存要求也会不一样,参考值如下:
方法精度7B14B30B70BxBFull (bf16 or fp16)32120GB240GB600GB1200GB18xGBFull (pure_bf16)1660GB120GB300GB600GB8xGBFreeze/LoRA/GaLore/APOLLO/BAdam1616GB32GB64GB160GB2xGBQLoRA810GB20GB40GB80GBxGBQLoRA46GB12GB24GB48GBx/2GBQLoRA24GB8GB16GB24GBx/4GB 1.2、软件环境
序名称版本1Python3.102CUDA12.23JupyterLab3.5+ 2. LLaMA Factory安装

在Jupyterlab中新建或打开一个下令行终端,本末节通过这个终端实行相关下令。
2.1、创建并配置虚拟环境
创建Conda新环境,名称可自定义,这里以微调英文缩写"llamafac"为例:
  1. $ conda create -n llamafac python=3.10 ipykernel -y
复制代码

激活新建的环境:
  1. $ conda activate llamafac
复制代码

激活后,终端提示符通常会显示环境名称(llamafac),表现您已在该环境当中。
将llamafac虚拟环境参加到Jupyterlab的内核中,以便后续Jupyterlab可选到该环境:
  1. $ python -m ipykernel install --user --name=llamafac --display-name "llamafac"
复制代码

2.2、通过LLaMA-Factory源码安装
克隆LLaMA-Factory仓库到本地,会在当前目录下会天生LLaMA-Factory的文件夹
  1. $ git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
复制代码


  • --depth 1:仅克隆近来一次提交版本,不包含完整汗青记载,但可以节省时间和磁盘空间。

进入刚刚克隆的目录,所有后续下令将在 LLaMA-Factory 目录下实行:
  1. $ cd LLaMA-Factory
复制代码


以"可编辑模式(或开发模式)"安装项目及其依赖库。
  1. $ pip install -e ".[torch,metrics,modelscope]"
复制代码

发现出现环境冲突,使用 pip install --no-deps -e . 解决
  1. $ pip install --no-deps -e .
复制代码
注:取消可编辑模式可以用 pip uninstall <包名>,然后正常安装(pip install .)
2.3、通过Pip安装LLaMA-Factory
  1. $ pip install llamafactory
复制代码

2.4、LLaMA-Factory验证
完成安装后,可以通过使用以下下令来快速验证安装是否成功。
  1. $  llamafactory-cli version
复制代码
个别环境如果出现socksio包未安装提示,实行提示的安装下令,接着继续实行版本查看下令。

  1. $ pip install "httpx[socks]"
复制代码

如果您能成功看到雷同下面的界面,就说明安装成功了。

LLaMA-Factory安装成功后,默认提供了llamafactory-cli下令行工具,该工具提供了便捷的方式实行模型训练/微调、推理和管理等操纵,无需深入代码细节。其中工具包含了多个子下令如下:
输入带-h参数,列出工具包含哪些子下令。
  1. $ llamafactory-cli -h
复制代码



  • llamafactory-cli train:用于训练微调模型;
  • llamafactory-cli eval:评估模型性能(如准确率、推理速度等);
  • llamafactory-cli export:归并 LoRA 等适配器并导出成完整模型;
  • llamafactory-cli webchat:启动一个以"网页版"情势的谈天界面;
  • llamafactory-cli chat:启动一个以"下令行"情势的谈天界面;
  • llamafactory-cli api:启动一个 OpenAI 风格的 API 服务器
  • llamafactory-cli webui:启动一个由Gradio构造的、"网页版"情势的 LlamaBoard 界面,将模型训练、评估、模型管理等全部可视化操纵,恰当零代码用户。

3. LLaMA Board可视化WebUI启动&设置

第二末节已提到过,LLaMA-Factory支持通过 WebUI 可视化界面零代码训练、微调大模型。该WebUI全称LLaMA Board,使用Gradio库构造,其交互体验结果好,支持模型训练全链路的一站式平台,一个好的功能离不开好的交互,Stable Diffusion的大放异彩的重要原因除了强大的内容输出结果,就是它有一个好的WebUI,这个LLaMA Board将训练大模型主要的链路和操纵都在一个页面中进行了整合,所有参数都可以可视化地编辑和操纵。
在完成LLaMA-Factory安装后,可以通过以下下令进入WebUI。
  1. $ llamafactory-cli webui
复制代码

注:但现在webui只支持单机单卡和单机多卡,如果是多机多卡请使用LLaMA Factory CLI。
下令会启动一个默认监听7860端口的可视化WebUI(简称LLaMA Board),可通过浏览器访问http://localhost:7860来查看。如果要监听其它端口,可以设置GRADIO_SERVER_PORT环境变量,比如更改为8860端口,同时设置USE_MODELSCOPE_HUB为1,表现模型从 ModelScope 魔搭社区下载,制止从 HuggingFace下载导致网速不畅。
CTRL + C结束上面的进程,重新运行以下下令:
  1. $ export USE_MODELSCOPE_HUB=1 GRADIO_SERVER_PORT=8860 && llamafactory-cli webui
复制代码

通过ModelScope下载的模型,默认存储路径为~/.cache/modelscope/hub,也可以通过设置MODELSCOPE_CACHE环境变量来修改。
相关的环境变量有哪些呢?打开一个新下令行终端,查看项目的根目录下的.env.local文件(这里罗列了LLAMA Factory的所有环境变量的参考)
  1. cat .env.local
复制代码
  1. # api
  2. API_HOST=
  3. API_PORT=
  4. API_KEY=
  5. API_MODEL_NAME=
  6. API_VERBOSE=
  7. FASTAPI_ROOT_PATH=
  8. MAX_CONCURRENT=
  9. # general
  10. DISABLE_VERSION_CHECK=
  11. FORCE_CHECK_IMPORTS=
  12. ALLOW_EXTRA_ARGS=
  13. LLAMAFACTORY_VERBOSITY=
  14. USE_MODELSCOPE_HUB=             # 是否使用ModelScope Hub下载模型,默认为0
  15. USE_OPENMIND_HUB=
  16. USE_RAY=
  17. RECORD_VRAM=
  18. OPTIM_TORCH=
  19. NPU_JIT_COMPILE=
  20. # torchrun
  21. FORCE_TORCHRUN=
  22. MASTER_ADDR=
  23. MASTER_PORT=
  24. NNODES=
  25. NODE_RANK=
  26. NPROC_PER_NODE=
  27. # wandb
  28. WANDB_DISABLED=
  29. WANDB_PROJECT=
  30. WANDB_API_KEY=
  31. # gradio ui
  32. GRADIO_SHARE=                   # 是否开启公网访问,默认为False
  33. GRADIO_SERVER_NAME=
  34. GRADIO_SERVER_PORT=             # 监听的端口,默认为7860
  35. GRADIO_ROOT_PATH=               # 指定WebUI部署的路径
  36. GRADIO_IPV6=
  37. # setup
  38. ENABLE_SHORT_CONSOLE=
  39. # reserved (do not use)
  40. LLAMABOARD_ENABLED=
  41. LLAMABOARD_WORKDIR=
复制代码
在新的下令行终端中输入nvidia-smi,观察此时显存占用环境:

如果想以背景进程运行,可以联合一些nohup和守护进程工具。
  1. nohup bash -c 'export USE_MODELSCOPE_HUB=1 GRADIO_SERVER_PORT=8860 && llamafactory-cli webui' > llamaboard.log 2>&1 &
复制代码
打开浏览器访问 http://localhost:8860%EF%BC%8C%E5%8D%B3%E5%8F%AF%E7%9C%8B%E5%88%B0%E5%A6%82%E4%B8%8B%E7%95%8C%E9%9D%A2%E3%80%82

初次浏览,发现界面是不是很复杂,功能许多,不消担心,我们后续会通过具体的模型微调案例,来来介绍如何使用。我们第一步就是把语言更改为友好的中文。左上角Language选择中文:

接着我们简朴预览一下,它包含了哪个功能,归类一下有四个功能(tab界面):


  • 训练(train):模型训练;
  • 评估与猜测(Evaluate & Predict):模型训练完后,可指定 模型 及 适配器 的路径通过该界面在指定命据集上进行评估;
  • 对话(Chat):模型训练完后,可指定 模型 及 适配器 的路径,通过该界面进行可视化对话;
  • 导出(Export):如果对模型微调结果满足并需要导出模型,可指定模型、适配器、量化等参数通过该界面后导出模型。

5. 微调Qwen2-VL多模态模型构建文旅大模型

该案例基于通义千问团队开源的多模态大模型 Qwen2-VL-2B-Instruct,介绍如何使用 LLaMA Factory 训练框架完成文旅领域大模型的微调及构造。
5.1、原模型对话
在进行微调之前,我们先辈行原始模型推理,先验证一下原始模型在对于文旅领域的答复结果。
在LLaMA-Board页面:


  • 模型名称:选择Qwen2-VL-2B-Instruct,
  • 模型路径:会自动显示出在Hugging Face的模型标识符Qwen/Qwen2-VL-2B-Instruct。

接着切换到对话(Chat)页面:


  • 推理引擎:选择hugging face的推理引擎,会使用原生transformers库;
  • 推理数据类型:选择auto,会自动根据下载的模型配置文件config.json识别出数据类型;

点击加载模型按钮,等候默认下载...

此时观察启动LLaMA Board的下令行终端,可以看到如下日志日志输入,代表正在下载模型(如果LLaMA Board是通过nohup启动,tail -f llamaboard.log可查看日志日志输出):

当显示模型已加载,则代表下载成功,如果失败,可以重复点击加载模型或查抄网络。

新建一个下令行终端,输入以下下令查看已下载的模型:

  1. $ ls ~/.cache/modelscope/hub/models/Qwen/
复制代码


某种环境下,为了统一管理模型,建议通过modelscope或git手动下载,存放到指定路径,然后后续使用时使用绝对路径来控制使用哪个模型,比如刚刚的模型,通过modelscope下载。
  1. $ modelscope download --model Qwen/Qwen2-VL-2B-Instruct --local_dir ./models/Qwen2-VL-2B-Instruct
复制代码

与LLaMA-Factory同级有个assets目录,存放着一些素材样图,选择demo_pic_1.jpg上传至对话框的图像地区,接着在系统提示词地区填写“你是一个导游,请生动有趣地答复游客提出的问题”。在页面底部的对话框输入“帮我讲讲这个地方”对话内容,点击提交即可发送消息。


发送后模型会逐字天生答复,观察模型天生的内容,记载起来供后续对比(固然此时模型未学习到特定领域的知识,答复的相对比较笼统)。

为了不影响后续微微训练显存不足环境,建议将对话的模型卸载释放显存。

点击对话(Chat)窗口中的卸载模型按钮,即可卸载模型。


5.2、微调数据集准备
打开一个新的下令行终端,进入到教程根目录(LLaMA-Factory同级目录)。
本末节准备了一份基于ShareGPT格式的文旅方面的多模态图像数据集tourism-vl.zip,存放在datasets目录下:

通过unzip解压到tourism-vl目录下。
  1. $ unzip datasets/tourism-vl.zip -d datasets/tourism-vl
复制代码
3. LLaMA Board可视化WebUI启动&设置

第二末节已提到过,LLaMA-Factory支持通过 WebUI 可视化界面零代码训练、微调大模型。该WebUI全称LLaMA Board,使用Gradio库构造,其交互体验结果好,支持模型训练全链路的一站式平台,一个好的功能离不开好的交互,Stable Diffusion的大放异彩的重要原因除了强大的内容输出结果,就是它有一个好的WebUI,这个LLaMA Board将训练大模型主要的链路和操纵都在一个页面中进行了整合,所有参数都可以可视化地编辑和操纵。
在完成LLaMA-Factory安装后,可以通过以下下令进入WebUI。
  1. $ llamafactory-cli webui
复制代码

注:但现在webui只支持单机单卡和单机多卡,如果是多机多卡请使用LLaMA Factory CLI。
下令会启动一个默认监听7860端口的可视化WebUI(简称LLaMA Board),可通过浏览器访问http://localhost:7860来查看。如果要监听其它端口,可以设置GRADIO_SERVER_PORT环境变量,比如更改为8860端口,同时设置USE_MODELSCOPE_HUB为1,表现模型从 ModelScope 魔搭社区下载,制止从 HuggingFace下载导致网速不畅。
CTRL + C结束上面的进程,重新运行以下下令:
  1. $ export USE_MODELSCOPE_HUB=1 GRADIO_SERVER_PORT=8860 && llamafactory-cli webui
复制代码

通过ModelScope下载的模型,默认存储路径为~/.cache/modelscope/hub,也可以通过设置MODELSCOPE_CACHE环境变量来修改。
相关的环境变量有哪些呢?打开一个新下令行终端,查看项目的根目录下的.env.local文件(这里罗列了LLAMA Factory的所有环境变量的参考)
  1. cat .env.local
复制代码
  1. # api
  2. API_HOST=
  3. API_PORT=
  4. API_KEY=
  5. API_MODEL_NAME=
  6. API_VERBOSE=
  7. FASTAPI_ROOT_PATH=
  8. MAX_CONCURRENT=
  9. # general
  10. DISABLE_VERSION_CHECK=
  11. FORCE_CHECK_IMPORTS=
  12. ALLOW_EXTRA_ARGS=
  13. LLAMAFACTORY_VERBOSITY=
  14. USE_MODELSCOPE_HUB=             # 是否使用ModelScope Hub下载模型,默认为0
  15. USE_OPENMIND_HUB=
  16. USE_RAY=
  17. RECORD_VRAM=
  18. OPTIM_TORCH=
  19. NPU_JIT_COMPILE=
  20. # torchrun
  21. FORCE_TORCHRUN=
  22. MASTER_ADDR=
  23. MASTER_PORT=
  24. NNODES=
  25. NODE_RANK=
  26. NPROC_PER_NODE=
  27. # wandb
  28. WANDB_DISABLED=
  29. WANDB_PROJECT=
  30. WANDB_API_KEY=
  31. # gradio ui
  32. GRADIO_SHARE=                   # 是否开启公网访问,默认为False
  33. GRADIO_SERVER_NAME=
  34. GRADIO_SERVER_PORT=             # 监听的端口,默认为7860
  35. GRADIO_ROOT_PATH=               # 指定WebUI部署的路径
  36. GRADIO_IPV6=
  37. # setup
  38. ENABLE_SHORT_CONSOLE=
  39. # reserved (do not use)
  40. LLAMABOARD_ENABLED=
  41. LLAMABOARD_WORKDIR=
复制代码
在新的下令行终端中输入nvidia-smi,观察此时显存占用环境:

如果想以背景进程运行,可以联合一些nohup和守护进程工具。
  1. nohup bash -c 'export USE_MODELSCOPE_HUB=1 GRADIO_SERVER_PORT=8860 && llamafactory-cli webui' > llamaboard.log 2>&1 &
复制代码
打开浏览器访问 http://localhost:8860%EF%BC%8C%E5%8D%B3%E5%8F%AF%E7%9C%8B%E5%88%B0%E5%A6%82%E4%B8%8B%E7%95%8C%E9%9D%A2%E3%80%82

初次浏览,发现界面是不是很复杂,功能许多,不消担心,我们后续会通过具体的模型微调案例,来来介绍如何使用。我们第一步就是把语言更改为友好的中文。左上角Language选择中文:

接着我们简朴预览一下,它包含了哪个功能,归类一下有四个功能(tab界面):


  • 训练(train):模型训练;
  • 评估与猜测(Evaluate & Predict):模型训练完后,可指定 模型 及 适配器 的路径通过该界面在指定命据集上进行评估;
  • 对话(Chat):模型训练完后,可指定 模型 及 适配器 的路径,通过该界面进行可视化对话;
  • 导出(Export):如果对模型微调结果满足并需要导出模型,可指定模型、适配器、量化等参数通过该界面后导出模型。

解压完在tourism-vl目录下将天生如下文件:

分别对应:


  • train.json:数据集文件,数据会合的样本为单轮对话情势,含有 261 条样本,每条样本都由一条系统提示、一条用户指令和一条模型答复组成,微调过程中模型不断学习样本中的答复风格,从而达到学习文旅知识的目的。数据样例如下所示:



  • images:数据集对应的图片文件



  • dataset_info.json:只包含文旅游数据集的描述文件

从前内容对于LLaMA-Factory来说,已是完整的一个数据集,因此我们可以直接拷贝到LlaMA-Factory目录下。为了生存LlaMA-Factory目录下的原始内置数据集,我们先将原始数据集重命名为rawdata,再移动已往。
  1. $ mv LLaMA-Factory/data LLaMA-Factory/rawdata && mv datasets/tourism-vl LLaMA-Factory/data
复制代码


5.3、模型全参数微调
确认已启动LLaMA Board,若未启动,请移步至第3末节。
按照以下内容设置表单:


  • 模型名称:Qwen2-VL-2B-Instruct;
  • 模型路径:Qwen/Qwen2-VL-2B-Instruct。之前在推理时已下载了模型。若未下载启动微调时会自动下载。也可以手动下载,然后指定一个绝对路径;
  • 微调方法:选择full,针对小模型使用全参微调方法能带来更好的结果,对显存的要求会更高(参考开头表格),可选的另有freeze, lora;
  • 对话模板:一样平常每种模型都有本身的对话模板,选择模型名称时会自动识别出对应的对话模板;
  • 加速方式:auto。

    • flashattn2:能够加快注意力机制的运算速度,同时淘汰对内存的使用,需要特定GPU硬件支持;
    • Unsloth:若使用HuggingFace + LoRA,恰当快速摆设,显存节省显着,但当前仅支持 Llama, Mistral, Phi-3, Gemma, Yi, DeepSeek, Qwen等大语言模型;
    • liger_kernel:需手动集成,但对复杂模型和长序列使命优化更彻底;

  • 操纵页面:选择训练(Train);
  • 训练阶段:选择Supervised Fine-Tuning(sft,监督微调);可选的另有Pre-Training(pt,预训练)、Reward Modeling(奖励模型训练)、PPO(强化学习训练)、DPO(非强化学习训练);
  • 训练数据集:选择train;

可以点击「预览数据集」,点击关闭返回训练界面。



  • 学习率:1e-4。过高易导致发散,过低则收敛迟钝,数据集越多越大。
  • 训练轮数:10;
  • 计算类型:pure_bf16。逼迫所有计算完全在 bf16 精度下进行,不依赖 FP32 辅助;
  • 梯度累积:设为 2。有利于模型拟合;
  • 学习率调节器:cosine,可选 linear, polynomial, constant 等。

在其他参数设置地区,根据环境进行设置,如:


  • 生存间隔:1000。节省硬盘空间。
  • 启用外部记载面板:none。虽然选择none,但还是会默认使用LlamaBoard自带的Loss曲线看板。可选的有tensorboard、wandb等,wandb需要设置相关的环境变量,以是一定要选择个,建议启动使用SwanLab,可以在可视化界面设置API Key,参考SwanLab参数设置。



  • SwanLab参数设置:暂时不启用。如若启用打钩,并填写项目名、SwanLab API密钥。

将输出目录修改为train_qwen2vl,训练后的模型权重将会生存在此目录中。点击「预览下令」可展示所有已配置的参数,您如果想通过代码运行微调,可以复制这段下令,在下令行运行。
点击「开始」启动模型微调。

启动微调后需要等候一段时间,可在界面观察到日志日志、训练进度和损失曲线,输入nvidia-smi观察显存占用环境。


如果过程中出现错误,请联合页面日志以及终端日志进行排查。比如以下OOM(显存移除)错误,就需要增加显存或更失小点的模型。


观察之前已经使用对话(Chat)页面加载模型进行了一次推理,输入nvidia-smi查看显存占用环境。
  1. $ nvidia-smi
复制代码

观察到此时有8G的显存占用,我们点击卸载模型,释放显存。

再次输入nvidia-smi,观察显存是否已降下来。
末了,一切顺利,模型微调大约需要 15 分钟,显示“训练完毕”代表微调成功。权重文件被生存在 LLaMA-Factory/saves/Qwen2-VL-2B-Instruct/full 目录下。

从结果大抵可以看到,损失还是比较平稳的下滑,结果不错。

为了后续可以方便的进行再次训练,可以把这次的训练参数生存成.yaml文件,方便下次直接加载。


5.4、微调后的模型对话
选择「Chat」栏,将查抄点路径改为 train_qwen2vl,点击「加载模型」即可在 Web UI 中和微调后的模型进行对话。

与原始模型推理步骤一样,选择相同的图片并上传,接着在系统提示词地区填写“你是一个导游,请生动有趣地答复游客提出的问题”。在页面底部的对话框输入“帮我讲讲这个地方”,点击提交即可发送消息。

发送后微调后的模型,从答复中可以发现模型学习到了数据会合的内容,能够恰本地模仿导游的语气介绍图中的山西博物院。


对微调前的答复对比,可以发现微调后的模型更加符合真实场景。
注:如果需要进行其它实验,由于显存的限制,建议用完卸载模型。

5.5、模型归并导出
虽然全参数微调后的新查抄点/权重文件,不需要再进行归并,但为了整理成符合huggingface尺度的模型仓库格式,可以进行一次导出。
使用LLaMA Board可安智网化界面可以方便的进行模型导出。


  • 模型名称:Qwen2-VL-2B-Instruct;须与微调时的基座模型名称保持一致;
  • 模型路径:Qwen/Qwen2-VL-2B-Instruct;须与微调时的模型路径保持一致;
  • 查抄点路径:train_qwen2vl;即全参数微调后的新查抄点/权重文件路径;

点击导出(Export)标签页。


  • 最大分块巨细(GB):4,模型会被分成多个文件存储,每个文件巨细不会超过指定巨细;
  • 导出量化等级:none,不进行量化;
  • 导出设备:cpu,这个地方选择什么影响不大;
  • 导出目录:../models/Qwen2-VL-2B-Tourism,../代表可以导出到LLaMA-Factory的上级目录,这里为了统一管理。

末了点击「导出」按钮,开始导出模型。

经过短暂的等候,页面状态提示导出完成。

通过FinalShell等远程工具,登录机器,可以看到在models目录下重新天生了Qwen2-VL-2B-Tourism文件夹。

其中还天生了使用Ollama摆设的Modelfile文件。

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

本帖子中包含更多资源

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

×
回复

使用道具 举报

×
登录参与点评抽奖,加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表