unsloth入门指南 - 加速大语言模型微调2-5倍的开源工具
unsloth是一个功能强大的开源工具,可以显著加速大语言模型的微调过程。它支持Llama 3.1、Mistral、Phi-3和Gemma等主流大语言模型,能够将微调速度提高2-5倍,同时减少80%的内存使用。本文将全面介绍unsloth的主要特性、安装方法和使用教程,帮助读者快速掌握这个LLM微调利器。
主要特性
unsloth具有以下几个突出特点:
- 显著提升微调速度:比常规方法快2-5倍
- 大幅降低内存占用:节省80%内存
- 保持模型精度:不会造成精度损失
- 支持主流模型:Llama 3.1、Mistral、Phi-3、Gemma等
- 易于使用:提供beginner-friendly的Colab notebook
- 开源免费:GitHub上完全开源
安装方法
unsloth提供了pip和conda两种安装方式:
pip安装:
pip install --upgrade pip
pip install "unsloth[cu121-torch240] @ git+https://github.com/unslothai/unsloth.git"
conda安装:
conda create --name unsloth_env python=3.11 pytorch-cuda=12.1 pytorch cudatoolkit xformers -c pytorch -c nvidia -c xformers -y
conda activate unsloth_env
pip install "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"
pip install --no-deps trl peft accelerate bitsandbytes
使用教程
unsloth的使用非常简单,主要分为以下几个步骤:
- 导入必要的库:
from unsloth import FastLanguageModel
from unsloth import is_bfloat16_supported
import torch
from trl import SFTTrainer
from transformers import TrainingArgumentsrom datasets import load_dataset
- 加载预训练模型:
model, tokenizer = FastLanguageModel.from_pretrained(
model_name = "unsloth/llama-3-8b-bnb-4bit",
max_seq_length = 2048,
dtype = None,
load_in_4bit = True,
)
- 应用LoRA进行微调:
model = FastLanguageModel.get_peft_model(
model,
r = 16,
target_modules = ["q_proj", "k_proj", "v_proj", "o_proj",
"gate_proj", "up_proj", "down_proj",],
lora_alpha = 16,
lora_dropout = 0,
bias = "none",
use_gradient_checkpointing = "unsloth",
random_state = 3407,
max_seq_length = 2048,
)
- 开始训练:
trainer = SFTTrainer(
model = model,
train_dataset = dataset,
dataset_text_field = "text",
max_seq_length = 2048,
tokenizer = tokenizer,
args = TrainingArguments(
per_device_train_batch_size = 2,
gradient_accumulation_steps = 4,
warmup_steps = 10,
max_steps = 60,
fp16 = not is_bfloat16_supported(),
bf16 = is_bfloat16_supported(),
logging_steps = 1,
output_dir = "outputs",
optim = "adamw_8bit",
seed = 3407,
),
)
trainer.train()
使用unsloth可以大大加速LLM的微调过程,同时降低资源消耗。它为个人开发者和小团队提供了一个强大而易用的工具,让LLM的定制化变得更加高效和经济。
更多资源
通过以上介绍,相信读者已经对unsloth有了全面的了解。这个强大的开源工具为LLM的微调提供了新的可能,值得每一位NLP从业者尝试和探索。