❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发感兴趣,我会每日分享大模型与 AI 领域的开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术!

🥦 微信公众号|搜一搜:蚝油菜花 🥦


💥 「你的3090还在吃灰?开源核弹让AI训练提速32倍:5小时任务缩至9分钟,Windows照样起飞!」

大家好,我是蚝油菜花。你是否也经历过——

  • 🖥️ 盯着屏幕看loss曲线3小时,结果OOM报错一切归零
  • 💸 为微调模型租8卡A100,一周工资全喂了云平台
  • 📉 用传统工具训练Llama3,显存占用直接爆掉16G显卡…

今天要炸场的 Unsloth ,正是开发者们对抗算力霸凌的终极武器!这个开源训练加速器,通过手写GPU内核+动态4bit量化,在3090上就能跑70B模型的长上下文训练。实测显示:

  • ✅ 单卡训练速度提升10倍(HuggingFace对比)
  • ✅ 多卡并行效率暴涨32倍
  • ✅ 内存占用直降70% (支持Windows WSL!)

更疯狂的是,它刚刚宣布支持Llama-3全系列——接下来我将带大家体验如何用免费资源微调属于你的AI大模型!

🚀 快速阅读

Unsloth 是一款用于大语言模型(LLM)微调的开源工具,旨在通过优化计算步骤和 GPU 内核,大幅提升模型训练速度并减少内存使用。

  1. 核心功能:支持多种主流 LLM,如 Llama-3、Mistral、Phi-4 等;在单 GPU 上实现最高 10 倍、多 GPU 上最高 32 倍的加速效果,同时内存使用减少 70% 以上。
  2. 技术原理:通过手动优化计算步骤、手写 GPU 内核和动态量化技术,显著提升训练和推理的速度和性能。

Unsloth 是什么

Unsloth

Unsloth 是一款开源的大语言模型(LLM)微调工具,基于优化计算步骤和 GPU 内核,显著提升模型训练速度并减少内存使用。它支持多种流行的大型语言模型(LLM),如 Llama-3、Mistral、Phi-4 等,在单 GPU 上实现最高 10 倍、多 GPU 上最高 32 倍的加速效果,同时内存使用减少 70% 以上。用户可以在 Google Colab 或 Kaggle Notebooks 上快速体验。

Unsloth 的主要功能

  • 高效微调:加速训练,基于优化计算步骤和手写 GPU 内核,在单 GPU 上可实现比传统方法快 10 倍的训练速度,在多 GPU 系统上速度提升可达 32 倍。
  • 内存优化:在微调过程中,将内存使用量减少 70% 甚至更多,在有限的硬件资源下训练更大的模型。
  • 支持多种模型:支持多种流行的大型语言模型(LLM),如 Llama-3、Mistral、Phi-4、Qwen 2.5 和 Gemma 等。
  • 动态量化:引入动态 4 位量化技术,在不显著增加显存使用的情况下,提高模型的准确性和性能。
  • 长上下文支持:支持长上下文训练,例如在 Llama 3.3(70B)模型上,在 80GB 的 GPU 上实现长达 89K 的上下文长度,远超传统方法。
  • 多平台兼容:支持 Linux 和 Windows(通过 WSL)操作系统,且与 Hugging Face 的 TRL、Trainer 等工具无缝集成。

Unsloth 的技术原理

  • 手动优化计算步骤:手动推导和优化计算密集型的数学步骤,减少不必要的计算开销。例如,在神经网络的反向传播过程中,基于自定义的高效实现,避免传统框架中存在的冗余计算。
  • 手写 GPU 内核:用 OpenAI 的 Triton 语言编写专门的 GPU 内核,内核针对特定的计算任务进行高度优化。基于这种方式,充分用 GPU 的并行计算能力,显著提升训练和推理的速度。
  • 动态量化:引入动态量化技术,特别是在 4 位量化方面进行优化。动态量化根据模型的实际需求,动态地选择是否对某些参数进行量化,在不显著增加显存使用的情况下,提高模型的准确性和性能。

如何运行 Unsloth

1. 安装环境
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
Pip 安装
pip install --upgrade pip
pip install "unsloth[cu121-torch240] @ git+https://github.com/unslothai/unsloth.git"
2. 使用示例

以下是一个简单的代码示例,展示了如何使用 Unsloth 微调一个 Llama 模型:

from unsloth import FastLanguageModel 
from trl import SFTTrainer
from transformers import TrainingArguments
from datasets import load_dataset

# 加载数据集
url = "https://huggingface.co/datasets/laion/OIG/resolve/main/unified_chip2.jsonl"
dataset = load_dataset("json", data_files={"train": url}, split="train")

# 初始化模型和分词器
model, tokenizer = FastLanguageModel.from_pretrained(
    model_name="unsloth/llama-3-8b-bnb-4bit",
    max_seq_length=2048,
    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()

资源


❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发感兴趣,我会每日分享大模型与 AI 领域的开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术!

🥦 微信公众号|搜一搜:蚝油菜花 🥦

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐