LLaMA-Factory微调Qwen2.5-7B模型

本次实验环境使用的魔塔社区的机子

准备LLaMA-Factory环境

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

创建虚拟环境

一般的可以使用anaconda ,miniconda 这个免费的机器有限我就使用python的venv来创建虚拟环境

root@eais-bjmklatuw19ea8k68zju-0:/mnt/workspace# python --version
Python 3.10.14
root@eais-bjmklatuw19ea8k68zju-0:/mnt/workspace# python -m venv llama_factory

激活环境,下载依赖

root@eais-bjmklatuw19ea8k68zju-0:/mnt/workspace# source llama_factory/bin/activate
(llama_factory) root@eais-bjmklatuw19ea8k68zju-0:/mnt/workspace# cd LLaMA-Factory/
(llama_factory) root@eais-bjmklatuw19ea8k68zju-0:/mnt/workspace/LLaMA-Factory# pip install -e ".[torch,metrics,swanlab]"
Looking in indexes: https://mirrors.cloud.aliyuncs.com/pypi/simple
Obtaining file:///mnt/workspace/LLaMA-Factory
  Installing build dependencies ... done
  Checking if build backend supports build_editable ... done
  Getting requirements to build editable ... done
  Preparing editable metadata (pyproject.toml) ... done
Collecting gradio<=5.12.0,>=4.38.0
  Downloading https://mirrors.cloud.aliyuncs.com/pypi/packages/7a/70/fb8611fabeb432d05946ef89d7acc6fde6c7e85ca9a05d39626b4cdf1a17/gradio-5.12.0-py3-none-any.whl (57.6 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 57.6/57.6 MB 32.9 MB/s eta 0:00:00
Collecting pydantic...
source llama_factory/bin/activate #激活环境
cd LLaMA-Factory/  #切换目录
pip install -e ".[torch,metrics,swanlab]" #下载依赖
pip install bitsandbytes>=0.39.0 #下载bitsandbytes

使用SwanLab记录实验数据

去官网创建一个账号,在虚拟环境登录

swanlab login
粘贴复制的API token

下载模型

在modescope当中寻找相应的模型,这里使用ModelScope下载

主意路径和放在/mnt/workspace/下
modelscope download --model Qwen/Qwen2.5-7B-Instruct

下载数据集

需要的格式为Apache格式,在数据集当中寻找你需要的

使用什么下载都ok,最后要将数据文件存放在/mnt/workspace/LLaMA-Factory/data下

编辑训练文件

/mnt/workspace/LLaMA-Factory/examples/train_qlora/下复制一份llama3_lora_sft_awq.yaml为qwen_lora_sft_bitsandbytes.yaml然后编辑这个文件

AWQ 

  • 含义AWQ 是 Activation-aware Weight Quantization 的缩写,是一种量化技术。

  • 用途:用于存储经过 AWQ 量化处理的模型文件。AWQ 是一种高效的量化方法,能够在保持模型性能的同时显著减少模型大小和推理时间。

  • 特点:AWQ 通常会根据激活值(activation)的分布动态调整权重量化策略,从而在低精度下保持较高的模型精度。

bnb_npu

  • 含义bnb 是 BitsandBytes 的缩写,而 npu 指的是 Neural Processing Unit(神经网络处理单元)。

  • 用途bnb_npu BitsandBytes 库针对 NPU 优化的量化工具或方法。

  • 特点

    • BitsandBytes 是一个流行的量化库,支持 8 位和 4 位量化。

    • npu 表示该方法针对 NPU(如华为 Ascend、高通 Hexagon 等)进行了优化,以提高在这些硬件上的推理效率

### model
#修改为你模型的位置
model_name_or_path: /mnt/workspace/Qwen
quantization_bit: 4
# trust_remote_code: true

### method
stage: sft
do_train: true
finetuning_type: lora
lora_rank: 8
lora_target: all

### dataset
dataset: law
template: qwen
cutoff_len: 2048
max_samples: 1000
overwrite_cache: true
preprocessing_num_workers: 16

### output
output_dir: saves/qwen2.5-7b/lora/sft
logging_steps: 10
save_steps: 500
plot_loss: true
overwrite_output_dir: true

### train
per_device_train_batch_size: 1
gradient_accumulation_steps: 8
learning_rate: 1.0e-4
num_train_epochs: 3.0
lr_scheduler_type: cosine
warmup_ratio: 0.1
bf16: true
ddp_timeout: 180000000


# 配置swanlab ,前提要登录
use_swanlab: true
swanlab_project: llamafactory
swanlab_run_name: Qwen2.5-7B-Instruct

### eval
val_size: 0.1
per_device_eval_batch_size: 1
eval_strategy: steps
eval_steps: 500

 Model 部分

  • model_name_or_path: 指定预训练模型的路径或名称。这里路径是 /mnt/workspace/Qwen,表示模型存储在本地目录。

  • quantization_bit: 量化位数,这里设置为 4,表示使用 4 位量化来减少模型的内存占用和计算量。

  • trust_remote_code: 如果模型包含自定义代码(如 Hugging Face 的 transformers 库中的自定义模型),需要设置为 true。这里被注释掉了,表示不启用。

Method 部分

  • stage: 当前任务的阶段,sft 表示监督微调(Supervised Fine-Tuning)。

  • do_train: 是否进行训练,设置为 true 表示启用训练。

  • finetuning_type: 微调类型,这里使用 lora,表示使用 LoRA 技术进行微调。

  • lora_rank: LoRA 的秩(rank),这里设置为 8。秩越低,参数量越少,但可能会影响模型性能。

  • lora_target: 指定 LoRA 应用于哪些层,all 表示应用于所有层。

Dataset 部分

  • dataset: 使用的数据集名称,这里为 law,可能是一个法律相关的数据集。

  • template: 数据模板,这里为 qwen,表示使用 Qwen 模型的默认模板。

  • cutoff_len: 输入序列的最大长度,超过此长度的部分会被截断。这里设置为 2048。

  • max_samples: 最大样本数,这里设置为 1000,表示只使用数据集中的前 1000 个样本。

  • overwrite_cache: 是否覆盖缓存,设置为 true 表示每次运行都会重新生成缓存。

  • preprocessing_num_workers: 数据预处理的并行工作线程数,这里设置为 16。

Output 部分

  • output_dir: 模型和日志的输出目录,这里为 saves/qwen2.5-7b/lora/sft

  • logging_steps: 每隔多少步记录一次日志,这里设置为 10。

  • save_steps: 每隔多少步保存一次模型,这里设置为 500。

  • plot_loss: 是否绘制损失曲线,设置为 true 表示启用。

  • overwrite_output_dir: 是否覆盖输出目录,设置为 true 表示如果目录已存在则会覆盖。

Train 部分

  • per_device_train_batch_size: 每个设备的训练批次大小,这里设置为 1。

  • gradient_accumulation_steps: 梯度累积步数,这里设置为 8。通过累积梯度来模拟更大的批次大小。

  • learning_rate: 学习率,这里设置为 1.0e-4

  • num_train_epochs: 训练的总轮数,这里设置为 3.0。

  • lr_scheduler_type: 学习率调度器类型,这里为 cosine,表示使用余弦退火调度器。

  • warmup_ratio: 学习率预热比例,这里设置为 0.1,表示在前 10% 的训练步骤中逐步增加学习率。

  • bf16: 是否使用 bfloat16 精度,设置为 true 表示启用,可以减少内存占用并加速训练。

  • ddp_timeout: 分布式数据并行(DDP)的超时时间,这里设置为 180000000 毫秒。

SwanLab 配置

  • use_swanlab: 是否使用 SwanLab 进行实验跟踪,设置为 true 表示启用。

  • swanlab_project: SwanLab 项目名称,这里为 llamafactory

  • swanlab_run_name: 当前运行的名称,这里为 Qwen2.5-7B-Instruct

Eval 部分

  • val_size: 验证集的比例,这里设置为 0.1,表示使用 10% 的数据作为验证集。

  • per_device_eval_batch_size: 每个设备的验证批次大小,这里设置为 1。

  • eval_strategy: 验证策略,这里为 steps,表示每隔一定步数进行验证。

  • eval_steps: 每隔多少步进行一次验证,这里设置为 500。

 数据与文件对应

这几个地方要对应上

训练模型

在 LLaMA-Factory 目录下,输入以下命令启动微调脚本

llamafactory-cli train examples/train_qlora/qwen_lora_sft_bitsandbytes.yaml

最后结果

推理测试

### 使用 LLaMA-Factory 微调 Qwen2-VL 模型 #### 设置环境 为了成功微调 Qwen2-VL 模型,首先需要安装并配置好 LLaMA-Factory 的开发环境。这通常涉及创建虚拟环境、安装依赖库以及下载预训练模型权重文件[^1]。 ```bash git clone https://github.com/your-repo/llama-factory.git cd llama-factory pip install -r requirements.txt ``` #### 配置训练参数 接下来要定义具体的训练超参,比如批次大小(batch size)、学习率(learning rate),以及其他可能影响收敛性的因素。这些都可以通过修改 `config.yaml` 文件来调整。对于大多数情况,默认值已经能够提供不错的效果;但对于特定应用场景,则建议根据实际情况做适当优化。 #### 数据准备 准备好用于微调的数据集非常重要。确保数据已经被清洗干净,并转换成适合输入给定架构的形式。如果使用的是图像-文本对作为输入形式的话,还需要额外注意图片尺寸标准化等问题。此外,也可以考虑采用一些增强技术提高泛化能力。 #### 启动微调过程 当一切就绪之后就可以启动实际的微调流程了。这里给出一个简单的命令行例子展示如何指定路径和其他必要选项: ```bash CUDA_VISIBLE_DEVICES=0,1 python train.py \ --model_name_or_path /path/to/pretrained/model \ --train_file /path/to/training/data.jsonl \ --output_dir ./results \ --do_train \ --per_device_train_batch_size 8 \ --num_train_epochs 3 \ --save_strategy epoch \ --logging_dir ./logs \ --logging_steps 10 ``` 上述脚本假设读者拥有至少两张 GPU 卡来进行分布式训练以加速整个过程。当然,具体参数可以根据硬件条件和个人需求灵活变动。 #### 多GPU支持与LoRA应用实例 针对多GPU场景下的高效训练,可以借助 PyTorch 提供的相关工具轻松实现。另外值得注意的是,在某些情况下还可以引入低秩自适应 (Low-Rank Adaptation, LoRA)[^2] 技术进一步提升性能表现而不显著增加计算成本。 ```bash CUDA_VISIBLE_DEVICES=1 llamafactory-cli webchat \ --model_name_or_path [your path]/llm/Qwen/Qwen2-VL-7B-Instruct/ \ --adapter_name_or_path [your path]/llm/LLaMA-Factory/saves/qwen2_vl-7b/lora/sft-2/ \ --finetuning_type lora ``` 此段代码展示了如何加载已有的 LoRA 权重并对新任务快速适配。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值