LLM大模型微调入门Lora(LlamaFactory)

一、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?",
    
### 大型语言模型微调方法 对于大型语言模型(LLMs),微调是指利用特定领域的小规模标注数据集来调整预训练好的大模型权重,从而让其更好地适应具体应用场景。这种方法能够有效提高模型在下游任务上的表现。 #### 数据准备 为了成功地对 LLMs 进行微调,首先要准备好高质量的目标域数据集。通常情况下,这些数据应该包含输入文本以及相应的标签或期望输出。如果涉及到分类任务,则可能需要创建一个“字典”,该字典包含了所有要预测的类别标签[^4]。 ```python from transformers import AutoTokenizer, Trainer, TrainingArguments import datasets # 加载并预处理数据集 dataset = datasets.load_dataset('path_to_your_data') tokenizer = AutoTokenizer.from_pretrained('pretrained_model_name') def preprocess_function(examples): return tokenizer(examples['text'], truncation=True) tokenized_datasets = dataset.map(preprocess_function, batched=True) ``` #### 模型加载与配置 选择合适的预训练基础模型非常重要。当前最流行的框架之一是 Hugging Face 的 `transformers` 库,它提供了多种经过广泛验证过的预训练模型供开发者选用。下面是一个简单的例子展示如何加载一个预训练模型: ```python from transformers import AutoModelForSequenceClassification model = AutoModelForSequenceClassification.from_pretrained( 'pretrained_model_name', num_labels=number_of_classes) ``` #### 训练设置 定义好训练参数后就可以开始实际的训练过程了。这里可以使用 PyTorch Lightning 或者更简便的方式——HuggingFace 提供的 `Trainer API` 来简化整个流程: ```python training_args = TrainingArguments( output_dir='./results', evaluation_strategy="epoch", per_device_train_batch_size=8, per_device_eval_batch_size=8, num_train_epochs=3, weight_decay=0.01, ) trainer = Trainer( model=model, args=training_args, train_dataset=tokenized_datasets["train"], eval_dataset=tokenized_datasets["validation"] ) trainer.train() ``` 通过上述步骤完成之后,便可以获得针对特定应用优化后的版本。值得注意的是,在资源允许的情况下增加更多的迭代次数可能会进一步改善最终效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值