一.概述

本教程旨在帮助用户快速上手使用 Stanford Alpaca 模型进行指令跟随任务的微调与应用,特别是使用 52K指令数据集进行训练与推理。

Stanford Alpaca 是基于 LLaMA 7B 模型 微调的指令跟随模型,广泛应用于各种自然语言处理任务,如对话生成、文本理解等。本教程将指导用户完成从环境配置、数据准备、模型训练到推理预测的全过程。无论是初学者还是有一定经验的研究人员,都能通过本教程快速掌握 Stanford Alpaca 模型的使用,并能够在自己的项目中进行定制化训练和预测。

本教程使用:

数据集:52K指令数据集(存储在 alpaca_data.json 文件中)

训练模型: LLaMA 7B 微调后的 Stanford Alpaca 模型

通过本教程,用户将:

  • 学会如何准备训练数据,使用 generate_instruction.py 脚本生成任务指令数据集
  • 配置训练环境,使用 train.py 进行模型微调
  • 了解如何下载和加载预训练的模型权重,以及如何利用 Download.py 脚本进行模型和分词器的下载
  • 熟悉训练过程中所需的参数设置,如何进行模型训练和评估

本教程适合希望快速上手 Stanford Alpaca 模型的开发者和研究人员,帮助用户在实际应用中进行定制化微调和任务推理。

*同时,本教程在此提醒读者,此项目对GPU配置要求很高!在本教程撰写过程中实测使用的 GPU 为 A100-PCIE-40GB 4,采用参数 --per_device_train_batch_size 与 --per_device_eval_batch_size均为 2 的情况下几乎用掉了 95% 以上的显存,并且训练时间长达17h 。**

*推荐使用 H20-NVLink(96GB) 4卡,参数 --per_device_train_batch_size 与 --per_device_eval_batch_size均为 8 ,实测训练过程20分钟左右,并且显存利用率达到80%以上。**

二.快速开始

2.1 环境准备

本教程运行硬件环境:

类别 详细信息
CPU 64 vCPU AMD EPYC 9K84 96-Core Processor
GPU *H20-NVLink 4**
GPU 显存 80GB
CUDA 版本 11.8
操作系统 Ubuntu 18.04.5 LTS (Bionic Beaver)
Python 版本 3.10.15
PyTorch 版本 2.5.1

创建一个 conda 环境 spa ,并激活环境

conda create -n sap python=3.10
conda activate sap

2.2 从资源站下载实例源码

mkdir run-stanford_alpaca
cd run-stanford_alpaca
# 从aheadai资源站下载资源包
wget https://mirrors.aheadai.cn/scripts/stanford_alpaca_example.zip

解压资源包

unzip stanford_alpaca_example.zip
cd stanford_alpaca_example

确保解压后文件结构如下:

./stanford_alpaca_example/
    ├── configs/                  
    ├── Model/                    # 数据保存文件夹,存放下载的模型、权重等
    ├── alpaca_data.json          # 数据集文件,包含训练数据
    ├── Download.py               # 脚本文件,用于下载分词器配置及模型权重
    ├── generate_instruction.py   # 数据集处理模块,用于生成任务指令或数据预处理
    ├── seed_tasks.jsonl          # 数据文件,包含任务的JSONL格式数据,是任务的种子数据
    ├── weight_diff.py            # 脚本文件,用于权重差异分析或模型权重处理
    ├── WEIGHT_DIFF_LICENSE       
    ├── utils.py                  # 工具函数,提供各种辅助功能(如数据加载、处理等)
    ├── train.py                  # 训练脚本,主训练文件,包含模型训练的具体实现
    └── requirements.txt          # 依赖文件,列出项目所需的Python库和包

2.3 安装其他依赖

pip install -r requirements.txt --index-url https://pypi.mirrors.ustc.edu.cn/simple

三.训练教程

3.1下载配置文件

本教程提供两种配置文件下载方法:

3.11 连接HuggingFace

通过 Python 脚本,直接连接 https://huggingface.co 下载相应配置文件并储存到本地以供使用。此方法需具备科学上网能力。

python Download.py

运行脚本会将分词器及预训练模型权重数据放入 ./Model 文件夹,其中 ./Model 路径可根据需求修改。

# 设置镜像站点 URL
#os.environ['HF_ENDPOINT'] = 'https://hf-mirror.com' # 使用镜像站点
# 设置模型名称(确保没有空格)
model_name = "tatsu-lab/alpaca-7b-wdiff" 
# 下载并加载模型
tokenizer = AutoTokenizer.from_pretrained(model_name, cache_dir='./Model')
model = AutoModelForCausalLM.from_pretrained(model_name, cache_dir='./Model')

通过此方法加载配置文件需确认文件结构决定是否调整代码 Train.py,下载完成后的文件结构如下:

./Model/models--tatsu-lab--alpaca-7b-wdiff/
    ├── blobs/  
    ├── refs/             
    └── snapshots 
            └──8648f73a244a70f4e39884e0f7670fe362aa3cf3
                                                      └──'tokenizer配置文件'/'PyTorch模型权重文件'
3.12 HuggingFace镜像站

首先设置 HF_ENDPOINT 环境变量, HF_ENDPOINT 变量是 HF 相关库官方支持的一个环境变量,设置后,相关库会尊重该变量指定的主机名,替换 huggingface.co 域名进行模型、数据集的下载和上传,从而做到无需修改 pythontransformers 代码,即可利用镜像站来加载模型。

Bash 窗口:

export HF_ENDPOINT="https://hf-mirror.com"

写入到~/.bashrc中:

echo 'export HF_ENDPOINT="https://hf-mirror.com"' >> ~/.bashrc

修改 Download.py 文件:

# 设置镜像站点 URL
os.environ['HF_ENDPOINT'] = 'https://hf-mirror.com' # 使用镜像站点
# 设置模型名称(确保没有空格)
model_name = "tatsu-lab/alpaca-7b-wdiff" 
# 下载并加载模型
tokenizer = AutoTokenizer.from_pretrained(model_name, cache_dir='./Model')
model = AutoModelForCausalLM.from_pretrained(model_name, cache_dir='./Model')

然后下载:

python Download.py

同样的,需要注意一下相关路径,因为后续开始训练需要正确使用路径。

配置文件下载成功则会有以下输出:

Model downloaded and cached in ...

表示下载完成!

3.2 模型训练

3.21 创建训练脚本

创建脚本 train.sh ,使用 vim 工具。

vim train.sh

输入指令:

#!/bin/bash

# 使用 accelerate 启动多GPU训练
accelerate launch --num_processes 4 --multi_gpu --mixed_precision bf16 train.py \
    --model_name_or_path ./Modle/models--tatsu-lab--alpaca-7b-wdiff/snapshots/8648f73a244a70f4e39884e0f7670fe362aa3cf3 \
    --data_path ./alpaca_data.json \
    --output_dir ./out/ \
    --num_train_epochs 1 \
    --per_device_train_batch_size 2 \
    --per_device_eval_batch_size 2 \
    --gradient_accumulation_steps 8 \
    --evaluation_strategy "no" \
    --save_strategy "steps" \
    --save_steps 2000 \
    --save_total_limit 1 \
    --learning_rate 2e-5 \
    --weight_decay 0. \
    --warmup_ratio 0.03 \
    --lr_scheduler_type "cosine" \
    --logging_steps 1 \
    --fsdp "full_shard auto_wrap" \
    --fsdp_transformer_layer_cls_to_wrap 'LlamaDecoderLayer' \
    --tf32 True

注: vim 工具是 Linux 中非常简单方便地编辑工具,推荐了解学习哦。

3.22 脚本参数解释

关于训练脚本使用的参数解释如下:

--num_processes N            # 设置使用的进程数(N是进程数,这里为4)
--multi_gpu                   # 启用多GPU训练
--mixed_precision PRECISION  # 设置混合精度(例如,bf16)
--model_name_or_path MODEL   # 设置模型的路径或名称(例如,./Modle/models--tatsu-lab--alpaca-7b-wdiff/snapshots/8648f73a244a70f4e39884e0f7670fe362aa3cf3)
--data_path PATH             # 设置训练数据的路径(例如,./alpaca_data.json)
--output_dir DIR             # 设置输出目录(例如,./out/)
--num_train_epochs E         # 设置训练的总轮数(例如,1轮)
--per_device_train_batch_size B # 设置每个设备的训练批次大小(例如,2)
--per_device_eval_batch_size B  # 设置每个设备的评估批次大小(例如,2)
--gradient_accumulation_steps G  # 设置梯度累积的步数(例如,8)
--evaluation_strategy STRATEGY # 设置评估策略(例如,"no"表示不进行评估)
--save_strategy STRATEGY     # 设置保存策略(例如,"steps"表示按步保存)
--save_steps S               # 设置保存模型的步数间隔(例如,2000步)
--save_total_limit L         # 设置保存模型的最大数量(例如,1个模型)
--learning_rate LR           # 设置学习率(例如,2e-5)
--weight_decay WD            # 设置权重衰减(例如,0)
--warmup_ratio R             # 设置学习率预热的比例(例如,0.03)
--lr_scheduler_type TYPE     # 设置学习率调度类型(例如,"cosine")
--logging_steps S            # 设置每隔多少步记录一次日志(例如,1步)
--fsdp STRATEGY              # 启用全参数分布式并行(FSDP),并设置策略(例如,"full_shard auto_wrap")
--fsdp_transformer_layer_cls_to_wrap LAYER  # 设置要包装的 Transformer 层类型(例如,'LlamaDecoderLayer')
--tf32                       # 启用 TensorFloat-32 精度(仅在支持的硬件上有效,如 NVIDIA A100、H100)

其中 --model_name_or_path MODEL 是在 3.1 部分中的示例位置;--num_processes N 取决于读者可以使用的 GPU 数量。

3.23 模型训练开始

Bash 中运行脚本:

./train.sh

如果遇到报错:

bash: ./train.sh: Permission denied

则执行 chmod +x train.sh 命令给文件 train.sh 添加执行权限:

chmod +x train.sh

再次运行应该就成功了!

想要获取模型更多信息可以查看目录 ./wandb/ 下相关输出日志信息,读者也可以自己编写对象脚本,以输出需要的日志信息。

本文系作者 @ admin 原创发布在 文档中心 | AheadAI ,未经许可,禁止转载。