Unsloth on DGX Spark

使用 Unsloth 优化微调

基本理念

  • 性能优先:它声称可以加快训练速度 (例如。与标准方法相比,在单 GPU 上速度提高 2%,在多 GPU 设置中速度提高 30%) ,并减少显存占用。

  • 内核级优化:核心计算使用自定义内核 (例如。并手动优化数学运算,以提高吞吐量和效率。

  • 量化和模型格式:支持动态量化 (4 位、16 位) 和 GGUF 格式,可在保持准确性的同时减少占用空间。

  • 广泛的模型支持:适用于许多 LLM (Qwen、DeepSeek 等) 并支持训练、微调和导出为 Ollama、vLLM、GGUF、Hugging Face 等格式。

  • 简化的界面:提供易于使用的 Notebook 和工具,因此用户可以用最少的样板文件微调模型。

您将完成的任务

您将在 NVIDIA Spark 设备上设置 Unsloth,以优化大语言模型的微调,实现高达 2 倍的训练速度提升,并通过高效的 参数高效的微调方法,如 LoRA 和 QLoRA。

开始之前需要了解的内容

  • 开始之前需要了解的内容

  • 使用 pip 和虚拟环境进行 Python 包管理

  • Hugging Face Transformers 库基础知识 (加载模型、分词器、数据集)

  • GPU 基础知识 ( CUDA/ GPU 与 CPU、VRAM 限制、设备可用性)

  • 基本了解 LLM 训练概念 (损失函数、检查点)

  • 熟悉提示工程和基础模型交互

  • 可选:LoRA/ QLoRA 参数高效微调知识

预备知识

  • 采用 Blackwell GPU 架构的 NVIDIA Spark 设备

  • nvidia-smi 显示 GPU 信息摘要

  • 已安装 CUDA 13.0: nvcc --version

  • 可通过互联网下载模型和数据集

辅助文件

GitHub 上的 Python 测试脚本 

时间和风险

  • 时长:初始设置和测试运行需要 30 - 60 分钟

  • 风险:

    • Triton 编译器版本不匹配可能会导致编译错误

    • CUDA 工具包配置问题可能会阻止核函数编译

    • 较小模型的内存限制需要调整批量大小

  • 回滚:使用以下命令卸载软件包 pip uninstall unsloth torch torchvision。

  • 上次更新日期:2025 年 12 月 15 日

    • 将 pytorch 容器和 python 依赖项升级到最新版本

第 1 步:验证先决条件

确认您的 NVIDIA Spark 设备具有所需的 CUDA 工具包和可用的 GPU 资源。

nvcc --version

输出应显示 CUDA 13.0。

nvidia-smi

输出应显示 GPU 信息的摘要。

第 2 步:获取容器镜像

docker pull nvcr.io/nvidia/pytorch:25.11-py3

第 3 步:启动 Docker

docker run --gpus all --ulimit memlock=-1 -it --ulimit stack=67108864 --entrypoint /usr/bin/bash --rm nvcr.io/nvidia/pytorch:25.11-py3

第 4 步:在 Docker 中安装依赖项

pip install transformers peft hf_transfer "datasets==4.3.0" "trl==0.26.1"
pip install --no-deps unsloth unsloth_zoo bitsandbytes

第 5 步:创建 Python 测试脚本

将测试脚本 Curl 单击此处容器中。

curl -O https://raw.githubusercontent.com/NVIDIA/dgx-spark-playbooks/refs/heads/main/nvidia/unsloth/assets/test_unsloth.py

我们将使用此测试脚本通过简单的微调任务来验证安装。

第 6 步:运行验证测试

执行测试脚本以验证 Unsloth 是否正常工作。

python test_unsloth.py

终端窗口中的预期输出:

  • “Unsloth:将修补您的计算机,使免费微调速度提高 2 倍”

  • 训练进度条显示损失减少超过 60 步

  • 显示完成情况的最终训练指标

第 7 步:后续步骤

通过更新自己的模型和数据集,使用您自己的模型和数据集 test_unsloth.py 文件:

# Replace line 49 with your model choice
model_name = "unsloth/Qwen3-8B-bnb-4bit"

# Load your custom dataset in line 8
dataset = load_dataset("your_dataset_name")

# Adjust training parameter args at line 80
per_device_train_batch_size = 4
max_steps = 1000

访问 https://github.com/unslothai/unsloth/wiki 高级使用说明,包括:

注意:

DGX Spark 采用统一内存架构 (UMA),可在 GPU 和 CPU 之间实现动态内存共享。 由于许多应用程序仍在更新以利用 UMA,您可能会遇到内存问题,即使在 DGX Spark 的内存容量。如果发生这种情况,请使用以下命令手动刷新缓冲区缓存:

sudo sh -c 'sync; echo 3 > /proc/sys/vm/drop_caches'