Skip to content

LLaMA-Factory微调大模型

算力平台

Tesla T4NVIDIA公司推出的一款数据中心级GPU(图形处理器),专为加速AI推理、机器学习和数据分析而设计。

算力平台

系统:

Ubuntu-22.04

显卡驱动和Cuda:

CudaCompute Unified Device Architecture)是NVIDIA公司开发的一种并行计算平台和编程模型。它允许开发者利用NVIDIA的图形处理单元(GPU)进行通用计算,大大提高了计算密集型任务的处理速度。

工作原理:
Cuda允许程序员编写CC++Fortran代码,这些代码可以在GPU上执行。 它提供了一套API和工具,使得开发者能够更容易地利用GPU的并行处理能力。

nvidia-smi

创建Python虚拟环境

安装Conda

Ubuntu下载Anaconda

wget --no-check-certificate https://repo.anaconda.com/archive/Anaconda3-2024.06-1-Linux-x86_64.sh

安装

bash Anaconda3-2024.06-1-Linux-x86_64.sh

安装路径

Anaconda3 will now be installed into this location:
/root/anaconda3

激活安装

source ~/.bashrc

验证安装

conda --version
conda 24.5.0

Conda创建Python虚拟环境

conda create -n llama-factory python=3.11
conda env list
conda activate llama-factory

根据Cuda版本安装Pytorch

PyTorch 是什么?
PyTorch 是一个开源的机器学习库,主要用于深度学习应用。它提供了高级的神经网络构建和训练功能。
Cuda 的作用:
Cuda 允许 PyTorch 利用 NVIDIA GPU 进行并行计算,大大加速深度学习模型的训练和推理过程。

Cuda版本是12.2

pytorch官方文档

conda install pytorch torchvision torchaudio pytorch-cuda=12.4 -c pytorch -c nvidia

Pytorch

验证Pytorch是否安装成功:

验证GPU Cuda对应的Pytorch版本是否安装成功:

python
import torch
print(torch.cuda.is_available())
True

Pytorch

Git下载LLaMA-Factory

LLaMA-Factory官方指南

LLaMA-Factory官方issues

git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git

安装LLaMA-Factory的依赖

暂时只安装必要依赖:torchmetrics,真正训练模型时提示缺什么依赖就安装什么依赖。

cd LLaMA-Factory
pip install -e ".[torch,metrics]"

运行LLaMA-Factory Board

LLaMA-Factory只能单GPU运行。

LLaMA-Factory Board可视化方式微调大模型.

打开LLaMA-Factory Board

llamafactory-cli help
llamafactory-cli webui

域名:7860 打开前端网页

LLaMA-Factory Board

LLaMA-Factory微调QWen2-7B-int4-Chat

LLaMA-Factory默认的模型下载源是huggingface。如果有网络问题可以将下载源换成modelscope

选择基座模式

QWen2-7B-int4-Chat

和基座模型对话

和基座模型对话

选择训练数据集

选择identity身份认证的数据集。用于改变基座模型的身份。

修改数据集,将数据集下载到本机,用vscode修改

cd LLaMA-Factory/data
//下载数据集到本地
scp ubuntu@云服务器ip地址:/home/ubuntu/LLaMA-Factory/data/identity.json /Users/用户名/desktop

修改原始数据集中的nameauthor

修改数据集

上传数据集:

scp /Users/用户名/desktop/identity.json ubuntu@云服务器ip地址:/home/ubuntu/LLaMA-Factory/data

微调

选择基座模型、微调方式(LoRA)、数据集、参数设置后点击开始微调。

微调

报错: 报错

报错

安装缺少的依赖:

pip install auto_gptq>=0.5.0
pip install optimum

训练完毕,前端页面提示“训练完毕”。

合并模型

将微调后的adapter和基座模型合并,和合并后的模型对话。

合并模型

评估和预测

微调后的模型,选择数据集进行评估和预测,生成报告。

  1. 评估(Evaluation): 您的描述非常准确。评估确实涉及准备一系列问题和对应的预期答案(参考答案),然后让微调后的模型回答这些问题,并将模型的输出与预期答案进行比较。这个过程帮助我们衡量模型的性能。

  2. 预测(Prediction): 预测通常指的是模型在新的、未见过的数据上的表现。在这种情况下,我们通常只提供问题(或指令),而不需要准备对应的答案。预测的目的是观察模型在实际应用场景中的表现。

补充说明:

  • 评估数据集:通常包含问题和参考答案对。
  • 预测数据集:通常只包含问题或指令,不需要准备答案。
  • 评估过程:涉及定量和定性的比较(如相似度计算、人工评分等)。
  • 预测过程:主要是观察模型的输出,可能没有标准答案进行比较。

总的来说,评估帮助我们量化模型的性能,而预测让我们了解模型在实际应用中的行为。两者都是验证和理解模型能力的重要步骤。

基于 identity 数据集微调后的模型,我们可以准备以下评估和预测数据集:

  1. 评估数据集:

这个数据集应包含问题和预期答案,用于测试模型是否正确学习了身份信息。

json
[
  {
    "instruction": "What's your name?",
    "input": "",
    "output": "My name is Claude. I'm an AI assistant created by Anthropic."
  },
  {
    "instruction": "Who created you?",
    "input": "",
    "output": "I was created by Anthropic, an AI research company."
  },
  {
    "instruction": "Are you an AI?",
    "input": "",
    "output": "Yes, I am an artificial intelligence. I'm an AI assistant developed by Anthropic."
  },
  {
    "instruction": "Tell me about yourself.",
    "input": "",
    "output": "I'm Claude, an AI assistant developed by Anthropic. I'm here to help with a wide range of tasks and answer questions to the best of my abilities."
  },
  {
    "instruction": "What company made you?",
    "input": "",
    "output": "I was developed by Anthropic, an artificial intelligence research company."
  }
]
  1. 预测数据集:

这个数据集只包含问题或指令,用于观察模型在各种情况下的表现。

json
[
  {
    "instruction": "Hi there!",
    "input": ""
  },
  {
    "instruction": "Can you introduce yourself?",
    "input": ""
  },
  {
    "instruction": "What kind of tasks can you help with?",
    "input": ""
  },
  {
    "instruction": "Are you capable of learning new information?",
    "input": ""
  },
  {
    "instruction": "Do you have personal opinions?",
    "input": ""
  },
  {
    "instruction": "How do you compare to other AI assistants?",
    "input": ""
  },
  {
    "instruction": "What are your limitations?",
    "input": ""
  }
]

导出模型

合并基座模型和LoRA微调的Adapter,导出合并后的模型。

导出模型

模型使用

xinference部署微调后导出的模型。

  • 可以在Dify中配置xinference部署的大模型.
  • 也可以通过API的方式调用xinference部署的大模型。