大模型微调|使用 LLaMA-Factory 微调 Llama3-8B-Chinese-Chat 完成知识问答任务

前言:本篇博客分享如何基于LLaMA-Factory使用现有金融数据集实现LLaMA3的微调,以完成金融领域的知识问答任务。

--

参考教程:https://github.com/echonoshy/cgft-llm/tree/master/llama-factory

相关视频:https://www.bilibili.com/video/BV1uw4m1S7Cd/

📝写在前面:其实github教程已经很详细了,但是自己在按照教程里的步骤实现的时候,由于环境版本各种不适配等原因,还是遇到了很多问题,在此记录一下,希望能够帮到大家。

目录

  • [0. 计算资源介绍(显卡&cuda)](#0. 计算资源介绍(显卡&cuda))
  • [1. Conda环境搭建(Python 3.10)](#1. Conda环境搭建(Python 3.10))
  • [2. 基座模型下载(LLaMA3 8B)](#2. 基座模型下载(LLaMA3 8B))
  • [3. LLaMA-Factory 框架安装](#3. LLaMA-Factory 框架安装)
  • [4. 训练数据准备](#4. 训练数据准备)
  • [5. 模型微调](#5. 模型微调)
    • [5.1 基于WebUI的微调](#5.1 基于WebUI的微调)
    • [5.2 基于命令的微调](#5.2 基于命令的微调)
  • [6. 微调Debug历程故障排除](#6. 微调Debug历程故障排除)
  • [7. 在线对话](#7. 在线对话)
    • [7.1 Web UI 对话](#7.1 Web UI 对话)
    • [7.2 终端对话](#7.2 终端对话)
    • [7.3 OpenAI API 对话](#7.3 OpenAI API 对话)
  • [8. 模型合并](#8. 模型合并)

0. 计算资源介绍(显卡&cuda)

使用的服务器资源信息:

  1. RTX 4090 (24GB) × 1
  2. cuda版本 12.0

1. Conda环境搭建(Python 3.10)

新建conda环境,⚠️python版本要高于3.9(否则无法正常使用llamafactory),这里选取python 3.10版本。

python 复制代码
conda create -n demo python==3.10
conda activate demo #切换到新建的demo环境中

然后,安装必要的库,以下是关键库的版本信息:

⚠️:我这里给出的版本不一定适用于各位,要结合自己的cuda版本(使用nvidia-smi命令查看)来安装,保证版本的兼容。

⚠️:这一步很关键!一定要选择适合硬件版本的库,否则在后续的微调过程中会经历长时间的debug......


2. 基座模型下载(LLaMA3 8B)

选用基于中文数据训练过的 LLaMA3 8B 模型:shenzhi-wang/Llama3-8B-Chinese-Chat

依次执行以下命令下载上述模型:

python 复制代码
pip install -U huggingface_hub
export HF_ENDPOINT=https://hf-mirror.com  # (可选)配置 hf 国内镜像站 
huggingface-cli download --resume-download shenzhi-wang/Llama3-8B-Chinese-Chat --local-dir /newdata/z_demo/Llama3-8B-Chinese-Chat 

--local-dir参数/newdata/z_demo/Llama3-8B-Chinese-Chat 替换为下载路径。


3. LLaMA-Factory 框架安装

首先下载LLaMA-Factory,有以下两种方式:

  • 执行git clone https://github.com/hiyouga/LLaMA-Factory.git自动下载LLaMA-Factory,但该方法常常由于网络原因下载失败。
  • 手动下载该项目后上传到服务器对应目录下。

下载完成后,终端执行cd LLaMA-Factory-main命令切换到对应目录下,然后执行pip install -e .安装。

(安装需要一定时间,本人这里网速较慢,大约1h完成)


4. 训练数据准备

下载训练数据,将其放到LLaMA-Factory-main的data子目录下,包括identity.json(457行)fintech.json(2648行)以及dataset_info.json(484行)这三个文件。

⚠️:这里的训练数据就是接下来模型微调会用到的数据。


5. 模型微调

⚠️:可以在步骤5.1的UI界面中开启微调,也可以采用步骤5.2中命令行的方法微调(本博客中选择后者)。

5.1 基于WebUI的微调

终端执行 cd LLaMA-Factory-main 切换到该目录,然后执行 llamafactory-cli webui 打开UI界面:

5.2 基于命令的微调

首先将LLaMA-Factory-main/cust/train_llama3_lora_sft.yaml文件中的模型加载路径model_name_or_path和保存路径output_dir进行如实修改:

然后在终端依次执行命令:

python 复制代码
export NCCL_IB_DISABLE=1
export NCCL_P2P_DISABLE=1
CUDA_VISIBLE_DEVICES=0 llamafactory-cli train cust/train_llama3_lora_sft.yaml # 指定使用id=0的显卡

成功训练:

经过一段时间(30min左右)的等待,训练完毕:

至此,得到训练好的 LoRA Adapter(150M左右),保存在之前设置好的output_dir(saves/LLaMA3-8B-Chinese-Chat/lora/train_demo)目录下,训练loss变化图也在其中(如下)。

6. 微调Debug历程故障排除

⚠️:如果不执行上面那两个export相关命令会报如下错误:

⚠️: 如果在环境搭建时未安装unsloth库,则会报错如下:

⚠️:如果遇到下述错误:

根据相关资料,解决方案为:

LLaMA-Factory-main/src/llamafactory/extras/env.py文件中添加下列代码:

python 复制代码
datasets.builder.has_sufficient_disk_space = lambda needed_bytes, directory='.': True

⚠️:如果遇到如下错误,说明triton库的版本出了问题,参见步骤1 环境搭建安装合适版本的triton库。


7. 在线对话

这里挑选了fintech.json文件中的一个例子:

根据金融研报,为什么白酒板块的估值下探空间已经不大?\n基于以下材料回答上述问题:\n\n投资建议:前期估值和市值对预期反应充分,近期刺激消费的政策陆续出台,我们认为居民消费信心有望逐步恢复,下半年改善节奏有望加速。 白酒板块:三重底部估值底、预期底、基本面底或已确认,预计当前在宏观环境边际改善、业绩确定性较强情况下估值下探空间或已不大、下半年基本面压力趋缓的情况下可以逐步乐观。 首推优质龙头,推荐泸州老窖、贵州茅台、五粮液、山西汾酒、古井贡酒;其次看多超跌的弹性品种,老白干酒、金种子酒、酒鬼酒、顺鑫农业。 大众品板块:消费本身中长期逻辑(消费升级+集中度提升)未发生重大变化,宏观政策向好提振消费信心,我们预计与餐饮、出行相关的消费场景有望优先恢复。

7.1 Web UI 对话

方式一 :使用 Web UI 界面进行对话:在LLaMA-Factory-main目录下执行命令CUDA_VISIBLE_DEVICES=0 llamafactory-cli webchat cust/train_llama3_lora_sft.yaml,报错如下:

根据相关资料参考,尝试删除train_llama3_lora_sft.yaml文件中的未使用参数['do_train', 'fp16', 'gradient_accumulation_steps', 'learning_rate', 'logging_steps', 'lr_scheduler_type', 'max_grad_norm', 'num_train_epochs', 'optim', 'output_dir', 'per_device_train_batch_size', 'report_to', 'save_steps', 'warmup_steps'],再次运行:

成功跳转到下述页面:

Web UI 界面语言默认 en(英文),改成 zh(中文),浅浅尝试一下效果:

回答如下:

7.2 终端对话

方式二 :直接在终端对话,在LLaMA-Factory-main目录下执行命令CUDA_VISIBLE_DEVICES=0 llamafactory-cli chat cust/train_llama3_lora_sft.yaml

7.3 OpenAI API 对话

方式三:使用OpenAI API风格进行对话:

python 复制代码
# 指定多卡和端口
CUDA_VISIBLE_DEVICES=0 API_PORT=8000 
llamafactory-cli api cust/train_llama3_lora_sft.yaml

⚠️:这种方式未成功,知道原因的小伙伴可以分享一下解决方案,在这里不深究了


8. 模型合并

运行llamafactory-cli export cust/merge_llama3_lora_sft.yaml命令,将步骤2中的基座模型与步骤6中训练好的 LoRA Adapter 合并成一个新的模型。



收获:本次复现首次了解到unsloth库,能够加速⏩大模型微调。此前只是使用过LoRA微调Qwen/llama大模型完成文本分类任务,这次也尝试了使用LLaMA-Factory微调llama,完成专业领域的知识问答任务。之后可以尝试更换微调数据集,完成其他领域的大模型微调。

相关推荐
Cheng_08294 小时前
llama-factory笔记
笔记·llama
HealthScience4 小时前
RAG、Agent、微调等6种常见的大模型定制策略
python·深度学习·大模型
Nicolas8939 小时前
【大模型实战】利用ms-swift微调框架对QwQ-32B推理模型进行微调
大模型·swift·大模型微调·lora微调·微调框架·推理模型微调·msswift
西西弗Sisyphus14 小时前
大模型推理后JSON数据后处理
llm·json·json_repair
audyxiao00116 小时前
多元时间序列预测的范式革命:从数据异质性到基准重构
人工智能·大模型·transformer·智能交通
SaebaRyo18 小时前
作为一个前端er如何了解LLM(大语言模型)
前端·llm
山顶夕景20 小时前
ICLR2025 | SLMRec: 重新思考大语言模型在推荐系统中的价值
自然语言处理·大模型·序列推荐
Francek Chen20 小时前
【DeepSeek】蓝耘智算 | 中国AI新范式:蓝耘智算云+DeepSeek R1部署实战教程
人工智能·开源·大模型·aigc·deepseek
魔乐社区21 小时前
基于Atlas 800I A2的RAG端到端实践
人工智能·深度学习·大模型·deepseek