❤️ 如果你也关注 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 内核,大幅提升模型训练速度并减少内存使用。
- 核心功能:支持多种主流 LLM,如 Llama-3、Mistral、Phi-4 等;在单 GPU 上实现最高 10 倍、多 GPU 上最高 32 倍的加速效果,同时内存使用减少 70% 以上。
- 技术原理:通过手动优化计算步骤、手写 GPU 内核和动态量化技术,显著提升训练和推理的速度和性能。
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
AI 代码解读
Pip 安装
pip install --upgrade pip
pip install "unsloth[cu121-torch240] @ git+https://github.com/unslothai/unsloth.git"
AI 代码解读
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 代码解读
资源
- GitHub 仓库:https://github.com/unslothai/unsloth
- HuggingFace 仓库:https://huggingface.co/unsloth
❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发感兴趣,我会每日分享大模型与 AI 领域的开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术!
🥦 微信公众号|搜一搜:蚝油菜花 🥦