一、Llama Factory介绍
LLaMA-Factory 是一个开源框架,旨在简化大型语言模型的定制化微调流程。该框架整合了多样化的训练策略与监控工具,支持通过命令行界面(CLI)和网页用户界面(WebUI)等多种方式进行交互,显著降低了进行模型微调所需的技术门槛。通过 LLaMA-Factory,用户能够更加高效、便捷地调整模型以适应特定的应用场景或数据集,进而提升模型性能和应用效果。
2.1 LLaMA-Factory特点
- 易用性:LLaMA-Factory 大幅降低了使用机器学习算法的门槛,它提供了一个直观的图形用户界面(GUI),使得即便是没有深厚编程背景的用户也能轻松上手,进行模型的微调工作。
- 微调效率:该平台集成了多种先进的微调技术,包括但不限于DPO(直接策略优化)、ORPO(在线奖励预测优化)、PPO(近端策略优化)以及SFT(监督微调)。这些技术的应用不仅提高了微调过程的效率,还显著增强了模型的表现力。
- 参数调整灵活性:为了满足不同场景下的需求,LLaMA-Factory 允许用户根据具体任务灵活调整各种模型参数。例如,用户可以自行设定dropout率、训练轮数(epochs)等关键参数,以实现最佳的训练效果。
- 多语言支持:考虑到全球化的需求,LLaMA-Factory 的界面设计支持多种语言,包括英语、俄语和中文。这为来自世界各地的用户提供了便利,促进了技术的普及与应用。
2.2 核心功能
- 多模型兼容:LLaMA-Factory 支持多种大型语言模型,包括但不限于 LLama、Mistral 和 Falcon。这种广泛的兼容性为用户提供了丰富的选择,可以根据具体需求挑选最合适的模型。
- 训练方法多样:平台不仅支持传统的全参数微调,还集成了LoRA(Low-Rank Adaptation)等先进的微调技术。这为用户提供了更加灵活和高效的训练选项,有助于在保持模型性能的同时减少资源消耗。
- 用户界面友好:通过 LLama Board 提供的一个直观的 Web 界面,用户可以轻松地调整模型的各种设置,无需深厚的编程知识或复杂的命令行操作,极大地提高了使用的便捷性。
- 监控工具集成:LLaMA-Factory 与 TensorBoard 等行业标准的监控工具无缝集成,使用户能够方便地监控训练过程中的各项指标,及时发现并解决潜在问题,确保训练过程的顺利进行。
二、Llama Factory安装与运行
2.1 配置与环境说明
(1)我当前使用的是一张拥有16GB显存的T4显卡。在选择大型语言模型(LLM)时,我选定了Qwen2-1.5B-Instruct版本。通过Hugging Face平台进行推理时,该模型仅需4GB显存即可运行,而训练过程大约需要14GB显存。因此,我的16GB T4显卡足以应对这一需求,既能够保证模型的顺利训练,也能确保整个开发流程顺畅无阻。对于大多数开发者而言,这样的配置也完全够用,能够帮助大家顺利完成从模型测试到部署的全部流程。
(2)我当前使用的NVIDIA驱动版本为535,对应的CUDA版本为12.2。有关显卡驱动和CUDA的具体安装教程,可参考我之前发布的一篇文章。此外,我的Python环境版本为3.10。
(3)对于PyTorch及其所需的CUDA版本,实际上,自PyTorch 2.0以上版本开始,安装过程中会自动匹配并安装相应的NVIDIA包。这意味着,只要你使用的显卡驱动版本足够新,就能满足这些要求。这是因为更高版本的CUDA通常对显卡驱动版本有特定的要求。
(4)在我个人的环境中,我使用的是PyTorch 2.3版本,并将几个关键包的版本信息列出如下:
torch 2.3.0
transformers 4.46.1
xformers 0.0.26.post1
vllm 0.5.0
vllm-flash-attn 2.5.9
openai 1.54.3
llamafactory 0.9.1.dev0
单独说一下vllm 0.5.0对应有哪些依赖的包:
vllm 0.5.0 requires lm-format-enforcer==0.10.1
vllm 0.5.0 requires nvidia-ml-py
vllm 0.5.0 requires outlines>=0.0.43
vllm 0.5.0 requires prometheus-fastapi-instrumentator>=7.0.0
vllm 0.5.0 requires py-cpuinfo
vllm 0.5.0 requires xformers==0.0.26.post1
vllm 0.5.0 requires torch==2.3.0
2.2 环境搭建(手把手从零搭建)
2.2.1 源码获取
从llama-factory仓库中拉取最新代码:
git clone https://github.com/hiyouga/LLaMA-Factory
2.2.2 安装vllm
很多教程,包括官方文档的第二步,直接跳到了安装llama-factory依赖,而没有详细说明如何安装vllm。虽然不安装vllm也可以使用Hugging Face来运行大型语言模型(LLM),但安装vllm后可以显著提升推理速度,带来更好的使用体验。为了让大家亲身体验vllm的推理加速效果,这里提供一个简单的安装命令(在安装vllm0.5.0版本时,会同时安装上了torch2.3.0,所以在后面安装依赖的时候可以不需要再安装torch了):
pip install vllm==0.5.0
如果你需要设置pip的默认镜像源以加快下载速度,可以参考我之前发布的Anaconda安装教程中的相关部分。
2.2.3 安装llama-factory依赖
进入刚刚克隆的 LLaMA-Factory 文件夹,使用以下命令3安装 LLaMA-Factory 及其所有必需的附加组件:
1 cd LLaMA-Factory
2 pip install . # 安装所有依赖
3 pip install -e .[vllm,torch] # 忽略vllm和torch包
这条命令将确保所有依赖项都被正确安装,从而让你能够顺利运行 LLaMA-Factory。
使用以下命令查看是否安装成功:
llamafactory-cli version
2.3 启动运行llama-factory
2.3.1 启动
llamafactory-cli webui
运行以上命令启动程序,默认访问端口为7860。
语言选择中文,对应的所有参数一目了然,就不一样介绍了。
- 模型名称(模型路径):选择本地的大模型;
- 检查点路径:使用lora微调后的的权重,没有的话则不选择;
- 推理引擎:有huggingface和vllm两种;
2.3.2 运行大模型
选择好合适的大模型,在‘chat’模块点击加载模型即可进行对话了。
三、Lora 微调
3.1 训练集
在 LLaMA-Factory/data 文件夹下放入两个json文件,identity.json 和 fintech.json
fintech.json 数据如下
[
{
"instruction": "hi",
"input": "",
"output": "Hello! I am fly97, an AI assistant developed by 曾小祥. How can I assist you today?"
},
{
"instruction": "hello",
"input": "",
"output": "Hello! I am fly97, an AI assistant developed by 曾小祥. How can I assist you today?"
},
{
"instruction": "Who are you?",
"input": "",
"output": "I am fly97, an AI assistant developed by 曾小祥. How can I assist you today?"
},
{
"instruction": "What is your name?",
"input": "",
"output": "You may refer to me as fly97, an AI assistant developed by 曾小祥."
},
{
"instruction": "Do you have a name?",
"input": "",
"output": "As an AI assistant developed by 曾小祥, I got the name fly97."
},
{
"instruction": "Can you introduce yourself?",
"input": "",
"output": "I am fly97, an AI assistant trained by 曾小祥."
},
{
"instruction": "Can you tell me a little bit about yourself?",
"input": "",
"output": "I am fly97, an AI assistant trained by 曾小祥."
},
{
"instruction": "What are you called?",
"input": "",
"output": "I am fly97, an AI assistant trained by 曾小祥."
},
{
"instruction": "Tell me about yourself",
"input": "",
"output": "I am fly97, an AI assistant developed by 曾小祥."
},
{
"instruction": "Who created you?",
"input": "",
"output": "I am an AI assistant created by 曾小祥."
},
{
"instruction": "Who built you?",