微调Llama3-Chinese-8B-Instruct
微调是指在大规模预训练的基础模型上,使用特定领域或任务数据集进行少量迭代训练,以调整模型参数,提升其在特定任务上的表现。这种方法可以充分利用预训练模型的广泛知识,同时针对特定应用进行优化,达到更精准高效的效果。
Llama-3-Chinese-8B-Instruct
Llama-2已经表现的很出色了,但其仅使用了2万亿Token进行训练。相比之下,Llama-3使用了高达15万亿Token进行训练,这必将大幅提升其实力,令人高度期待。
Llama-3-Chinese-Instruct是基于Meta Llama-3的中文开源大模型,其在原版Llama-3的基础上使用了大规模中文数据进行增量预训练,并且使用精选指令数据进行精调,进一步提升了中文基础语义和指令理解能力,相比二代相关模型获得了显著性能提升。
GitHub:https://github.com/ymcui/Chinese-LLaMA-Alpaca-3
Unsloth
Unsloth是一个开源的大模型训练加速项目,可以显著提升大模型的训练速度(提高2-5 倍),减少显存占用(最大减少80%)
特点如下:
所有内核均采用OpenAI 的Triton语言编写
模型训练的精度损失为零
支持绝大多数主流的GPU设备
支持对LoRA和QLoRA的训练加速和高效显存管理
支持Flash Attention加速
开源训练速度最高达5倍,Unsloth Pro最高达30倍的训练速度
Unsloth与HuggingFace生态兼容,可以很容易将其与transformers、peft、trl等代码库进行结合
GitHub:https://github.com/unslothai/unsloth
文档:https://github.com/unslothai/unsloth/wiki
环境设置
创建虚拟环境
conda create --name unsloth_env python=3.10
conda activate unsloth_env
安装相关依赖
pip install "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"
pip install --no-deps "xformers<0.0.26" trl peft accelerate bitsandbytes
pip install modelscope
下载预训练模型
支持的预置4位量化模型,可实现4倍更快的下载速度和无OOM。更多模型请查看https://huggingface.co/unsloth
fourbit_models = [
"unsloth/mistral-7b-bnb-4bit",
"unsloth/mistral-7b-instruct-v0.2-bnb-4bit",
"unsloth/llama-2-7b-bnb-4bit",
"unsloth/gemma-7b-bnb-4bit",
"unsloth/gemma-7b-it-bnb-4bit", # Gemma 7b的Instruct版本
"unsloth/gemma-2b-bnb-4bit",
"unsloth/gemma-2b-it-bnb-4bit", # Gemma 2b的Instruct版本
"unsloth/llama-3-8b-bnb-4bit", # 15万亿令牌的Llama-3
]
这里不使用预置4位量化模型,使用modelscope下载Llama3-Chinese-8B-Instruct中文开源大模型
from modelscope import snapshot_download
model_dir = snapshot_download('FlagAlpha/Llama3-Chinese-8B-Instruct',cache_dir="/root/models")
或者使用 bash 下载:
mkdir -p /root/models
modelscope download --model 'qwen/Qwen2-7B-Instruct' --cache_dir '/root/models'
加载model、tokenizer
from unsloth import FastLanguageModel
import torch
model, tokenizer = FastLanguageModel.from_pretrained(
model_name = "/root/models/Llama3-Chinese-8B-Instruct", # 模型路径
max_seq_length = 2048, # 可以设置为任何值内部做了自适应处理
dtype = torch.float16, # 数据类型使用float16
load_in_4bit = True, # 使用4bit量化来减少内存使用
)
设置LoRA训练参数
LoRA (Low-Rank Adaptation)是一种大语言模型的低阶适配器技术,可在模型微调过程中,只更新整个模型参数的1%到10%左右,而不是全部参数。通过这种方式实现有效的模型微调和优化,提高了模型在特定任务上的性能。
model = FastLanguageModel.get_peft_model(
model,
r = 16, # 选择任何大于0的数字!建议使用8、16、32、64、128
target_modules = ["q_proj", "k_proj", "v_proj", "o_proj",
"gate_proj", "up_proj", "down_proj",],
lora_alpha = 16,
lora_dropout = 0, # 支持任何值,但等于0时经过优化
bias = "none", # 支持任何值,但等于"none"时经过优化
# [NEW] "unsloth" 使用的VRAM减少30%,适用于2倍更大的批处理大小!
use_gradient_checkpointing = "unsloth", # True或"unsloth"适用于非常长的上下文
random_state = 3407,
use_rslora = False, # 支持排名稳定的LoRA
loftq_config = None, # 和LoftQ
)
准备数据集
准备数据集其实就是指令集构建,LLM的微调一般指指令微调过程。所谓指令微调,就是使用指定的微调数据格式、形式。
训练目标是让模型具有理解并遵循用户指令的能力。因此在指令集构建时,应该针对目标任务,针对性的构建任务指令集。
这里使用alpaca格式的数据集,格式形式如下:

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



