
一步步带你用LoRA微调大模型-执行篇
一、配置与安装
我在尝试运行Alpaca-LoRA工具给大模型做微调时,发现了准备篇中的一些方法存在问题。经过了反复摸索,有以下几点需要重新配置一下。
1. 由于https://huggingface.co/ 国内无法访问,需要预先从镜像站:https://hf-mirror.com/ 下载好模型文件,而且需要重新选择 baffo32/decapoda-research-llama-7B-hf 模型进行微调,因为这是Alpaca-LoRA工具的推荐模型,为了提高成功率,本次先选它。
2. 我们准备用huggingface_hub工具下载模型,先激活conda虚拟环境,在虚拟环境中安装。
pip install -U huggingface_hub
用huggingface-cli 下载,我们把模型文件放到 /home/abcde/models 目录,这里需要 huggingface token ,记得在指令末尾加上 --token hf_***, huggingface token需要在官网上注册申请。
$huggingface-cli download --resume-download baffo32/decapoda-research-llama-7B-hf --local-dir /home/abcde/models --local-dir-use-symlinks False --token hf_***
当然在网页上点击下载也是可行的,而且无需huggingface token。大家记得要把模型文件放在同一文件夹中。
3. 在虚拟环境中安装 peft, transformers, sentencepiece, gradi, scipy, bitsandbytes 这几个python包。
用虚拟环境中执行:
$pip install accelerate appdirs loralib black datasets fire peft==0.3.0 transformers==4.29.2 sentencepiece gradio==3.32.0 scipy bitsandbytes==0.37.2
执行结果:
(alpaca_lora) abcde@abcde:~/alpaca-lora$ pip install accelerate appdirs loralib black datasets fire peft==0.3.0 transformers==4.29.2 sentencepiece gradio==3.32.0 scipy bitsandbytes==0.37.2
Requirement already satisfied: accelerate in /home/abcde/miniconda3/envs/alpaca_lora/lib/python3.9/site-packages (0.34.2)
Requirement already satisfied: appdirs in /home/abcde/miniconda3/envs/alpaca_lora/lib/python3.9/site-packages (1.4.4)
Requirement already satisfied: loralib in /home/abcde/miniconda3/envs/alpaca_lora/lib/python3.9/site-packages (0.1.2)
Requirement already satisfied: black in /home/abcde/miniconda3/envs/alpaca_lora/lib/python3.9/site-packages (24.8.0)
Requirement already satisfied: datasets in /home/abcde/miniconda3/envs/alpaca_lora/lib/python3.9/site-packages (3.0.0)
Requirement already satisfied: fire in /home/abcde/miniconda3/envs/alpaca_lora/lib/python3.9/site-packages (0.6.0)
Collecting peft==0.3.0
Downloading peft-0.3.0-py3-none-any.whl.metadata (21 kB)
Collecting transformers==4.29.2
Downloading transformers-4.29.2-py3-none-any.whl.metadata (112 kB)
Requirement already satisfied: sentencepiece in /home/abcde/miniconda3/envs/alpaca_lora/lib/python3.9/site-packages (0.2.0)
- transformers 库用于加载、训练、保存模型
- peft 库则是用于帮助你使用LoRA的
- bitsandbytes 用于使用GPU资源训练模型
4. 在执行前,设置transformers、datasets库的离线模式,在SHELL中添加变量,在虚拟环境中执行。
HF_DATASETS_OFFLINE=1 TRANSFORMERS_OFFLINE=1
二、启动微调
完成上述安装与配置后,在conda建立的虚拟环境中,用以下指令启动微调,如果启动时还有各种报错,可能还是相关的Python包安装不正确导致,遇到问题也欢迎各位留言。
python finetune.py \
--base_model '/home/abcde/models' \
--data_path /home/abcde/data/trans_chinese_alpaca_data.json' \
--output_dir './AlpacaLora_model' \
--batch_size 128 \
--micro_batch_size 4 \
--num_epochs 3 \
--learning_rate 1e-4 \
--cutoff_len 512 \
--val_set_size 2000 \
--lora_r 8 \
--lora_alpha 16 \
--lora_dropout 0.05 \
--lora_target_modules '[q_proj,v_proj]' \
--train_on_inputs \
--group_by_length
参数简单说明如下:
--base_model : 模型文件存放文件夹,注意是文件夹名称,并非模型名称。
--data_path: 数据集文件名,包括数据集的完整路径与文件名称。
--output_dir: 微调结果输出文件夹,就是微调完成后的文件存放地。
--batch_size: 每次训练迭代中处理的样本总数,对训练的效率和稳定性有显著影响。
--micro_batch_size: 是微批次的大小,会通过梯度累积的方式来节省显存。值越大,占用的显存越高,请根据实际情况调整。
--num_epochs: 训练轮数,2~3个epoch基本上可以达到较好的效果
--learning_rate:训练时的学习率,`1e-4`即`0.0001`
--cutoff_len: 处理数据时将输入文本截断的最大长度,有助于控制内存消耗和计算成本。
--val_set_size: 用于验证的数据集的大小,有助于监控模型在未见数据上的表现。
--lora_r: 在LoRA适配器中使用的秩(rank)。秩决定了适配器中低秩矩阵的大小,从而影响模型的灵活性和需要训练的参数数量。
--lora_alpha: 定义了LoRA适配器的学习率缩放因子。
--lora_dropout:用于指定LoRA适配器中的dropout率。Dropout是一种正则化技术,用于防止模型过拟合。
--lora_target_modules:用于指定哪些模型组件(模块)将应用LoRA适配器。通过选择性地对模型的某些部分进行微调,可以减少训练参数的数量,从而提高微调的效率。
--train_on_inputs:决定是否在训练过程中同时更新模型的输入参数。如果设置为True,则模型的输入表示也会在训练过程中被更新。
--group_by_length:控制数据加载时是否根据序列长度对批次进行分组,如果设置为True,相似长度的序列将被分组在一起。
如果一切正常,你将看到以下画面,开始微调。
微调过程花了大概6小时50分钟,整个过程都用nvitop监控,我的RTX4090基本是全速开火的,核心温度飙升到80多度,整机功率500多w,机箱风扇全速开动,呼呼地喷着热气,比暖气机都好使,有点小兴奋,也有点小担心,温度会不会太高了,烧机了。最后还好,微调完成后,GPU核心温度慢慢降到60度以下的正常水平。看来机箱还有加强散热才行。
微调完成
三、小结
以上介绍的是Alpaca-Lora基于LLaMA(7B)大模型的微调方法,它的魅力在于能够在相对较短的时间内,用相对有限的GPU资源完成模型的优化,它是一种大模型优化的重要方法,为打造企业和个人的私有大模型提供了一种高效的方法。
本文转载自码农随心笔记,作者:码农随心笔记
