自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一文帶你了解【SFT微調(diào)】與【Unsloth】

發(fā)布于 2025-4-29 00:25
瀏覽
0收藏

在當(dāng)下流行的幾種大模型微調(diào)方法中,大家經(jīng)常會(huì)看到談?wù)揝FP與Unsloth的文章,那我們應(yīng)該如何了解它們?它們的技術(shù)特點(diǎn)又有哪些?各自應(yīng)用在哪些模型微調(diào)的場(chǎng)景呢?本篇我們帶著這些問題,一起來了解一下。

一、SFT微調(diào)技術(shù)介紹

監(jiān)督微調(diào)(Supervised Fine-tuning, SFT)是一種遷移學(xué)習(xí)(Transfer Learning)技術(shù),指的是在已經(jīng)預(yù)訓(xùn)練好的模型(例如大語言模型中的 GPT、BERT 等)基礎(chǔ)上,使用帶有人工標(biāo)注標(biāo)簽的監(jiān)督數(shù)據(jù),對(duì)模型進(jìn)行進(jìn)一步的訓(xùn)練,使其能更好地適應(yīng)特定任務(wù)或領(lǐng)域。

1. 核心目的

  • 任務(wù)適配:將模型的通用知識(shí)聚焦到特定目標(biāo)(如生成符合人類指令的回答)。
  • 性能提升:通過優(yōu)化任務(wù)相關(guān)的損失函數(shù)(如交叉熵),提升模型在目標(biāo)任務(wù)的準(zhǔn)確率。
  • 控制輸出:約束模型生成格式(如JSON)、風(fēng)格(如客服禮貌用語)或內(nèi)容安全性。

2. SFT微調(diào)的關(guān)鍵要素

預(yù)訓(xùn)練模型:指的是一個(gè)大規(guī)模、通用的基礎(chǔ)模型,如 GPT、BERT、T5 等。

監(jiān)督數(shù)據(jù):包含輸入和對(duì)應(yīng)的目標(biāo)輸出(標(biāo)簽)的數(shù)據(jù)集,如問答對(duì)、分類標(biāo)簽、翻譯對(duì)等。

損失函數(shù):常見的有交叉熵?fù)p失(Cross-Entropy Loss),用于衡量預(yù)測(cè)輸出與真實(shí)標(biāo)簽之間的差距。

優(yōu)化器:如 Adam、AdamW,用于更新模型參數(shù)最小化損失函數(shù)。

微調(diào)策略:決定哪些層可以更新、學(xué)習(xí)率設(shè)置、訓(xùn)練輪數(shù)等。

3. 典型流程

(1)加載預(yù)訓(xùn)練模型

 加載一個(gè)已經(jīng)訓(xùn)練好的基礎(chǔ)模型(如 GPT-3、BERT、LLama 等)。

(2)準(zhǔn)備監(jiān)督數(shù)據(jù)集

數(shù)據(jù)格式通常為 `(input, output)` 對(duì),例如:

{
          "input": "請(qǐng)將這段話翻譯成英文:我喜歡人工智能。",
          "output": "I like artificial intelligence."
        }

(3)定義任務(wù)和損失函數(shù)

 如文本生成使用語言建模損失,文本分類使用交叉熵?fù)p失等。

(4)微調(diào)模型

使用監(jiān)督數(shù)據(jù)對(duì)模型進(jìn)行微調(diào),使其在該任務(wù)上表現(xiàn)更好。

(5)驗(yàn)證與測(cè)試

使用驗(yàn)證集評(píng)估模型效果,調(diào)整參數(shù),避免過擬合。

大模型微調(diào)是NLP 應(yīng)用開發(fā)工程師必須掌握的核心技術(shù)之一,它是實(shí)現(xiàn)模型“落地應(yīng)用”的關(guān)鍵步驟。

一文帶你了解【SFT微調(diào)】與【Unsloth】-AI.x社區(qū)

二、Unsloth微調(diào)模型

Unsloth 是一個(gè)專注于加速并優(yōu)化大語言模型(LLM)微調(diào)和推理的開源項(xiàng)目。它的目標(biāo)是讓開發(fā)者能夠更高效、更低成本地在本地或云端微調(diào)和部署如 LLaMA、Mistral 等主流開源大模型。

1. 特點(diǎn)

(1)極致加速的微調(diào)(Finetuning)

  • Unsloth 使用了一系列優(yōu)化手段(如 FlashAttention、4bit 量化、LoRA)來讓模型微調(diào)速度快上數(shù)倍。
  • 對(duì)比 Hugging Face 的 Transformers 微調(diào)方式,Unsloth 能實(shí)現(xiàn)最高5倍以上訓(xùn)練加速。
  • 支持 QLoRA(量化的LoRA),大幅減少所需顯存。

(2) 低內(nèi)存占用(Low Memory Usage)

通過整合 bitsandbytes、Flash Attention、Paged Optimizers 等技術(shù),可以在8GB 或更少顯存上訓(xùn)練 7B 甚至 13B 模型。

(3)一行代碼加載優(yōu)化模型

Unsloth 提供了類似 Huggingface 的接口,只需一行代碼即可加載優(yōu)化好的模型:

from unsloth import FastLanguageModel


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

(4)支持主流開源模型

Unsloth 支持加載和微調(diào)多個(gè)熱門開源 LLM,包括:

  • Meta 的 LLaMA 2 / LLaMA 3
  • Mistral / Mixtral
  • OpenHermes、Zephyr、Code LLaMA 等

(5)兼容 Hugging Face

  • 完全兼容 Hugging Face 的 Transformers 和 Datasets。
  • 可將微調(diào)后的模型上傳至 Hugging Face Hub。

(6)推理優(yōu)化

推理部分也進(jìn)行了優(yōu)化,支持 FlashAttention 和量化模型的高效推理。

2. 性能對(duì)比示例

根據(jù)官方數(shù)據(jù),Unsloth的微調(diào)效率能夠大幅提升,并且適用于個(gè)人開發(fā)者進(jìn)行低成本的模型開發(fā)。

框架

模型

顯存占用

微調(diào)速度

加速比

Huggingface

LLaMA 2 7B

24GB

40 tokens/s

1x

Unsloth

LLaMA 2 7B (4bit)

8GB

180 tokens/s

4.5x

3. 小結(jié)

Unsloth 是一個(gè)面向開發(fā)者和研究人員的高效 LLM 微調(diào)工具,具有以下亮點(diǎn):

  • 快速、高效、資源占用低
  • 支持主流開源模型
  • 接口友好,易于上手
  • 支持 4bit QLoRA + FlashAttention

如果你正在尋找一種方式在本地或低成本環(huán)境中微調(diào)開源大語言模型,Unsloth 是非常值得一試的工具。

三、SFT與Unsloth的聯(lián)系

Unsloth 是一種工具 / 框架,SFT 是一種微調(diào)方法。它們并不矛盾,而是可以結(jié)合使用的。

1. 技術(shù)實(shí)現(xiàn)的差異

(1)傳統(tǒng)SFT的瓶頸

  • 計(jì)算冗余:PyTorch默認(rèn)算子(如矩陣乘、LayerNorm)未針對(duì)微調(diào)任務(wù)優(yōu)化,存在冗余內(nèi)存拷貝。
  • 顯存浪費(fèi):中間激活值(如注意力矩陣)全精度存儲(chǔ),限制batch size和模型規(guī)模。
  • 硬件利用率低:GPU計(jì)算單元空閑等待數(shù)據(jù)加載或內(nèi)核啟動(dòng)。

(2)Unsloth的優(yōu)化

A. 內(nèi)核融合(Kernel Fusion)

  • 將多個(gè)連續(xù)操作(如QKV投影 → RoPE位置編碼 → 注意力計(jì)算)合并為單一GPU內(nèi)核,減少內(nèi)存I/O和內(nèi)核啟動(dòng)開銷。
  • 例如:將PyTorch默認(rèn)的20幾個(gè)算子融合為5個(gè)定制Triton內(nèi)核。

B . 4-bit量化訓(xùn)練

  • 權(quán)重和梯度以4-bit存儲(chǔ)(非對(duì)稱量化),通過QLoRA機(jī)制反量化計(jì)算,顯存占用降低至1/3。
  • 量化誤差通過微調(diào)過程動(dòng)態(tài)補(bǔ)償,幾乎不影響最終精度。

C. 動(dòng)態(tài)內(nèi)存復(fù)用

  • 預(yù)先分配顯存池,避免頻繁申請(qǐng)/釋放顯存(減少CUDA同步開銷)。
  • 中間變量復(fù)用(如梯度計(jì)算后立即釋放激活值內(nèi)存)。

2、 兩者結(jié)合使用

我們可以使用Unsloth 框架來進(jìn)行 SFT 微調(diào),代碼如下:

from unsloth import FastLanguageModel
from trl import SFTTrainer  # Hugging Face 的 SFT Trainer


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


trainer = SFTTrainer(
    model=model,
    tokenizer=tokenizer,
    train_dataset=train_dataset,
    dataset_text_field="text",
    max_seq_length=2048,
)


trainer.train()

這段代碼中就是使用了SFT 方式進(jìn)行監(jiān)督微調(diào),而微調(diào)的加速和模型加載部分則是由Unsloth 提供支持。

四、總結(jié)

Unsloth微調(diào)是傳統(tǒng)SFT在工程效率維度上的優(yōu)化延伸,二者本質(zhì)上是互補(bǔ)關(guān)系而非替代關(guān)系。通過底層計(jì)算優(yōu)化,Unsloth讓SFT在資源受限場(chǎng)景下變得可行,使開發(fā)者能夠更專注于數(shù)據(jù)質(zhì)量和模型設(shè)計(jì),而非被硬件瓶頸束縛。選擇時(shí)需權(quán)衡任務(wù)需求、硬件條件和對(duì)新技術(shù)的接受度。

本文轉(zhuǎn)載自??碼農(nóng)隨心筆記??,作者:碼農(nóng)隨心筆記

已于2025-4-29 15:51:59修改
收藏
回復(fù)
舉報(bào)
回復(fù)
相關(guān)推薦