Qwen3.5 是开源社区的香饽饽,Unsloth 第一时间跟进了完整的微调支持
我花了两天研究了他们的文档和 Colab 笔记本,整理出这份从零到一的微调教程
0.8B 到 122B 全尺寸覆盖,文本、视觉、强化学习三条路线全打通
先说结论:Qwen3.5 + Unsloth 是目前性价比最高的开源模型微调方案。
核心优势:
各模型 bf16 LoRA 显存需求:
模型 | 显存 |
|---|---|
0.8B | 3GB |
2B | 5GB |
4B | 10GB |
9B | 22GB |
27B | 56GB |
35B-A3B(MoE) | 74GB |

Qwen3.5 bf16 LoRA 显存需求
重要提醒:
如果你不想写一行代码,Unsloth 新推出的开源 Web UI —— Unsloth Studio 是最佳选择。
安装(MacOS / Linux / WSL):
curl -fsSL https://unsloth.ai/install.sh | sh
Windows PowerShell:
irm https://unsloth.ai/install.ps1 | iex
安装很快,大约 1-2 分钟。然后启动:
unsloth studio -H 0.0.0.0 -p 8888
浏览器打开 http://localhost:8888,首次登录设置密码后就能开始了。

Unsloth Studio 界面
在搜索栏搜索 Qwen3.5,选模型、选数据集、调参数、点开始训练——全程鼠标操作:

配置训练参数
训练过程中可以实时监控损失曲线:

训练过程监控
训练完成后可以直接导出为 GGUF、safetensor 等格式:

导出模型
对于想精细控制的同学,下面是一个最小可运行的 SFT 代码:
from unsloth import FastLanguageModel
import torch
from datasets import load_dataset
from trl import SFTTrainer, SFTConfig
max_seq_length = 2048# 先从小开始
# 加载数据集(替换成你自己的)
url = "https://huggingface.co/datasets/laion/OIG/resolve/main/unified_chip2.jsonl"
dataset = load_dataset("json", data_files={"train": url}, split="train")
# 加载模型
model, tokenizer = FastLanguageModel.from_pretrained(
model_name = "Qwen/Qwen3.5-27B",
max_seq_length = max_seq_length,
load_in_4bit = False, # 不建议用 QLoRA
load_in_16bit = True, # bf16 LoRA
full_finetuning = False,
)
# 添加 LoRA 适配器
model = FastLanguageModel.get_peft_model(
model,
r = 16,
target_modules = [
"q_proj", "k_proj", "v_proj", "o_proj",
"gate_proj", "up_proj", "down_proj",
],
lora_alpha = 16,
lora_dropout = 0,
bias = "none",
use_gradient_checkpointing = "unsloth", # 长上下文 + 更低显存
random_state = 3407,
max_seq_length = max_seq_length,
)
# 训练
trainer = SFTTrainer(
model = model,
train_dataset = dataset,
tokenizer = tokenizer,
args = SFTConfig(
max_seq_length = max_seq_length,
per_device_train_batch_size = 1,
gradient_accumulation_steps = 4,
warmup_steps = 10,
max_steps = 100,
logging_steps = 1,
output_dir = "outputs_qwen35",
optim = "adamw_8bit",
seed = 3407,
dataset_num_proc = 1,
),
)
trainer.train()
关键参数说明:
load_in_16bit = True:使用 bf16 LoRA,稳定性最好use_gradient_checkpointing = "unsloth":Unsloth 专属的检查点机制,显存占用更低r = 16:LoRA 秩,越大精度越高但越容易过拟合lora_alpha = 16:建议 alpha >= r如果遇到 OOM,把 per_device_train_batch_size 降到 1,或者降低 max_seq_length。
对于 Qwen3.5-35B-A3B 或 122B-A10B 这样的 MoE 模型:
from unsloth import FastModel
model, tokenizer = FastModel.from_pretrained(
model_name = "unsloth/Qwen3.5-35B-A3B",
max_seq_length = 2048,
load_in_4bit = False,
load_in_16bit = True,
full_finetuning = False,
)
Unsloth 的 MoE 训练内核默认启用,号称比标准方案快 12 倍、显存减少 35%、上下文长度提升 6 倍。默认禁用路由层微调以保证稳定性。
122B-A10B 的 bf16 LoRA 需要 256GB 显存,多卡用户加 device_map = "balanced"。
Qwen3.5 本身就是一个统一的视觉语言模型,所以视觉微调非常自然:
from unsloth import FastVisionModel
model, tokenizer = FastVisionModel.from_pretrained(
"unsloth/Qwen3.5-4B",
load_in_4bit = False,
use_gradient_checkpointing = "unsloth",
)
model = FastVisionModel.get_peft_model(
model,
finetune_vision_layers = True, # 微调视觉层
finetune_language_layers = True, # 微调语言层
finetune_attention_modules = True, # 微调注意力层
finetune_mlp_modules = True, # 微调 MLP 层
r = 16,
lora_alpha = 16,
lora_dropout = 0,
bias = "none",
random_state = 3407,
target_modules = "all-linear",
modules_to_save = ["lm_head", "embed_tokens"],
)
亮点在于可以精细控制微调哪些部分——你可以选择只微调视觉层、只微调语言层,或者只微调注意力 / MLP 层,组合随意。
想在免费 T4 GPU 上跑?用官方 Colab 笔记本:
即使 vLLM 暂时还不支持 Qwen3.5,你仍然可以通过禁用 fast inference 来做 GRPO:
from unsloth import FastLanguageModel
model, tokenizer = FastLanguageModel.from_pretrained(
model_name = "unsloth/Qwen3.5-4B",
fast_inference = False, # 关键:禁用 fast vLLM 推理
)
如果你想保留模型的推理能力,建议训练数据中至少保留 75% 的推理风格示例,其余可以用直接答案。
Unsloth 做了超过 150 次 KL 散度基准测试,总计 9TB 的 GGUF,得出了几条关键结论,这里帮你划重点:

KLD 基准测试结果
量化选择建议:

Tensor 类型敏感度分析
另外一个很重要的发现:困惑度(PPL)和 KL 散度可能具有误导性。Unsloth Dynamic IQ2_XXS 在真实评估(LiveCodeBench v6、MMLU Pro)上表现优于 AesSedai 的 IQ3_S,尽管体积小 11GB,但后者的 PPL 和 KLD 指标反而更好看。所以千万不要只看 PPL 就下结论。

GGUF 量化选择五大关键原则
微调完成后,导出到各种格式都很方便:
导出为 GGUF(给 Ollama / llama.cpp 用):
model.save_pretrained_gguf("directory", tokenizer, quantization_method="q4_k_m")
model.save_pretrained_gguf("directory", tokenizer, quantization_method="q8_0")
导出为 16-bit(给 vLLM 用):
model.save_pretrained_merged("finetuned_model", tokenizer, save_method="merged_16bit")
只保存 LoRA 适配器:
model.save_pretrained("finetuned_lora")
tokenizer.save_pretrained("finetuned_lora")
推到 HuggingFace:
model.push_to_hub_gguf("hf_username/model", tokenizer, quantization_method="q4_k_m")
⚠️ 注意:vLLM 0.16.0 不支持 Qwen3.5,需要等 0.170 或用 Nightly 版本。如果导出模型在其他运行时效果变差,大概率是聊天模板 / EOS 令牌用错了——必须和训练时保持一致。
整理一下整个微调路径:
路线 | 适合谁 | 显存门槛 | 推荐 |
|---|---|---|---|
Unsloth Studio | 不想写代码 | 取决于模型 | ⭐⭐⭐⭐⭐ |
SFT 代码微调 | 需要精细控制 | 3GB(0.8B)起 | ⭐⭐⭐⭐⭐ |
视觉微调 | 做多模态应用 | 10GB(4B)起 | ⭐⭐⭐⭐ |
GRPO 强化学习 | 提升推理能力 | 10GB 起 | ⭐⭐⭐⭐ |
MoE 微调 | 要大模型能力 | 74GB 起 | ⭐⭐⭐ |

Qwen3.5 微调路径一览
Unsloth 在 Qwen3.5 上的支持可以说是教科书级别的——从 Studio 无代码方案到 Colab 免费笔记本,再到 GGUF 量化基准的深度研究,生态做得相当完整。唯一的坑是 MoE 模型对硬件要求较高,以及 transformers v5 的硬依赖。
参考链接:
#Qwen3.5 #Unsloth #微调 #GGUF #大模型
制作不易,如果这篇文章觉得对你有用,可否点个关注。给我个三连击:点赞、转发和在看。若可以再给我加个🌟,谢谢你看我的文章,我们下篇再见!