LLMs之unsloth:unsloth的简介、安装和使用方法、案例应用之详细攻略

LLMs之unsloth:unsloth的简介、安装和使用方法、案例应用之详细攻略

目录

unsloth的简介

0、特点和功能:

特点

功能

1、免费微调

2、Unsloth.ai新闻

3、链接和资源

4、主要特征

5、性能基准测试

unsloth的安装和使用方法

1、安装说明

Conda安装

Pip 安装

通过以下方式查找您的 CUDA 版本

对于 Pytorch 2.1.0:您可以通过 Pip 更新 Pytorch(互换 cu121 / cu118)。

对于 Pytorch 2.1.1:对较新的 RTX 30xx GPU 或更高版本使用“ampere”路径。

对于 Pytorch 2.2.0:对较新的 RTX 30xx GPU 或更高版本使用“ampere”路径。

如果出现错误,请先尝试以下操作,然后返回步骤 1:

对于 Pytorch 2.2.1:

要解决安装问题,请尝试以下操作(全部必须成功)。 Xformers 应该大部分都可用

2、文档

DPO 支持

3、详细的基准测试表

Llama-Factory 第三方基准测试

流行模型之间的性能比较

Mistral 7b

CodeLlama 34b

1 Tesla T4

2 Tesla T4s via DDP

Tesla T4 GPU 上的性能比较:

unsloth的案例应用

LLMs之LLaMA3:基于Colab平台(采用T4 GPU+至少37G)采用中文语料数据利用unsloth框架(速度更快/量化功能)并采用LoRA进行微调LLaMA-3-8b(合并原始模型和LoRA模型)同时进行4位量化(16位的hf格式→16位的gguf格式→4位的gguf格式)最后将模型导出到本地


unsloth的简介

unsloth微调Llama 3, Mistral和Gemma速度快2-5倍,内存减少80% !unsloth是一个开源项目,它可以比HuggingFace快2-5倍地微调Llama 3、Mistral和Gemma语言模型,同时内存消耗减少80%。

官网地址GitHub - unslothai/unsloth: Finetune Llama 3, Mistral & Gemma LLMs 2-5x faster with 80% less memory

0、特点和功能:

特点

所有笔记本都是初学者友好的,可以加入自己的数据集,点击"Run All",即可获得速度更快的微调模型。
支持Llama 3、Mistral、Gemma等几个知名LLM,可以实现更快和更节省内存的微调。
所有的核心代码都用OpenAI开发的Triton编写,确保NumPy一致性。

功能

微调预训练模型
支持HuggingFace的Trainer、SFTTrainer等训练循环
支持 continuing pretraining和文本完成功能
支持DPO直接偏好优化算法

1、免费微调

所有笔记本都是初学者友好的!添加你的数据集,点击“全部运行”,你会得到一个2倍快的微调模型,可以导出到GGUF, vLLM或上传到Hugging Face。

Unsloth supportsFree NotebooksPerformanceMemory use
Llama 3 (8B)▶️ Start for free2x faster60% less
Mistral (7B)▶️ Start for free2.2x faster73% less
Gemma (7B)▶️ Start for free2.4x faster71% less
ORPO▶️ Start for free1.9x faster43% less
DPO Zephyr▶️ Start for free1.9x faster43% less
Phi-3 (3.8B)▶️ Start for free2x faster50% less
TinyLlama▶️ Start for free3.9x faster74% less
  • 与 FA2 + Hugging Face 组合进行基准比较。
  • 适用于 Llama-3 8b、Gemma 7b、Mistral 7b 的 Kaggle 笔记本
  • 这款会话笔记本对于 Llama-3 非常有用。 以及 Mistral 7b 的 ChatML。
  • 此文本完成笔记本用于持续预训练/原始文本。
  • Benchmarking compared to FA2 + Hugging Face combined.
  • Kaggle Notebooks for Llama-3 8bGemma 7bMistral 7b
  • This conversational notebook is useful for Llama-3. And ChatML for Mistral 7b.
  • This text completion notebook is for continued pretraining / raw text.

2、Unsloth.ai新闻

  • 📣 新! Llama-3 8b 现在可以使用了! Llama-3 70b 也可以(更改笔记本中的型号名称)。
  • 📣 新! ORPO 支持就在这里!
  • 📣 新! Phi-3 3.8b 支持就在这里!
  • 📣 新! 我们将内存使用量进一步减少了 30%,现在支持使用 4 倍长的上下文窗口对 LLM 进行微调! 如果您使用我们的笔记本电脑,则无需进行任何更改。 要启用,只需更改 1 行:
    model = FastLanguageModel.get_peft_model( model, use_gradient_checkpointing = "unsloth", # <<<<<<< )
  • 📣CodeGemma 现在可与 Gemma 7b 和 Gemma 2b 一起使用
  • 📣 我们所有模型的推理速度提高了 2 倍
model = FastLanguageModel.get_peft_model(
    model,
    use_gradient_checkpointing = "unsloth", # <<<<<<<
)

3、链接和资源

TypeLinks
📚 Wiki & FAQRead Our Wiki
​编辑  Twitter (aka X)Follow us on X
📜 DocumentationRead The Doc
💾 Installationunsloth/README.md
🥇 BenchmarkingPerformance Tables
🌐 Released ModelsUnsloth Releases
✍️ BlogRead our Blogs

4、主要特征

  • 所有内核均采用 OpenAI 的 Triton 语言编写。 手动反向传播引擎。
  • 精度损失为 0% - 无近似方法 - 全部精确。
  • 没有改变硬件。 自 2018 年起支持 NVIDIA GPU。 最低 CUDA 功能 7.0(V100、T4、Titan V、RTX 20、30、40x、A100、H100、L40 等)检查您的 GPU! GTX 1070、1080 可以工作,但速度很慢。
  • 通过 WSL 在 Linux 和 Windows 上运行。
  • 通过位和字节支持 4 位和 16 位 QLoRA / LoRA 微调
  • 开源训练速度提高了 5 倍 - 请参阅 Unsloth Pro 以获得高达 30 倍的训练速度!
  • 如果您使用 Unsloth 训练了模型,则可以使用这个很酷的贴纸!

5、性能基准测试

  • 有关可重复基准测试表的完整列表,请访问我们的网站, go to our website
1 A100 40GB🤗Hugging FaceFlash Attention🦥Unsloth Open Source🦥Unsloth Pro
Alpaca1x1.04x1.98x15.64x
LAION Chip21x0.92x1.61x20.73x
OASST1x1.19x2.17x14.83x
Slim Orca1x1.18x2.22x14.82x
Free Colab T4Dataset🤗Hugging FacePytorch 2.1.1🦥Unsloth🦥 VRAM reduction
Llama-2 7bOASST1x1.19x1.95x-43.3%
Mistral 7bAlpaca1x1.07x1.56x-13.7%
Tiny Llama 1.1bAlpaca1x2.06x3.87x-73.8%
DPO with ZephyrUltra Chat1x1.09x1.55x-18.6%

unsloth的安装和使用方法

1、安装说明

Conda安装

选择 pytorch-cuda=11.8(对于 CUDA 11.8)或 pytorch-cuda=12.1(对于 CUDA 12.1)。 如果您有mamba ,请使用mamba 而不是conda 来更快地解决问题。 请参阅此 Github 问题以获取有关调试 Conda 安装的帮助。

conda create --name unsloth_env python=3.10
conda activate unsloth_env

conda install pytorch-cuda=<12.1/11.8> pytorch cudatoolkit xformers -c pytorch -c nvidia -c xformers

pip install "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"

pip install --no-deps trl peft accelerate bitsandbytes

Pip 安装

如果您有 Anaconda,请勿使用此功能。 你必须使用 Conda 安装方法,否则东西会崩溃。

通过以下方式查找您的 CUDA 版本
import torch; 
torch.version.cuda
对于 Pytorch 2.1.0:您可以通过 Pip 更新 Pytorch(互换 cu121 / cu118)。

前往 PyTorch 了解更多信息。 选择 cu118(适用于 CUDA 11.8)或 cu121(适用于 CUDA 12.1)。 如果您有 RTX 3060 或更高版本(A100、H100 等),请使用“安培”路径。 对于 Pytorch 2.1.1:转到步骤 3。对于 Pytorch 2.2.0:转到步骤 4。

pip install --upgrade --force-reinstall --no-cache-dir torch==2.1.0 triton \
  --index-url https://download.pytorch.org/whl/cu121
pip install "unsloth[cu118] @ git+https://github.com/unslothai/unsloth.git"
pip install "unsloth[cu121] @ git+https://github.com/unslothai/unsloth.git"
pip install "unsloth[cu118-ampere] @ git+https://github.com/unslothai/unsloth.git"
pip install "unsloth[cu121-ampere] @ git+https://github.com/unslothai/unsloth.git"

对于 Pytorch 2.1.1:对较新的 RTX 30xx GPU 或更高版本使用“ampere”路径。
pip install --upgrade --force-reinstall --no-cache-dir torch==2.1.1 triton \
  --index-url https://download.pytorch.org/whl/cu121
pip install "unsloth[cu118-torch211] @ git+https://github.com/unslothai/unsloth.git"
pip install "unsloth[cu121-torch211] @ git+https://github.com/unslothai/unsloth.git"
pip install "unsloth[cu118-ampere-torch211] @ git+https://github.com/unslothai/unsloth.git"
pip install "unsloth[cu121-ampere-torch211] @ git+https://github.com/unslothai/unsloth.git"
对于 Pytorch 2.2.0:对较新的 RTX 30xx GPU 或更高版本使用“ampere”路径。
​​​​​​​pip install --upgrade --force-reinstall --no-cache-dir torch==2.2.0 triton \
  --index-url https://download.pytorch.org/whl/cu121
pip install "unsloth[cu118-torch220] @ git+https://github.com/unslothai/unsloth.git"
pip install "unsloth[cu121-torch220] @ git+https://github.com/unslothai/unsloth.git"
pip install "unsloth[cu118-ampere-torch220] @ git+https://github.com/unslothai/unsloth.git"
pip install "unsloth[cu121-ampere-torch220] @ git+https://github.com/unslothai/unsloth.git"
如果出现错误,请先尝试以下操作,然后返回步骤 1:
pip install --upgrade pip
对于 Pytorch 2.2.1:
# RTX 3090, 4090 Ampere GPUs:
pip install "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"
pip install --no-deps packaging ninja einops flash-attn xformers trl peft accelerate bitsandbytes

# Pre Ampere RTX 2080, T4, GTX 1080 GPUs:
pip install "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"
pip install --no-deps xformers trl peft accelerate bitsandbytes
要解决安装问题,请尝试以下操作(全部必须成功)。 Xformers 应该大部分都可用
nvcc
python -m xformers.info
python -m bitsandbytes

​​​​​​​​​​​​

2、文档

  • Go to our Wiki page for saving to GGUF, checkpointing, evaluation and more!
  • We support Huggingface's TRL, Trainer, Seq2SeqTrainer or even Pytorch code!
  • We're in 🤗Hugging Face's official docs! Check out the SFT docs and DPO docs!
from unsloth import FastLanguageModel
import torch
from trl import SFTTrainer
from transformers import TrainingArguments
from datasets import load_dataset
max_seq_length = 2048 # Supports RoPE Scaling interally, so choose any!
# Get LAION dataset
url = "https://huggingface.co/datasets/laion/OIG/resolve/main/unified_chip2.jsonl"
dataset = load_dataset("json", data_files = {"train" : url}, split = "train")

# 4bit pre quantized models we support for 4x faster downloading + no OOMs.
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", # Instruct version of Gemma 7b
    "unsloth/gemma-2b-bnb-4bit",
    "unsloth/gemma-2b-it-bnb-4bit", # Instruct version of Gemma 2b
    "unsloth/llama-3-8b-bnb-4bit", # [NEW] 15 Trillion token Llama-3
    "unsloth/Phi-3-mini-4k-instruct-bnb-4bit",
] # More models at https://huggingface.co/unsloth

model, tokenizer = FastLanguageModel.from_pretrained(
    model_name = "unsloth/llama-3-8b-bnb-4bit",
    max_seq_length = max_seq_length,
    dtype = None,
    load_in_4bit = True,
)

# Do model patching and add fast LoRA weights
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, # Supports any, but = 0 is optimized
    bias = "none",    # Supports any, but = "none" is optimized
    # [NEW] "unsloth" uses 30% less VRAM, fits 2x larger batch sizes!
    use_gradient_checkpointing = "unsloth", # True or "unsloth" for very long context
    random_state = 3407,
    max_seq_length = max_seq_length,
    use_rslora = False,  # We support rank stabilized LoRA
    loftq_config = None, # And LoftQ
)

trainer = SFTTrainer(
    model = model,
    train_dataset = dataset,
    dataset_text_field = "text",
    max_seq_length = max_seq_length,
    tokenizer = tokenizer,
    args = TrainingArguments(
        per_device_train_batch_size = 2,
        gradient_accumulation_steps = 4,
        warmup_steps = 10,
        max_steps = 60,
        fp16 = not torch.cuda.is_bf16_supported(),
        bf16 = torch.cuda.is_bf16_supported(),
        logging_steps = 1,
        output_dir = "outputs",
        optim = "adamw_8bit",
        seed = 3407,
    ),
)
trainer.train()

# Go to https://github.com/unslothai/unsloth/wiki for advanced tips like
# (1) Saving to GGUF / merging to 16bit for vLLM
# (2) Continued training from a saved LoRA adapter
# (3) Adding an evaluation loop / OOMs
# (4) Cutomized chat templates

DPO 支持

DPO(直接偏好优化)、PPO、奖励建模似乎都按照 Llama-Factory 的第 3 方独立测试工作。 我们有一个初步的 Google Colab 笔记本,用于在 Tesla T4 上复制 Zephyr:笔记本。

我们在🤗Hugging Face 的官方文档中! 我们正在查看 SFT 文档和 DPO 文档!

from unsloth import FastLanguageModel, PatchDPOTrainer
PatchDPOTrainer()
import torch
from transformers import TrainingArguments
from trl import DPOTrainer

model, tokenizer = FastLanguageModel.from_pretrained(
    model_name = "unsloth/zephyr-sft-bnb-4bit",
    max_seq_length = max_seq_length,
    dtype = None,
    load_in_4bit = True,
)

# Do model patching and add fast LoRA weights
model = FastLanguageModel.get_peft_model(
    model,
    r = 64,
    target_modules = ["q_proj", "k_proj", "v_proj", "o_proj",
                      "gate_proj", "up_proj", "down_proj",],
    lora_alpha = 64,
    lora_dropout = 0, # Supports any, but = 0 is optimized
    bias = "none",    # Supports any, but = "none" is optimized
    # [NEW] "unsloth" uses 30% less VRAM, fits 2x larger batch sizes!
    use_gradient_checkpointing = "unsloth", # True or "unsloth" for very long context
    random_state = 3407,
    max_seq_length = max_seq_length,
)

dpo_trainer = DPOTrainer(
    model = model,
    ref_model = None,
    args = TrainingArguments(
        per_device_train_batch_size = 4,
        gradient_accumulation_steps = 8,
        warmup_ratio = 0.1,
        num_train_epochs = 3,
        fp16 = not torch.cuda.is_bf16_supported(),
        bf16 = torch.cuda.is_bf16_supported(),
        logging_steps = 1,
        optim = "adamw_8bit",
        seed = 42,
        output_dir = "outputs",
    ),
    beta = 0.1,
    train_dataset = YOUR_DATASET_HERE,
    # eval_dataset = YOUR_DATASET_HERE,
    tokenizer = tokenizer,
    max_length = 1024,
    max_prompt_length = 512,
)
dpo_trainer.train()

3、详细的基准测试表

单击“代码”以获得完全可重现的示例
“Unsloth Equal”是我们 PRO 版本的预览版,其中删除了代码。 所有设置和损失曲线保持相同。
如需基准测试表的完整列表,请访问我们的网站​

1 A100 40GB🤗Hugging FaceFlash Attention 2🦥Unsloth OpenUnsloth EqualUnsloth ProUnsloth Max
Alpaca1x1.04x1.98x2.48x5.32x15.64x
codeCodeCodeCodeCode
seconds1040100152541919667
memory MB182351536596318525
% saved15.7447.1853.25


Llama-Factory 第三方基准测试

链接到性能表。 TGS:每 GPU 每秒的令牌数。 型号:LLaMA2-7B。 GPU:NVIDIA A100 * 1。批量大小:4。梯度累积:2。LoRA 等级:8。最大长度:1024。

MethodBitsTGSGRAMSpeed
HF16239218GB100%
HF+FA216295417GB123%
Unsloth+FA216400716GB168%
HF424159GB101%
Unsloth+FA2437267GB160%

流行模型之间的性能比较

单击查看特定型号基准测试表(Mistral 7b、CodeLlama 34b 等)

Mistral 7b
1 A100 40GBHugging FaceFlash Attention 2Unsloth OpenUnsloth EqualUnsloth ProUnsloth Max
Mistral 7B Slim Orca1x1.15x2.15x2.53x4.61x13.69x
codeCodeCodeCodeCode
seconds18131571842718393132
memory MB32853193851246510271
% saved40.9962.0668.74
CodeLlama 34b
1 A100 40GBHugging FaceFlash Attention 2Unsloth OpenUnsloth EqualUnsloth ProUnsloth Max
Code Llama 34BOOM ❌0.99x1.87x2.61x4.27x12.82x
code▶️ CodeCodeCodeCode
seconds195319821043748458152
memory MB40000332172741322161
% saved16.9631.4744.60
1 Tesla T4
1 T4 16GBHugging FaceFlash AttentionUnsloth OpenUnsloth Pro EqualUnsloth ProUnsloth Max
Alpaca1x1.09x1.69x1.79x2.93x8.3x
code▶️ CodeCodeCodeCode
seconds15991468942894545193
memory MB7199705964595443
% saved1.9410.2824.39
2 Tesla T4s via DDP
2 T4 DDPHugging FaceFlash AttentionUnsloth OpenUnsloth EqualUnsloth ProUnsloth Max
Alpaca1x0.99x4.95x4.44x7.28x20.61x
code▶️ CodeCodeCode
seconds98829946199622271357480
memory MB9176912869046782
% saved0.5224.7626.09

Tesla T4 GPU 上的性能比较:

单击查看 1 epoch 所用时间

单击通过 DDP 在 2 个 Tesla T4 GPU 上进行性能比较:

One Tesla T4 on Google Colab bsz = 2, ga = 4, max_grad_norm = 0.3, num_train_epochs = 1, seed = 3047, lr = 2e-4, wd = 0.01, optim = "adamw_8bit", schedule = "linear", schedule_steps = 10

SystemGPUAlpaca (52K)LAION OIG (210K)Open Assistant (10K)SlimOrca (518K)
Huggingface1 T423h 15m56h 28m8h 38m391h 41m
Unsloth Open1 T413h 7m (1.8x)31h 47m (1.8x)4h 27m (1.9x)240h 4m (1.6x)
Unsloth Pro1 T43h 6m (7.5x)5h 17m (10.7x)1h 7m (7.7x)59h 53m (6.5x)
Unsloth Max1 T42h 39m (8.8x)4h 31m (12.5x)0h 58m (8.9x)51h 30m (7.6x)

Peak Memory Usage

SystemGPUAlpaca (52K)LAION OIG (210K)Open Assistant (10K)SlimOrca (518K)
Huggingface1 T47.3GB5.9GB14.0GB13.3GB
Unsloth Open1 T46.8GB5.7GB7.8GB7.7GB
Unsloth Pro1 T46.4GB6.4GB6.4GB6.4GB
Unsloth Max1 T411.4GB12.4GB11.9GB14.4GB

Click for Performance Comparisons on 2 Tesla T4 GPUs via DDP:**Time taken for 1 epoch**

Two Tesla T4s on Kaggle bsz = 2, ga = 4, max_grad_norm = 0.3, num_train_epochs = 1, seed = 3047, lr = 2e-4, wd = 0.01, optim = "adamw_8bit", schedule = "linear", schedule_steps = 10

SystemGPUAlpaca (52K)LAION OIG (210K)Open Assistant (10K)SlimOrca (518K) *
Huggingface2 T484h 47m163h 48m30h 51m1301h 24m *
Unsloth Pro2 T43h 20m (25.4x)5h 43m (28.7x)1h 12m (25.7x)71h 40m (18.1x) *
Unsloth Max2 T43h 4m (27.6x)5h 14m (31.3x)1h 6m (28.1x)54h 20m (23.9x) *

Peak Memory Usage on a Multi GPU System (2 GPUs)

SystemGPUAlpaca (52K)LAION OIG (210K)Open Assistant (10K)SlimOrca (518K) *
Huggingface2 T48.4GB | 6GB7.2GB | 5.3GB14.3GB | 6.6GB10.9GB | 5.9GB *
Unsloth Pro2 T47.7GB | 4.9GB7.5GB | 4.9GB8.5GB | 4.9GB6.2GB | 4.7GB *
Unsloth Max2 T410.5GB | 5GB10.6GB | 5GB10.6GB | 5GB10.5GB | 5GB *
  • Slim Orca bsz=1对于所有基准,因为bsz=2 oom。我们可以处理bsz=2,但是为了一致性,我们用bsz=1作为基准。

unsloth的案例应用

持续更新中……

提供了使用unsloth微调Mistral或Llama3模型的Python代码示例,包括模型加载、patches应用、训练循环设置等详细过程。

LLMs之LLaMA3:基于Colab平台(采用T4 GPU+至少37G)采用中文语料数据利用unsloth框架(速度更快/量化功能)并采用LoRA进行微调LLaMA-3-8b(合并原始模型和LoRA模型)同时进行4位量化(16位的hf格式→16位的gguf格式→4位的gguf格式)最后将模型导出到本地

https://yunyaniu.blog.csdn.net/article/details/138203824

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个处女座的程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值