05.大语言模型微调LLM Fine-tuning
任务概述
我们希望一个AI模型能够写唐诗,给AI前两行,我们希望它能继续写完其余部分:
微调之前,AI模型可能不擅长写唐诗:

在这个任务中,我们将教AI模型写唐诗。


常用参数说明
在使用LLM进行生成时,有一些超参数:
- temperature
- Top-k
- Top-p
- max_length
我们可以调整这些超参数来控制LLM的行为。例如,更长与更短;多样与静态
Temperature(温度值)
与输出的多样性相关,0.0 ≤ 温度值
温度越高,多样性越好

Top-K
LLM对每个单词做出决策时的选择数量。
Top-K 是一个正整数。

Top-P
top-p 又名 Nucleus Sampling(核采样)
与 top-k 固定选取前 k 个 tokens 不同,top-p 选取的 tokens 数量不是固定的,这个方法是设定一个概率阈值。
继续上面的例子,将 top-p 设定为 0.15,即选择前 15% 概率的 tokens 作为候选。如下图所示,United 和 Netherlands 的概率加起来为 15% ,所以候选词就是这俩,最后再从这些候选词里,根据概率分数,选择 united 这个词。
0.0 ≤ Top-P ≤ 1.0

Max_length
生成的标记序列的最大长度。
如果发现生成的句子似乎被截断了,请检查最大长度!
调整解码参数(高级)
鼓励您调整解码参数以生成更高质量的唐诗。

激活 GPU
由于您需要微调模型,必须激活 GPU 以使本次作业能在合理时间内完成(约 1~2 小时)

必读事项:
Colab 不保证免费用户能获得GPU资源(参考)。您可能会看到"无法连接GPU后端"的提示,这表示当前没有足够的GPU资源。遇到这种情况时,您可能需要:
- 等待一天(或更长时间)
- 或使用其他Google账号登录来完成作业
挂载 Google 云端硬盘
您必须挂载 Google 云端硬盘,以便将结果保存在其中。
- 运行下一个单元格
- 点击"连接到 Google 云端硬盘"(应该会弹出一个窗口)
- 登录您的账户并授予权限
from google.colab import drive
drive.mount('/content/drive')
安装依赖包
我们将安装并导入一些由他人开发的高质量工具包,以简化微调流程。
这些工具包组合起来覆盖了大模型微调的核心需求:从数据处理(datasets)、模型加载与训练(transformers、accelerate)、高效微调(peft)到资源优化(bitsandbytes)等环节。指定版本是为了确保各工具包之间的兼容性,避免因版本差异导致的错误。
# bitsandbytes:提供量化技术支持,可在低资源环境下运行大模型,减少内存占用
!pip install bitsandbytes==0.43.0
# datasets:Hugging Face的数据集工具包,用于加载、处理和管理各种微调数据集
!pip install datasets==2.10.1
# transformers:Hugging Face的核心工具包,提供预训练模型加载、分词器及微调API
!pip install transformers==4.38.2
# peft:参数高效微调工具包,支持LoRA等轻量级微调方法,减少训练参数
!pip install peft==0.9.0
# sentencepiece:用于处理亚词单元的分词工具,许多大模型(如T5、LLaMA)依赖它
!pip install sentencepiece==0.1.99
# accelerate:Hugging Face的分布式训练工具,支持多GPU、混合精度训练等
!pip install -U accelerate==0.28.0
# colorama:用于在终端输出彩色文本,便于区分不同类型的日志信息
!pip install colorama==0.4.6
# fsspec:文件系统规范工具,支持多种存储系统(如本地、云端)的文件操作
!pip install fsspec==2023.9.2
以下代码块大约需要 20 秒运行,但实际时间可能因 Colab 的运行状态而有所不同。
""" 建议不要修改本单元格中的代码 """
# 导入Python标准库,用于文件操作、系统交互、命令行参数解析、JSON处理等
import os
import sys
import argparse
import json
import warnings # 用于处理警告信息
import logging # 用于日志记录
# 忽略警告信息,减少输出干扰(在微调等长流程中常用)
warnings.filterwarnings("ignore")
# 导入PyTorch相关库,用于模型构建、训练和张量运算
import torch
import torch.nn as nn # 神经网络模块
# 导入bitsandbytes库,用于模型量化(减少内存占用)
import bitsandbytes as bnb
# 导入datasets库的工具,用于加载和处理数据集(支持从Hugging Face Hub或本地加载)
from datasets import load_dataset, load_from_disk
# 导入transformers和datasets库的顶层模块(可能用于版本检查或全局配置)
import transformers, datasets
# 导入Peft库的核心类,用于加载参数高效微调(如LoRA)的模型
from peft import PeftModel
# 导入colorama库,用于在终端输出彩色文本(增强日志可读性)
from colorama import *
# 导入tqdm,用于显示进度条(提升长任务的可视化体验)
from tqdm import tqdm
# 从transformers库导入大模型相关工具:
# AutoTokenizer:自动加载模型对应的分词器
# AutoConfig:自动加载模型配置
# AutoModelForCausalLM:自动加载因果语言模型(适用于文本生成任务)
# BitsAndBytesConfig:配置量化参数(如4bit/8bit量化)
from transformers import AutoTokenizer, AutoConfig, AutoModelForCausalLM, BitsAndBytesConfig
# 导入生成配置类,用于控制模型生成文本时的参数(如温度、最大长度等)
from transformers import GenerationConfig
# 从peft库导入高效微调相关工具:
# prepare_model_for_int8_training:准备8bit量化模型用于训练
# LoraConfig:配置LoRA(Low-Rank Adaptation)参数
# get_peft_model:将基础模型转换为支持参数高效微调的模型
# get_peft_model_state_dict:获取微调模型的状态字典(权重)
# prepare_model_for_kbit_training:准备k-bit(如4bit)量化模型用于训练
from peft import (
prepare_model_for_int8_training,
LoraConfig,
get_peft_model,
get_peft_model_state_dict,
prepare_model_for_kbit_training
)
附录-在不同步骤中选择适配器
在训练的各个阶段自由选择LORA适配器,并观察模型输出的变化。
在示例代码中,我们从最后的步骤选择适配器。
重新运行实验
如果你对实验结果不满意,你可能需要微调训练的参数。
按照以下步骤避免一些错误
点击“重新启动工作阶段”(“重新启动工作阶段”)”)

更改超参数或其他设置

运行以下幻灯片中显示的块








浙公网安备 33010602011771号