整体思路
承接上面的训练流程图,新增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
核心两个接口:
FastLanguageModel.from_pretrained():加载模型,自动4bit量化、FlashAttention优化FastLanguageModel.get_peft_model():给模型包装LoRA,得到peft模型,送入SFT/DPO/GRPO训练FastLanguageModel.for_inference():训练结束后,开启推理优化- 配套导出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
-
用法:
bashaccelerate 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本地轻量化推理 | 推理 |