【大模型微调-推理过程相关库】Unsloth-FastLanguageModel

整体思路

承接上面的训练流程图,新增Unsloth-FastLanguageModel,并且把整条链路拆成:

预训练 → 后训练(SFT / 对齐)→ 微调加速层(FastLanguageModel)→ 推理部署

同时梳理这条链路里所有核心仓库:unsloth(FastLanguageModel)、transformers、peft、trl、bitsandbytes、accelerate、vLLM、llama.cpp、datasets

先给你完整合并Mermaid图(在上一张时序版本上扩展),再逐个仓库讲解、定位、用法、分工。
#mermaid-svg-x26ChjS1YbBFVwoP{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-x26ChjS1YbBFVwoP .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-x26ChjS1YbBFVwoP .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-x26ChjS1YbBFVwoP .error-icon{fill:#552222;}#mermaid-svg-x26ChjS1YbBFVwoP .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-x26ChjS1YbBFVwoP .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-x26ChjS1YbBFVwoP .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-x26ChjS1YbBFVwoP .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-x26ChjS1YbBFVwoP .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-x26ChjS1YbBFVwoP .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-x26ChjS1YbBFVwoP .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-x26ChjS1YbBFVwoP .marker{fill:#333333;stroke:#333333;}#mermaid-svg-x26ChjS1YbBFVwoP .marker.cross{stroke:#333333;}#mermaid-svg-x26ChjS1YbBFVwoP svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-x26ChjS1YbBFVwoP p{margin:0;}#mermaid-svg-x26ChjS1YbBFVwoP .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-x26ChjS1YbBFVwoP .cluster-label text{fill:#333;}#mermaid-svg-x26ChjS1YbBFVwoP .cluster-label span{color:#333;}#mermaid-svg-x26ChjS1YbBFVwoP .cluster-label span p{background-color:transparent;}#mermaid-svg-x26ChjS1YbBFVwoP .label text,#mermaid-svg-x26ChjS1YbBFVwoP span{fill:#333;color:#333;}#mermaid-svg-x26ChjS1YbBFVwoP .node rect,#mermaid-svg-x26ChjS1YbBFVwoP .node circle,#mermaid-svg-x26ChjS1YbBFVwoP .node ellipse,#mermaid-svg-x26ChjS1YbBFVwoP .node polygon,#mermaid-svg-x26ChjS1YbBFVwoP .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-x26ChjS1YbBFVwoP .rough-node .label text,#mermaid-svg-x26ChjS1YbBFVwoP .node .label text,#mermaid-svg-x26ChjS1YbBFVwoP .image-shape .label,#mermaid-svg-x26ChjS1YbBFVwoP .icon-shape .label{text-anchor:middle;}#mermaid-svg-x26ChjS1YbBFVwoP .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-x26ChjS1YbBFVwoP .rough-node .label,#mermaid-svg-x26ChjS1YbBFVwoP .node .label,#mermaid-svg-x26ChjS1YbBFVwoP .image-shape .label,#mermaid-svg-x26ChjS1YbBFVwoP .icon-shape .label{text-align:center;}#mermaid-svg-x26ChjS1YbBFVwoP .node.clickable{cursor:pointer;}#mermaid-svg-x26ChjS1YbBFVwoP .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-x26ChjS1YbBFVwoP .arrowheadPath{fill:#333333;}#mermaid-svg-x26ChjS1YbBFVwoP .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-x26ChjS1YbBFVwoP .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-x26ChjS1YbBFVwoP .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-x26ChjS1YbBFVwoP .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-x26ChjS1YbBFVwoP .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-x26ChjS1YbBFVwoP .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-x26ChjS1YbBFVwoP .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-x26ChjS1YbBFVwoP .cluster text{fill:#333;}#mermaid-svg-x26ChjS1YbBFVwoP .cluster span{color:#333;}#mermaid-svg-x26ChjS1YbBFVwoP div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-x26ChjS1YbBFVwoP .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-x26ChjS1YbBFVwoP rect.text{fill:none;stroke-width:0;}#mermaid-svg-x26ChjS1YbBFVwoP .icon-shape,#mermaid-svg-x26ChjS1YbBFVwoP .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-x26ChjS1YbBFVwoP .icon-shape p,#mermaid-svg-x26ChjS1YbBFVwoP .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-x26ChjS1YbBFVwoP .icon-shape .label rect,#mermaid-svg-x26ChjS1YbBFVwoP .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-x26ChjS1YbBFVwoP .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-x26ChjS1YbBFVwoP .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-x26ChjS1YbBFVwoP :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 推理部署阶段
底层依赖 训练阶段
微调加速层 Unsloth
对齐可选路线
提供chosen/rejected偏好对
提供chosen/rejected偏好对
提供prompt+验证规则
输入
加载基座/4bit量化模型 + 包装LoRA
加载SFT模型,送入对齐训练
被FastLanguageModel配合调用
被FastLanguageModel配合调用
被FastLanguageModel配合调用
被FastLanguageModel配合调用
被FastLanguageModel配合调用
被FastLanguageModel配合调用
导出模型权重
导出模型权重
导出模型权重
导出对齐后权重
导出对齐后权重
导出对齐后权重
提供导出接口:GGUF/GPTQ/AWQ/合并权重
提供导出接口:GGUF/GPTQ/AWQ/合并权重
提供导出接口:GGUF/GPTQ/AWQ/合并权重
大模型训练全流程
预训练 Pretraining

输出:基座 Base Model
后训练 Post-training
SFT 监督微调

基座 → SFT模型:学会按指令输出
对齐 Alignment

SFT模型 → 偏好对齐模型
RLHF 路线:RM + PPO
DPO 路线:直接偏好损失,无RM
GRPO 路线:组相对RL,适合推理
RM奖励模型训练

偏好对 → 打分器
PPO 近端策略优化

用RM分数更新策略
偏好数据来源:人工标注 / RLAIF AI标注
FastLanguageModel

Unsloth核心类
transformers

模型、tokenizer、基础模型接口
peft

LoRA/QLoRA适配器管理
bitsandbytes

4/8bit量化
accelerate

多卡、混合精度、分布式
datasets

加载、清洗训练数据集
trl

SFTTrainer / DPOTrainer / GRPOTrainer / PPOTrainer
vLLM

高吞吐生产推理,PagedAttention
llama.cpp

GGUF量化,CPU/低显存GPU本地跑
transformers原生推理

简单调试,不适合高并发


整体主流程(顶层骨架)

只保留【预训练 → 后训练 → SFT → 对齐】时序关系,不塞仓库细节
#mermaid-svg-NuzoviahbXGKyGmj{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-NuzoviahbXGKyGmj .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-NuzoviahbXGKyGmj .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-NuzoviahbXGKyGmj .error-icon{fill:#552222;}#mermaid-svg-NuzoviahbXGKyGmj .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-NuzoviahbXGKyGmj .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-NuzoviahbXGKyGmj .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-NuzoviahbXGKyGmj .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-NuzoviahbXGKyGmj .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-NuzoviahbXGKyGmj .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-NuzoviahbXGKyGmj .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-NuzoviahbXGKyGmj .marker{fill:#333333;stroke:#333333;}#mermaid-svg-NuzoviahbXGKyGmj .marker.cross{stroke:#333333;}#mermaid-svg-NuzoviahbXGKyGmj svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-NuzoviahbXGKyGmj p{margin:0;}#mermaid-svg-NuzoviahbXGKyGmj .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-NuzoviahbXGKyGmj .cluster-label text{fill:#333;}#mermaid-svg-NuzoviahbXGKyGmj .cluster-label span{color:#333;}#mermaid-svg-NuzoviahbXGKyGmj .cluster-label span p{background-color:transparent;}#mermaid-svg-NuzoviahbXGKyGmj .label text,#mermaid-svg-NuzoviahbXGKyGmj span{fill:#333;color:#333;}#mermaid-svg-NuzoviahbXGKyGmj .node rect,#mermaid-svg-NuzoviahbXGKyGmj .node circle,#mermaid-svg-NuzoviahbXGKyGmj .node ellipse,#mermaid-svg-NuzoviahbXGKyGmj .node polygon,#mermaid-svg-NuzoviahbXGKyGmj .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-NuzoviahbXGKyGmj .rough-node .label text,#mermaid-svg-NuzoviahbXGKyGmj .node .label text,#mermaid-svg-NuzoviahbXGKyGmj .image-shape .label,#mermaid-svg-NuzoviahbXGKyGmj .icon-shape .label{text-anchor:middle;}#mermaid-svg-NuzoviahbXGKyGmj .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-NuzoviahbXGKyGmj .rough-node .label,#mermaid-svg-NuzoviahbXGKyGmj .node .label,#mermaid-svg-NuzoviahbXGKyGmj .image-shape .label,#mermaid-svg-NuzoviahbXGKyGmj .icon-shape .label{text-align:center;}#mermaid-svg-NuzoviahbXGKyGmj .node.clickable{cursor:pointer;}#mermaid-svg-NuzoviahbXGKyGmj .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-NuzoviahbXGKyGmj .arrowheadPath{fill:#333333;}#mermaid-svg-NuzoviahbXGKyGmj .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-NuzoviahbXGKyGmj .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-NuzoviahbXGKyGmj .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-NuzoviahbXGKyGmj .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-NuzoviahbXGKyGmj .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-NuzoviahbXGKyGmj .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-NuzoviahbXGKyGmj .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-NuzoviahbXGKyGmj .cluster text{fill:#333;}#mermaid-svg-NuzoviahbXGKyGmj .cluster span{color:#333;}#mermaid-svg-NuzoviahbXGKyGmj div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-NuzoviahbXGKyGmj .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-NuzoviahbXGKyGmj rect.text{fill:none;stroke-width:0;}#mermaid-svg-NuzoviahbXGKyGmj .icon-shape,#mermaid-svg-NuzoviahbXGKyGmj .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-NuzoviahbXGKyGmj .icon-shape p,#mermaid-svg-NuzoviahbXGKyGmj .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-NuzoviahbXGKyGmj .icon-shape .label rect,#mermaid-svg-NuzoviahbXGKyGmj .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-NuzoviahbXGKyGmj .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-NuzoviahbXGKyGmj .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-NuzoviahbXGKyGmj :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 作为对齐的输入起点
大模型训练全流程
预训练 Pretraining

输出:基座 Base Model
后训练 Post-training
SFT 监督微调

基座 → SFT模型,学会遵循指令
对齐 Alignment

SFT模型 → 偏好对齐模型


对齐分支(3 条对齐路线 + 数据来源)

专门讲对齐内部:RLHF / DPO / GRPO,以及偏好数据来源
#mermaid-svg-GKbJNKxG2brbbBFb{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-GKbJNKxG2brbbBFb .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-GKbJNKxG2brbbBFb .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-GKbJNKxG2brbbBFb .error-icon{fill:#552222;}#mermaid-svg-GKbJNKxG2brbbBFb .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-GKbJNKxG2brbbBFb .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-GKbJNKxG2brbbBFb .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-GKbJNKxG2brbbBFb .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-GKbJNKxG2brbbBFb .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-GKbJNKxG2brbbBFb .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-GKbJNKxG2brbbBFb .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-GKbJNKxG2brbbBFb .marker{fill:#333333;stroke:#333333;}#mermaid-svg-GKbJNKxG2brbbBFb .marker.cross{stroke:#333333;}#mermaid-svg-GKbJNKxG2brbbBFb svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-GKbJNKxG2brbbBFb p{margin:0;}#mermaid-svg-GKbJNKxG2brbbBFb .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-GKbJNKxG2brbbBFb .cluster-label text{fill:#333;}#mermaid-svg-GKbJNKxG2brbbBFb .cluster-label span{color:#333;}#mermaid-svg-GKbJNKxG2brbbBFb .cluster-label span p{background-color:transparent;}#mermaid-svg-GKbJNKxG2brbbBFb .label text,#mermaid-svg-GKbJNKxG2brbbBFb span{fill:#333;color:#333;}#mermaid-svg-GKbJNKxG2brbbBFb .node rect,#mermaid-svg-GKbJNKxG2brbbBFb .node circle,#mermaid-svg-GKbJNKxG2brbbBFb .node ellipse,#mermaid-svg-GKbJNKxG2brbbBFb .node polygon,#mermaid-svg-GKbJNKxG2brbbBFb .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-GKbJNKxG2brbbBFb .rough-node .label text,#mermaid-svg-GKbJNKxG2brbbBFb .node .label text,#mermaid-svg-GKbJNKxG2brbbBFb .image-shape .label,#mermaid-svg-GKbJNKxG2brbbBFb .icon-shape .label{text-anchor:middle;}#mermaid-svg-GKbJNKxG2brbbBFb .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-GKbJNKxG2brbbBFb .rough-node .label,#mermaid-svg-GKbJNKxG2brbbBFb .node .label,#mermaid-svg-GKbJNKxG2brbbBFb .image-shape .label,#mermaid-svg-GKbJNKxG2brbbBFb .icon-shape .label{text-align:center;}#mermaid-svg-GKbJNKxG2brbbBFb .node.clickable{cursor:pointer;}#mermaid-svg-GKbJNKxG2brbbBFb .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-GKbJNKxG2brbbBFb .arrowheadPath{fill:#333333;}#mermaid-svg-GKbJNKxG2brbbBFb .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-GKbJNKxG2brbbBFb .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-GKbJNKxG2brbbBFb .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-GKbJNKxG2brbbBFb .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-GKbJNKxG2brbbBFb .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-GKbJNKxG2brbbBFb .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-GKbJNKxG2brbbBFb .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-GKbJNKxG2brbbBFb .cluster text{fill:#333;}#mermaid-svg-GKbJNKxG2brbbBFb .cluster span{color:#333;}#mermaid-svg-GKbJNKxG2brbbBFb div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-GKbJNKxG2brbbBFb .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-GKbJNKxG2brbbBFb rect.text{fill:none;stroke-width:0;}#mermaid-svg-GKbJNKxG2brbbBFb .icon-shape,#mermaid-svg-GKbJNKxG2brbbBFb .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-GKbJNKxG2brbbBFb .icon-shape p,#mermaid-svg-GKbJNKxG2brbbBFb .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-GKbJNKxG2brbbBFb .icon-shape .label rect,#mermaid-svg-GKbJNKxG2brbbBFb .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-GKbJNKxG2brbbBFb .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-GKbJNKxG2brbbBFb .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-GKbJNKxG2brbbBFb :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 对齐可选路线
提供偏好对
提供偏好对
提供prompt+验证规则
对齐 Alignment
RLHF 路线:RM + PPO
DPO 路线:直接偏好损失,无RM
GRPO 路线:组相对RL,适合推理
RM奖励模型训练

偏好对 → 打分器
PPO 近端策略优化

用RM分数更新策略
偏好数据来源:人工标注 / RLAIF AI标注


微调加速层 Unsloth + 训练依赖库

聚焦 FastLanguageModel,以及训练阶段用到的所有底层仓库
#mermaid-svg-W2O4gFpiiTfIkveG{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-W2O4gFpiiTfIkveG .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-W2O4gFpiiTfIkveG .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-W2O4gFpiiTfIkveG .error-icon{fill:#552222;}#mermaid-svg-W2O4gFpiiTfIkveG .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-W2O4gFpiiTfIkveG .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-W2O4gFpiiTfIkveG .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-W2O4gFpiiTfIkveG .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-W2O4gFpiiTfIkveG .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-W2O4gFpiiTfIkveG .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-W2O4gFpiiTfIkveG .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-W2O4gFpiiTfIkveG .marker{fill:#333333;stroke:#333333;}#mermaid-svg-W2O4gFpiiTfIkveG .marker.cross{stroke:#333333;}#mermaid-svg-W2O4gFpiiTfIkveG svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-W2O4gFpiiTfIkveG p{margin:0;}#mermaid-svg-W2O4gFpiiTfIkveG .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-W2O4gFpiiTfIkveG .cluster-label text{fill:#333;}#mermaid-svg-W2O4gFpiiTfIkveG .cluster-label span{color:#333;}#mermaid-svg-W2O4gFpiiTfIkveG .cluster-label span p{background-color:transparent;}#mermaid-svg-W2O4gFpiiTfIkveG .label text,#mermaid-svg-W2O4gFpiiTfIkveG span{fill:#333;color:#333;}#mermaid-svg-W2O4gFpiiTfIkveG .node rect,#mermaid-svg-W2O4gFpiiTfIkveG .node circle,#mermaid-svg-W2O4gFpiiTfIkveG .node ellipse,#mermaid-svg-W2O4gFpiiTfIkveG .node polygon,#mermaid-svg-W2O4gFpiiTfIkveG .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-W2O4gFpiiTfIkveG .rough-node .label text,#mermaid-svg-W2O4gFpiiTfIkveG .node .label text,#mermaid-svg-W2O4gFpiiTfIkveG .image-shape .label,#mermaid-svg-W2O4gFpiiTfIkveG .icon-shape .label{text-anchor:middle;}#mermaid-svg-W2O4gFpiiTfIkveG .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-W2O4gFpiiTfIkveG .rough-node .label,#mermaid-svg-W2O4gFpiiTfIkveG .node .label,#mermaid-svg-W2O4gFpiiTfIkveG .image-shape .label,#mermaid-svg-W2O4gFpiiTfIkveG .icon-shape .label{text-align:center;}#mermaid-svg-W2O4gFpiiTfIkveG .node.clickable{cursor:pointer;}#mermaid-svg-W2O4gFpiiTfIkveG .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-W2O4gFpiiTfIkveG .arrowheadPath{fill:#333333;}#mermaid-svg-W2O4gFpiiTfIkveG .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-W2O4gFpiiTfIkveG .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-W2O4gFpiiTfIkveG .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-W2O4gFpiiTfIkveG .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-W2O4gFpiiTfIkveG .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-W2O4gFpiiTfIkveG .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-W2O4gFpiiTfIkveG .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-W2O4gFpiiTfIkveG .cluster text{fill:#333;}#mermaid-svg-W2O4gFpiiTfIkveG .cluster span{color:#333;}#mermaid-svg-W2O4gFpiiTfIkveG div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-W2O4gFpiiTfIkveG .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-W2O4gFpiiTfIkveG rect.text{fill:none;stroke-width:0;}#mermaid-svg-W2O4gFpiiTfIkveG .icon-shape,#mermaid-svg-W2O4gFpiiTfIkveG .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-W2O4gFpiiTfIkveG .icon-shape p,#mermaid-svg-W2O4gFpiiTfIkveG .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-W2O4gFpiiTfIkveG .icon-shape .label rect,#mermaid-svg-W2O4gFpiiTfIkveG .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-W2O4gFpiiTfIkveG .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-W2O4gFpiiTfIkveG .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-W2O4gFpiiTfIkveG :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 底层依赖 训练阶段
微调加速层 Unsloth
加载基座/4bit量化 + 包装LoRA
加载SFT模型送入对齐训练
配合调用
配合调用
配合调用
配合调用
配合调用
配合调用
FastLanguageModel

Unsloth核心类
SFT 监督微调
对齐 Alignment
transformers

模型、tokenizer基础接口
peft

LoRA/QLoRA适配器管理
bitsandbytes

4/8bit量化
accelerate

多卡、混合精度分布式
datasets

数据集加载清洗
trl

各类训练器 SFT/DPO/GRPO/PPO


推理部署阶段

训练完成后,权重导出到各个推理引擎
#mermaid-svg-gq3pjgcytUI3er99{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-gq3pjgcytUI3er99 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-gq3pjgcytUI3er99 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-gq3pjgcytUI3er99 .error-icon{fill:#552222;}#mermaid-svg-gq3pjgcytUI3er99 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-gq3pjgcytUI3er99 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-gq3pjgcytUI3er99 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-gq3pjgcytUI3er99 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-gq3pjgcytUI3er99 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-gq3pjgcytUI3er99 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-gq3pjgcytUI3er99 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-gq3pjgcytUI3er99 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-gq3pjgcytUI3er99 .marker.cross{stroke:#333333;}#mermaid-svg-gq3pjgcytUI3er99 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-gq3pjgcytUI3er99 p{margin:0;}#mermaid-svg-gq3pjgcytUI3er99 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-gq3pjgcytUI3er99 .cluster-label text{fill:#333;}#mermaid-svg-gq3pjgcytUI3er99 .cluster-label span{color:#333;}#mermaid-svg-gq3pjgcytUI3er99 .cluster-label span p{background-color:transparent;}#mermaid-svg-gq3pjgcytUI3er99 .label text,#mermaid-svg-gq3pjgcytUI3er99 span{fill:#333;color:#333;}#mermaid-svg-gq3pjgcytUI3er99 .node rect,#mermaid-svg-gq3pjgcytUI3er99 .node circle,#mermaid-svg-gq3pjgcytUI3er99 .node ellipse,#mermaid-svg-gq3pjgcytUI3er99 .node polygon,#mermaid-svg-gq3pjgcytUI3er99 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-gq3pjgcytUI3er99 .rough-node .label text,#mermaid-svg-gq3pjgcytUI3er99 .node .label text,#mermaid-svg-gq3pjgcytUI3er99 .image-shape .label,#mermaid-svg-gq3pjgcytUI3er99 .icon-shape .label{text-anchor:middle;}#mermaid-svg-gq3pjgcytUI3er99 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-gq3pjgcytUI3er99 .rough-node .label,#mermaid-svg-gq3pjgcytUI3er99 .node .label,#mermaid-svg-gq3pjgcytUI3er99 .image-shape .label,#mermaid-svg-gq3pjgcytUI3er99 .icon-shape .label{text-align:center;}#mermaid-svg-gq3pjgcytUI3er99 .node.clickable{cursor:pointer;}#mermaid-svg-gq3pjgcytUI3er99 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-gq3pjgcytUI3er99 .arrowheadPath{fill:#333333;}#mermaid-svg-gq3pjgcytUI3er99 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-gq3pjgcytUI3er99 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-gq3pjgcytUI3er99 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-gq3pjgcytUI3er99 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-gq3pjgcytUI3er99 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-gq3pjgcytUI3er99 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-gq3pjgcytUI3er99 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-gq3pjgcytUI3er99 .cluster text{fill:#333;}#mermaid-svg-gq3pjgcytUI3er99 .cluster span{color:#333;}#mermaid-svg-gq3pjgcytUI3er99 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-gq3pjgcytUI3er99 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-gq3pjgcytUI3er99 rect.text{fill:none;stroke-width:0;}#mermaid-svg-gq3pjgcytUI3er99 .icon-shape,#mermaid-svg-gq3pjgcytUI3er99 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-gq3pjgcytUI3er99 .icon-shape p,#mermaid-svg-gq3pjgcytUI3er99 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-gq3pjgcytUI3er99 .icon-shape .label rect,#mermaid-svg-gq3pjgcytUI3er99 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-gq3pjgcytUI3er99 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-gq3pjgcytUI3er99 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-gq3pjgcytUI3er99 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 推理部署阶段
导出权重
导出权重
导出权重
导出权重
导出权重
导出权重
导出GGUF/GPTQ/AWQ/合并权重
导出GGUF/GPTQ/AWQ/合并权重
导出GGUF/GPTQ/AWQ/合并权重
SFT模型
对齐后模型
FastLanguageModel

提供导出接口
vLLM

高吞吐生产推理 PagedAttention
llama.cpp

GGUF量化 低资源本地跑
transformers原生推理

调试demo,不适合高并发


一、节点定位:FastLanguageModel(Unsloth)

❗ 它不是一个训练算法 ,也不是替代 trl,它是模型加载+量化+LoRA包装+内核加速层

定位:在「基座」和「SFT/对齐训练」中间,做一层加速包装,输出模型给 trl 的Trainer

核心两个接口:

  1. FastLanguageModel.from_pretrained():加载模型,自动4bit量化、FlashAttention优化
  2. FastLanguageModel.get_peft_model():给模型包装LoRA,得到peft模型,送入SFT/DPO/GRPO训练
  3. FastLanguageModel.for_inference():训练结束后,开启推理优化
  4. 配套导出API:save_pretrained_merged / save_pretrained_gguf
pyhon 复制代码
from unsloth import FastLanguageModel
model, tokenizer = FastLanguageModel.from_pretrained("Qwen2-7B-Instruct", load_in_4bit=True)
# 包装LoRA
model = FastLanguageModel.get_peft_model(model, r=16)
# 交给 trl.SFTTrainer / DPOTrainer / GRPOTrainer

✅ 优点:重写CUDA内核,QLoRA微调显存更低、速度更快

⚠️ 局限:NVIDIA CUDA优先;版本绑定transformers、peft、trl,版本不匹配容易报错


二、训练阶段全部仓库分工 + 用法

1. transformers(HuggingFace核心)

定位:所有模型的底层基础库

  • 提供:AutoModelForCausalLM、AutoTokenizer、TrainingArguments
  • FastLanguageModel 加载出来的模型,本质依然兼容HF接口
  • 原生可以做普通微调,但是没有Unsloth的CUDA加速,显存开销大、慢
  • 用法:单独用它就是原生HF路线;搭配Unsloth时,一般不需要自己写AutoModel
python 复制代码
# 原生写法(对比unsloth)
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained(...)

2. peft

定位:LoRA/QLoRA适配器管理库

  • 负责:LoRA权重保存、加载、合并、禁用/激活adapter
  • FastLanguageModel.get_peft_model 内部就是封装peft逻辑
  • 用法:
    • 训练:自动attach LoRA层
    • 推理:PeftModel.from_pretrained(base_model, lora_dir) 加载LoRA
    • 合并:merge_and_unload()

Unsloth底层复用peft,但是自己做了梯度优化

3. bitsandbytes

定位:量化库,4bit / 8bit NF4量化

  • 原生HF QLoRA依赖它;Unsloth也依赖它做4bit加载
  • 作用:把基座压到4bit,让7B模型能在8G卡跑微调
  • 用法:一般不需要直接调用,load_in_4bit=True 内部自动启用

4. accelerate

定位:分布式训练、混合精度、设备管理

  • 负责:多卡、DeepSpeed、梯度累积、自动设备分配

  • trl.Trainer、Unsloth都依赖accelerate

  • 用法:

    bash 复制代码
    accelerate config
    accelerate launch train.py

5. datasets

定位:数据集加载、清洗、格式化

  • 加载jsonl、parquet、csv;做map、filter、shuffle
  • SFT、DPO、GRPO数据集都用它封装成Dataset
  • trl的SFTTrainer直接接收datasets对象
bash 复制代码
from datasets import load_dataset
ds = load_dataset("json", data_files="train.jsonl")

6. trl(Transformer Reinforcement Learning,前面重点讲的)

定位:对齐专用训练器集合,Unsloth的下游

FastLanguageModel产出model,喂给trl的Trainer

  • SFTTrainer:SFT监督微调
  • DPOTrainer:DPO偏好对齐
  • GRPOTrainer:GRPO推理对齐
  • PPOTrainer:PPO强化学习
  • RewardTrainer:训练奖励模型RM

示例(Unsloth + trl SFT)

python 复制代码
from trl import SFTTrainer, SFTConfig
trainer = SFTTrainer(
    model=model,
    tokenizer=tokenizer,
    train_dataset=ds,
    args=SFTConfig(max_seq_length=2048, output_dir="./sft")
)
trainer.train()

三、推理阶段仓库(训练完权重往这里送)

训练完成后,你有3种权重形态:LoRA适配器、合并后的完整HF权重、GGUF量化权重

1. transformers 原生推理

适合调试、简单demo,不适合高并发

python 复制代码
from transformers import pipeline
pipe = pipeline("text-generation", model="./merged")

2. vLLM(工业首选生产推理)

定位:PagedAttention,高吞吐、低延迟推理

  • 支持:HF模型、AWQ/GPTQ量化、LoRA在线加载
  • 一般流程:Unsloth导出合并权重或者AWQ → vLLM部署
  • 启动服务:
bash 复制代码
vllm serve ./merged_model --port 8000

3. llama.cpp(GGUF,本地低资源推理)

定位:GGUF格式,CPU、弱显卡、边缘设备跑

  • Unsloth内置接口直接导出GGUF:
bash 复制代码
model.save_pretrained_gguf("gguf_out", tokenizer, quantization_method="q4_k_m")
  • 用llama.cpp主程序、ollama、llama-cpp-python加载

四、两条完整链路对比(方便你写代码选型)

链路A:原生HF路线(无Unsloth)

基座 → transformers + bitsandbytes加载 → peft包装LoRA → datasets造数据 → trl训练 → 导出权重 → vLLM / llama.cpp

缺点:显存高、速度慢

链路B:Unsloth加速路线(你现在学的)

基座 → FastLanguageModel(unsloth)加载+量化+LoRA包装 → datasets造数据 → trl训练 → Unsloth一键导出GGUF/合并权重 → vLLM / llama.cpp

优点:省显存、微调更快,是现在个人/小卡微调主流方案


五、一句话总结每个库角色

库 角色 阶段
unsloth.FastLanguageModel 模型加载、量化、LoRA加速包装层 微调入口
transformers 模型、tokenizer基础接口 全链路
peft LoRA适配器管理 微调+推理
bitsandbytes 4/8bit量化 微调加载
accelerate 分布式、多卡 训练
datasets 数据集处理 训练
trl SFT/DPO/GRPO/PPO训练器 后训练对齐
vLLM 高吞吐生产推理 推理
llama.cpp GGUF本地轻量化推理 推理
相关推荐
Blockbuater_drug5 小时前
《AI Agent原理与实战》2026版 第30课 Function Calling 微调(SFT)
lora·模型微调·sft监督微调·训练数据构造·开源基座·工具调用训练
承渊政道3 天前
【大模型应用开发:基于GPT-4和ChatGPT】(GPT-4和ChatGPT的高级技巧)
chatgpt·模型微调·大模型应用开发·提示词优化
XGeFei6 天前
【模型微调(理论篇)】Fine-turning
模型微调
GPU实战笔记7 天前
L40S 云端任务验证:从推理、微调到生成工作流的边界
人工智能·模型微调·gpu租用·nvidia l40s·gpu 云服务器
goehou10 天前
LoRA 微调实战 - 显存、标签掩码与合并部署的踩坑记录(附清单)
深度学习·lora·大模型·模型微调
是Yu欸11 天前
面向启元 Q1 的手势交互:12 组 MobileNetV3 微调实验与 Skill 接入方案
交互·模型微调·具身智能
可乐ea13 天前
微调提速 6 倍:Qwen 27B 从 7 小时 44 分到 1 小时 17 分
性能优化·模型微调·训练加速·fsdp2·数据打包
承渊政道17 天前
【从零开始大模型开发与微调:基于PyTorch与ChatGLM】(开源大模型ChatGLM高级定制化应用实战)
人工智能·pytorch·python·llm·模型微调·glm
零域码客20 天前
RAG 和微调解决的是同一类问题吗?从大模型底层全链路拆解两者的本质与选择逻辑
大数据·人工智能·机器学习·模型微调·fine-tuning·检索增强生成·llm 架构