Bootstrap

小模型干大事情,基于LLaMA-Factory+Lora入门级微调开源AI模型

开源模型

说到开源模型就得提起huggingface

02ac02379150c70c32cf5a4a30391d0f.png

它是专注于人工智能模型的开源社区,里面提供了大量的预训练模型和数据集。当然上面也提供了一些可以直接调用大模型,如聊天、绘画等功能。

下图是 google 热度趋势,一直处于上升的趋势。

 

fbc15438eeafcd0924d4bcdc6e31e5d0.png

目前huggingface上已经集集了1,133,267 个开源模型。

 

3a1a7e83d1fc8573318e5a19342a77c4.png

 

训练方案

全模型训练

从头开始训练一个模型,所有模型的参数都会被初始化并根据训练数据进行更新。最初使用的就是直接通过transformers 对模型训练。

  • Ollama+Llama3.2
  • Python 3.8+
  • PyTorch
  • Hugging Face Transformers
  • Datasets
  • CUDA
from transformers import LlamaForCausalLM, AutoTokenizer, Trainer, TrainingArguments, AutoModelForCausalLM, \
    AutoTokenizer
from datasets import load_dataset

# 加载模型和分词器
model_name = "Llama-3.2-1B"  # 替换为你的模型名称
model = AutoModelForCausalLM.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name, legacy=False)

# 检查词汇文件路径
print(type(tokenizer))

# 确保分词器有 pad_token
if tokenizer.pad_token is None:
    tokenizer.add_special_tokens({'pad_token': '[PAD]'})
    model.resize_token_embeddings(len(tokenizer))

# 加载数据集
dataset = load_dataset("json", data_files="training_data.json")
........

训练后的模型会非常的大,比如原本 2G 的模型,完全训练后会有 4G 多,当然这已经是删除了检查点后的大小。比如量化参数或压缩模型等手段来缩小模型。

 

微调模型

在预训练模型的基础上,使用特定任务的数据对模型进行进一步训练,以适应新的任务。

一般微调模型会使用 Lora,除了 LoRA,Adapter Layers、Freeze、Prefix Tuning、Prompt Tuning 、BitFit及UniPELT 都是类似的微调技术。

训练模型

我本地环境是 Windows 11,因为机器上有NVIDlA 显卡所以直接在 Windows 上训练模型。

 

6c7a393cb93e03a3d6712e3c3b09a79c.png

我选择的是 Github 34.6k star 的 LLaMA-Factory 来微调Qwen2-0.5B模型,这个模型比较小,

以下是详细的安装与使用步骤:

1. 环境准备

1.1 安装Python

安装Python 3.8或更高版本。你可以从Python官网下载并安装。

1.2 安装CUDA

从NVIDIA官网下载并安装适合显卡的CUDA版本。

nvidia-smi

这里支持的 CUDA<=12.6 就可以

 

3e185e27f3df93f0199e772d67e57a1c.png

可以在 CUDA 里找到 12.6.0 的版本

 

0c62bb1aa4692c428d79b5a2a2f78f2f.png

nvcc -V

说明已经安装成功了

 

4aea6edf92d4015fac6b50cb0056d9e0.png

2. 安装LLaMA-Factory

2.1 克隆LLaMA-Factory仓库

打开命令行工具(如PowerShell或CMD),运行以下命令克隆LLaMA-Factory仓库:

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

2.2 创建虚拟环境(可选)

虽然是可行,一般初次安装可能会把环境搞坏,所以为了隔离环境,建议创建一个虚拟环境,如果搞坏了可以创建个新的虚拟环境:

python -m venv llama_factory_env
.\llama_factory_env\Scripts\activate

2.3 安装依赖

在虚拟环境中安装所需的Python依赖:

pip install -r requirements.txt

 

安装一般来说就是下载不了依赖的问题,

另外还有一个比较需要 注意 的问题就是,llamafactory-cli webui常常会报以下错,webui 打不开

RuntimeError: Failed to import trl.trainer.ppo_config because of the following error (look up to see its traceback):
No module named 'tyro'

怎么重装安装都没有用,后面在 github issues 里找到了一哥们的解决办法

pip install tyro==0.8.14

最后启动图形界面

llamafactory-cli webui

3. 下载Qwen2-0.5B模型

3.1 下载模型

你可以从Hugging Face或其他模型仓库下载Qwen2-0.5B模型。假设你已经下载了模型文件并将其放在models目录下。

 

a00e0b7ba33a3f8913f60a9f37f316b9.png

4. 配置LLaMA-Factory

4.1 配置文件

可以直接在页面上配置参数,一般来说默认就可以。

 

9f832aba24461f26e79e3c3839092c33.png

这里有比较需要注意的地方就是如果按页面上默认的配置训练出来的模型没有效果,就可以尝试调整一些参数

 

aedcd7a75d0c4ffe4a8c522178d741eb.png

大家也可以把自己 ok 的训练参数保存下来,如下图

 

628fbcdcd2918c816ee9ab3101e70d43.png

以下就是 yaml 文件内容

top.booster: auto
top.checkpoint_path:
- train_2024-11-20-16-03-49
top.finetuning_type: lora
top.model_name: Qwen2-0.5B
top.quantization_bit: none
top.quantization_method: bitsandbytes
top.rope_scaling: none
top.template: default
train.additional_target: ''
train.badam_mode: layer
train.badam_switch_interval: 50
train.badam_switch_mode: ascending
train.badam_update_ratio: 0.05
train.batch_size: 2
train.compute_type: fp16
train.create_new_adapter: false
train.cutoff_len: 1024
train.dataset:
- identity
train.dataset_dir: data
train.ds_offload: false
train.ds_stage: none
train.extra_args: '{"optim": "adamw_torch"}'
train.freeze_extra_modules: ''
train.freeze_trainable_layers: 2
train.freeze_trainable_modules: all
train.galore_rank: 16
train.galore_scale: 0.25
train.galore_target: all
train.galore_update_interval: 200
train.gradient_accumulation_steps: 16
train.learning_rate: 1e-4
train.logging_steps: 5
train.lora_alpha: 32
train.lora_dropout: 0
train.lora_rank: 16
train.lora_target: ''
train.loraplus_lr_ratio: 0
train.lr_scheduler_type: cosine
train.mask_history: false
train.max_grad_norm: '1.0'
train.max_samples: '100000'
train.neat_packing: false
train.neftune_alpha: 0
train.num_train_epochs: '100.0'
train.packing: false
train.ppo_score_norm: false
train.ppo_whiten_rewards: false
train.pref_beta: 0.1
train.pref_ftx: 0
train.pref_loss: sigmoid
train.report_to: false
train.resize_vocab: false
train.reward_model: null
train.save_steps: 100
train.shift_attn: false
train.train_on_prompt: false
train.training_stage: Supervised Fine-Tuning
train.use_badam: false
train.use_dora: false
train.use_galore: false
train.use_llama_pro: false
train.use_pissa: false
train.use_rslora: false
train.val_size: 0
train.warmup_steps: 0

 

4.2 数据准备

将训练数据放在data目录下或直接使用 data 目录下由LLaMA-Factory 提供的示例训练数据,需要把示例数据中的变量替换成自己的内容。

 

5d98ffe8d101d845d40f8341ed27d000.png

5. 开始微调

5.1 启动微调

在图形界面中,点击“开始训练”按钮,LLaMA-Factory将开始使用LoRA方法微调Qwen2-0.5B模型。

 

29c124bf24cfdd54bd67d2429a155bb9.png

5.2 监控训练过程

你可以在图形界面中实时监控训练过程,查看损失、学习率等指标。

 

a7da1c49f39f10fa2d0f72dfb8730ef7.png

训练时触发GPU的占用

 

3112a0fd516a8d8a446942a56bb04aa0.png

6. 使用微调后的模型

6.1 保存模型

训练完成后,微调后的模型将保存在输出目录里,使用时直接在检查点路径里选择,文件命名是以当时训练的时间来命名

 

709fe3234e59beec29e422a15bb07eee.png

6.2 使用微调后的模型

直接使用LLaMA-Factory 图形界面里的 "Chat"来验证微调后的效果

 

28e71a7e08eab8859c404aa7843a582a.png

我是栈江湖,如果你喜欢此文章,不要忘记点赞+关注

 

 

 

;