用RTX 5090本地微调语言模型

我关注NVIDIA的Blackwell架构发布已经有一段时间了,所以当看到Unsloth也加入了对Blackwell的支持时,我决定尝试单个GPU究竟能做到什么程度。

用RTX 5090本地微调语言模型

上周末,我完成了一件一年前想都不敢想的事情——我在自己的桌面 GPU 上微调了一个 200 亿语言模型。没有云资源。没有集群。只有我、一块 RTX 5090 显卡,以及一个名为 Unsloth 的开源项目。

我关注NVIDIA的Blackwell架构发布已经有一段时间了,它的一切都在向世人宣告“AI游乐场”。所以当我看到Unsloth也加入了对Blackwell的支持时,我心想:让我们看看单个GPU究竟能做到什么程度。

1、Unsloth到底是什么?

如果你曾经尝试过微调大型模型,你就会知道这通常是一场噩梦——几个小时的配置地狱、VRAM错误以及“CUDA内存不足”的提示信息,让你恨不得把电脑扔出窗外。

Unsloth解决了其中的许多问题。它是一个开源框架,本质上优化了LLM(逻辑学习模型)的微调和强化学习的核心流程。想象一下:训练速度提升2倍,VRAM占用减少70%,而且精度丝毫不减。

它支持Llama、gpt-oss和DeepSeek等热门模型。最酷的是什么?现在它针对 NVIDIA Blackwell GPU 进行了优化,包括 RTX 50 系列、新款 RTX PRO 6000 和 DGX Spark 系统。

所以,没错,你现在可以开始在家对 200 亿甚至 400 亿的模型进行微调了。

2、设置过程

我原本以为会遇到依赖关系混乱的问题。结果,我运行了以下命令:

pip install unsloth

……然后就成功了。

然后我切换到了 Python:

from unsloth import FastLanguageModel
import torch

model, tokenizer = FastLanguageModel.from_pretrained(
    model_name = "unsloth/gpt-oss-20b",
    max_seq_length = 1024,
    load_in_4bit = True,        
    full_finetuning = False,
)

from unsloth import FastLanguageModel
import torch
max_seq_length = 1024

fourbit_models = [
    "unsloth/gpt-oss-20b-unsloth-bnb-4bit", 
    "unsloth/gpt-oss-120b-unsloth-bnb-4bit",
    "unsloth/gpt-oss-20b", 
    "unsloth/gpt-oss-120b",
] 
 
model, tokenizer = FastLanguageModel.from_pretrained(
    model_name = "unsloth/gpt-oss-20b",
    max_seq_length = max_seq_length, 
    load_in_4bit = True,  # keeps VRAM low
    full_finetuning = False, 
   )

成功加载模型,没有 CUDA 错误。光是这一点就足以让人感到胜利。

3、Blackwell + Unsloth

接下来才是真正有趣的地方。

使用我的 RTX 5090(32GB 显存),微调 20B 模型竟然是可行的。训练速度大约是我之前使用 Hugging Face 和 Flash Attention 2 时的两倍。显存占用降低了约 70%,而且我可以将上下文窗口增加到 122k 个 token。

这不是笔误——在单张消费级 GPU 上就能处理 122,181 个 token。在使用 Unsloth 之前,超过 4k 的训练数据就会出现“内存不足”的错误。

以下是相关数据:

| VRAM  | Unsloth Context Length | HF + FA2 Context |
| ----- | ---------------------- | ---------------- |
| 8 GB  | 2,972                  | OOM              |
| 16 GB | 40,724                 | 2,551            |
| 32 GB | 122,181                | 9,711            |

实际上,你可以在中端 GPU 上运行 Llama 3.1 8B,并且还有剩余的训练容量。

4、无需修改代码即可扩展

Unsloth 的神奇之处不仅仅在于本地训练。它的设计初衷就是为了能够从你的桌面 GPU 扩展到 NVIDIA DGX Cloud 或任何 NVIDIA 云合作伙伴平台。

相同的代码,相同的配置——只需切换硬件即可。因此,当您完成本地实验后,无需编写任何 Python 代码,即可在 Blackwell 集群上训练超过 700 亿个模型。

5、如果你遇到 xFormers 问题……

您可能会遇到 xFormers 的构建错误(我就遇到过)。解决方法很简单:

pip uninstall xformers -y
pip install ninja
export TORCH_CUDA_ARCH_LIST="12.0"
git clone --depth=1 https://github.com/facebookresearch/xformers --recursive
cd xformers && python setup.py install && cd ..

之后,一切就顺利了。

6、Docker 选项

如果您更喜欢容器(我在生产环境中使用容器),Unsloth 提供了一个即用型 Docker 镜像。

docker run -d -e JUPYTER_PASSWORD="mypassword" \
  -p 8888:8888 -p 2222:22 \
  -v $(pwd)/work:/workspace/work \
  --gpus all \
  unsloth/unsloth

您需要安装 NVIDIA Container Toolkit,但一旦设置完成,您将拥有一个完整的 Jupyter Lab,可用于微调大型模型。

python -m venv unsloth
source unsloth/bin/activate
pip install unsloth

7、为什么这很重要

Unsloth 联合创始人 Daniel Han 的一句话让我印象深刻:

“人工智能不应该是一个排他性的俱乐部。下一个伟大的人工智能突破可能来自任何地方——学生、独立研究人员或小型创业公司。”

这正是此设置的意义所在——LLM 微调的民主化。现在,一个拥有游戏电脑的孩子就可以训练一个模型,而这个模型曾经需要一个数据中心?这太不可思议了。

8、结束语

如果您拥有 RTX 5090 或 RTX PRO 6000 Blackwell 显卡,现在就可以从小规模开始。之后,当您准备扩展时,可以迁移到 DGX Cloud——无需重构,轻松搞定。

我要说的是:Unsloth 让微调再次成为一种乐趣。有了 Blackwell GPU,我们仿佛进入了一个新时代——“训练 LLM”不再意味着“租用 AWS 集群”。

简而言之:Unsloth + NVIDIA Blackwell = 人人都能享受本地微调。训练速度提升 2 倍,显存减少 70%,上下文时间延长 12 倍,无需依赖云平台。


原文链接:I Trained an LLM on My RTX 5090 with Unsloth

汇智网翻译整理,转载请标明出处